2011-12-25 42 views
0

有沒有任何理由爲什麼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

回答

2

您可以在下面做:

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

這將打印錯誤的確切原因。例如。無效的設備指針意味着您正在訪問一個指向任何內容的指針。

相關問題