2011-06-03 64 views
0

我有一些cuda代碼運行通過一些FFT和其他數學運算,它可以在用戶請求的2^n塊上運行。第一次運行時代碼運行良好,但運行足夠長時間後開始失敗。最終,如果我運行的任何塊大小大於2^ll,我都將無法返回數據(全爲零)。我已經通過修改內核代碼和我能告訴內核沒有執行完成了一些測試。我試圖找出爲什麼我的代碼在大塊大小的多次迭代後停止生成數據。cuda內核不執行或返回錯誤

這個問題乍一看是內存泄漏。我知道我必須運行多次處理才能導致錯誤。起初只有大的塊大小纔會停止工作,但是當我運行更多的迭代時,更小的塊大小也會開始失敗。我不確定問題的原因是內存是我的代碼將工作的塊大小低於2^11,無論我運行多少次迭代。如果這是一個簡單的內存泄漏,我會期望症狀逐漸變得更糟,直到我無法訪問卡上的任何內存。我也注意到較大的塊大小(大致相當於每個線程使用的內存量)往往會導致程序更快失敗。處理塊的數量增加(即Cuda線程的數量)似乎不會影響代碼何時開始失敗。

據我所知,沒有錯誤代碼正在返回,內核似乎根本沒有執行。

任何人都可以建議我是什麼導致這個問題?我會解決如何調試在GPU上運行的代碼或監視GPU內存可用性的任何見解。

+1

'cuda-gdb'並檢查您的返回狀態 – Anycorn 2011-06-03 19:58:44

+0

cuda 4.0?或舊版本? – 2011-06-03 21:44:41

+0

我應該使用最新版本的cuda。我的術語也很sl sl。我正在增加我的塊大小,而不是我的線程大小。 – drew 2011-06-06 13:43:42

回答

0

如果您需要更多計算,請修正網格大小而不是線程塊大小。引用第3頁的CUDA編程指南3.0。 8,「在當前的GPU上,一個線程塊最多可以包含512個線程。」

這意味着threadIdx.x * threadIdx.y * threadIdx.z < = 512在任何時候。如果你保持不變,做事情有效嗎?