Почему cudaMalloc выдает ошибку, когда я знаю, что памяти достаточно?

У меня есть Tesla C2070, которая должна иметь 5636554752 байт памяти.

Однако это дает мне ошибку:

int *buf_d = NULL;

err = cudaMalloc((void **)&buf_d, 1000000000*sizeof(int));

if( err != cudaSuccess)
{
     printf("CUDA error: %s\n", cudaGetErrorString(err));
     return EXIT_ERROR;
}

Как такое возможно? Это как-то связано с максимальным шагом памяти? Вот спецификации GPU:

Device 0: "Tesla C2070" 
CUDA Driver Version:    3.20 
CUDA Runtime Version:   3.20 
CUDA Capability Major/Minor version number: 2.0 
Total amount of global memory:  5636554752 bytes 
Multiprocessors x Cores/MP = Cores: 14 (MP) x 32 (Cores/MP) = 448 (Cores) 
Total amount of constant memory:    65536 bytes Total amount of shared memory per block:    49152 bytes Total number of registers available per block: 32768 Warp size: 32 
Maximum number of threads per block:    1024 
Maximum sizes of each dimension of a block: 1024 x 1024 x 64 
Maximum sizes of each dimension of a grid:  65535 x 65535 x 1
Maximum memory pitch: 2147483647 bytes

Что касается машины, на которой я работаю, то она имеет 24 процессора Intel® Xeon® Processor X565, с дистрибутивом Linux Rocks 5.4 (Maverick).

Есть идеи? Спасибо!

5
задан Michael Eilers Smith 18 January 2012 в 20:45
поделиться