У меня есть C# -программа, вызывающая DLL-метод, написанный на C++, чтобы получить указатель на память, выделенную на моей видеокарте, используя cudaMalloc. Позже я передаю этот указатель на некоторый CUDA-метод той же DLL. Это отлично подходит для данных объемом до 2 ГБ. Но как только я пытаюсь держать указатели на более чем двух 1-ГБ-данных-кусках, программа завершается без каких-либо сообщение об ошибке:C# -программа завершается при попытке выделить более 2 ГБ cudaMalloc в DLL-методе C++
char*_test1 = CudaDllWrapper.getDeviceCharPointerTo1GBData(filename);
char* test2 = CudaDllWrapper. getDeviceCharPointerTo1GBData (filename);
char* test3 = CudaDllWrapper.. getDeviceCharPointerTo1GBData (filename); //program terminates in this line
В Cuda-DLL-кода является следующее:
char* getDeviceCharPointerTo1GBData (const char* a_pcFileName) {
char* pcLargeData = ReadPreRasteredImageAsChar(a_pcFileName);
char* pcPrerasteredImage_dyn = NULL;
unsigned long long iSourceImageSize_byte = getFileSize(a_pcFileName);
size_t freeMem, total;
cudaMemGetInfo(&freeMem, &total);
if (freeMem > iSourceImageSize_byte)
cudasafe(cudaMalloc((void **)&pcPrerasteredImage_dyn, iSourceImageSize_byte), "Original image allocation ", __FILE__, __LINE__);
else
return NULL;
}
Как видите, я проверяю наличие достаточной памяти на графической карте, но по-прежнему кажется, что осталось достаточно памяти, и поэтому DLL-метод вызывает cudaMalloc
, что, по-видимому, приводит к завершению работы программы. Когда я оставляю cudaMalloc
невостребованным, передавая bool при третьем вызове getDeviceCharPointerTo1GBData
, программа больше не заканчивается.
Я запускаю Windows 7 и теперь, мне интересно, если WDDM затрудняет мою жизнь с ограничением 2GB. Но я ожидал, что cudaMalloc просто выйдет из строя, но не будет отменено все вызывающее C# -приложение. Может быть, Windows 7 завершает мою программу, когда она пытается выделить графическую карту памяти за это ограничение в 2 ГБ? И как я могу предотвратить такой сбой, возвращая вместо него нулевой указатель?
Имеет ли система достаточно памяти GPU? – NathanOliver