cudaMalloc在几个小时后失败

问题描述:

有没有任何理由为什么cudaMalloc在运行2-3小时的gpu代码时未能分配内存?
我正在使用“Process Explorer”程序来检查全局内存使用情况。突然间,cudaMalloc未能分配,尽管gpu上的空闲全局内存仍然可用。cudaMalloc在几个小时后失败

我该如何检查这种故障的主要原因?我这样做:

if (cudaSuccess !=cudaMalloc((void **) &arr, sizeof(int)*100)) 
    printf("Cannot Allocate Mem"); 

有没有更好的方法来打印cuda失败的实际原因?

+2

如果你真的有GPU上的空闲内存(你怎么知道这一点?),一个可能的解释是内存碎片。然而,在你的例子中,分配是非常小的,看起来很奇怪,它会导致分散情况下的失败。在任何情况下,如果您可以重构代码以“保留”分配并减少对cudaMalloc()/ cudaFree()的调用次数,那将有所帮助。 – ArchaeaSoftware 2011-12-26 18:29:26

您可以在下面做:

cudaError_t err= cudaMalloc((void **) &arr, sizeof(int)*100); 
if(err != cudaSuccess){ 
    printf("The error is %s", cudaGetErrorString(err)); 
} 

这将打印错误的确切原因。例如。无效的设备指针意味着您正在访问一个指向任何内容的指针。