2012-04-13 85 views
0

我有一個CUDA卷積內核,它經常被調用(它用於實時渲染)。每次我想調用內核時,我應該使用cudaMalloc還是cudaFree?我試圖存儲的指針cudaMalloc結果和內核執行之前剛剛cudaMemcpy'ing事情繼續進行,但我經歷了怪異的行爲(如內核執行後空內存)CUDA - 我必須每次都分配和釋放內存嗎?

我也在考慮使用固定的內存,但如果我必須每次分配和釋放它,甚至可以減慢應用程序的運行速度。我應該如何處理經常被調用的內核?

回答

2

這聽起來像你在做什麼應該工作。

也許你的內核有bug。在內核啓動調試後,嘗試添加cudaThreadSynchronize和cudaGetLastError調用。

沒有更多的信息,我無法爲您提供更多的建議。

+0

謝謝你,cudaGetLastError調用幫助,顯然我分配了比我的圖形卡更多的線程和塊。 – paulAl 2012-04-13 11:08:07

+0

您應該在所有cuda函數之後放置cudaGetLastError調用以從中捕捉錯誤。當CUDA死亡時,它靜靜地死去...... – 2012-04-16 05:57:41

3

不,沒有理由爲每個內核調用malloc/free。 Malloc的內存保持有效直到你釋放它。我們有很多代碼可以在分配的內存上執行許多內核,包含和不包含cudaMemcpy來更改它們之間的內容。

您的問題必須在別處。嘗試將其解釋爲顯示問題併發布代碼的最小可能示例。