Существуют ли какие-либо ограничения для выделения памяти устройства, несмотря на то, что она не превышает доступную память?
Я получаю следующую ошибку после попытки выделить 64 МБ:
cudaSafeCall() Runtime API error : out of memory.
Однако, согласно cuMemGetInfo , осталось более 200 МБ.
Вот сценарий:
size_t size = 4096 * 4096 * sizeof (float);
cuMemGetInfo(&fr, &ttl); // fr indicates 284 MB
cutilSafeCall(cudaMalloc((void**) &tmp, size));
p1 = tmp;
cuMemGetInfo(&fr, &ttl); // fr indicates 220 MB
cutilSafeCall(cudaMalloc((void**) &tmp, size)); // this fails !!!
p2 = tmp;
Чего мне не хватает?
Я использую:
Cuda compilation tools, release 3.2, V0.2.1221
NVidia Driver 260.19.26
Linux(Slackware) x86
Обновление:
Это поведение совершенно недетерминированное. Время от времени вышеупомянутый случай успешен, и я получаю правильные результаты, без любой ошибки.