cudaMemcpy max size

Написал программу, на малых размерах все отрабатывает корректно, но с увеличением, начинаются различные сигфолты. Большинство из них вполне понятны, но вот пример одного из тех который мне не понятен:
(кратко основные места)

int M = 0;
M = pow(2, p_num); // p_num 25

float h_num = M * sizeof (float);
float * h_best_num = new float(M);

int * best_num;
cudaMalloc ((void**)&best_num, h_num);

cudaMemcpy(h_best_num, best_num, numVec, cudaMemcpyDeviceToHost);

В результате вот, что получаю:

p_num: 25
2^p_num (M) = 33554432

CPU declaration:
Declaration h_best_num[M]...

GPU declaration:
cudaMalloc best_num[h_num]...

Transfer data from CPU to GPU successful complete.

Start GPU kernel...

End GPU kernel...

Transfer data from GPU to CPU:
cudaMemcpyDeviceToHost: best_num to h_best_num memory (h_num)...
Segmentation fault

Закралось мнение, что есть какое-то ограничение на numBytes, но подобной информации не нашел.

"Device memory copy wil be restricted to what amount of memory your GPU has. (Also you can't use the entire device memory. E.g: if you have 320 MB in the card, the whole 320 MB will not be available since some part of the memory will be used for display) "

Буду рад любому совету.

P.S:
Compute capability : 1.3
Name : Tesla C1060
Total Global Memory : -196608
Shared memory per block: 16384
Registers per block : 16384
Warp size : 32
Max threads per block : 512
Total constant memory : 65536

Forums: