2011-04-20 37 views
1

我想拍攝屏幕上發生的事情,但屏幕截圖不會捕獲它,但最好的描述是下雪。CUDA卡偶爾會出現中間運行的「啓動失敗」,以及雪

我的一個項目有一個習慣,就是在一個新的迭代中隨機失敗,我總是認爲它是'你使用的內存太多了!錯誤,所以很高興重新啓動,處理它,並嘗試解決問題。

然後我開始實際監視分配的全局內存;它在整個執行過程中一直保持在70%左右,直到突然死在一個新的malloc上。

爲了讓事情更加令人擔憂,這些上師冥想已經開始習慣性地出現在我的dmesg中;所有(我注意到)與相同的地址。

NVRM: Xid (0000:01:00): 13, 0008 00000000 000050c0 00000368 00000000 00000080 

明智的話到底是怎麼回事?我仍在繼續調查註冊和共享內存的問題,但是想要爲任何其他人的想法提出這個問題。

+0

您正在使用哪個版本的CUDA,以及哪個GPU? – karlphillip 2011-04-20 16:58:49

+0

你幾乎肯定寫作超出範圍。計算能力<2.0的卡在這些情況下可能表現不佳。 – 2011-04-22 19:06:49

+0

最新的驅動程序,但'老'sm_13卡(geforce 9800,我認爲) – Bolster 2011-04-23 20:01:47

回答

1

如果您的CUDA內存分配都沒有失敗,那麼您的問題不是您內存不足(如果您是由碎片引起的,不一定是由於100%消耗)。

如果您正在獲取x-mas樹效果,那麼您可能有一個寫入分配內存之外的內核。檢查您正在訪問的像素/陣列單元的索引以及它們在輸出緩衝區中位置的內存偏移量計算。

您也可以在調用內核時嘗試使用1D索引,以使計算更簡單。 (你可以模擬任何多維數組作爲一項長期的一維數組。)

0

請換到CUDA運行時API所有呼叫cudaSafeCall()和所有內核調用後添加cudaCheckError()。這些實用功能在cutil.h中公開。這應該可以幫助您在實際發生的點上捕捉任何CUDA錯誤,並且它們的錯誤消息應該有助於您的調查。

+0

所有的內核調用都通過預先打包的PyCUDA調用。 – Bolster 2011-04-21 13:54:01

+0

Andrew:我對PyCuda並不熟悉,但在每次調用之後進行一些錯誤檢查(使用cudaGetLastError)會很有幫助。 – 2011-04-21 13:55:39

相關問題