CUDA-MEMCHECK報告這種信息的發佈模式CUDA內核:CUDA memcheck地址 - 如何確定代碼中的位置?
========= Error: process didn't terminate successfully
========= Invalid __global__ read of size 4
========= at 0x000002c8 in xx_kernel
========= by thread (0,0,0) in block (0,0)
========= Address 0x10101600014 is out of bounds
=========
========= ERROR SUMMARY: 1 error
此故障只發生在釋放模式。在cuda-gdb下運行時也不會發生這種情況。
如何獲取0x000002c8地址並確定導致錯誤的代碼?我瀏覽了緩存的中間文件(.ptx,.cubin等),並沒有看到明顯的方式來確定錯誤的源代碼。
這是x86_64 Linux上的CUDA 3.2。
更新:原來這是3.2中的編譯器錯誤。升級到4.0會導致memcheck錯誤消失。此外,我能夠將cuobjdump的CUBIN從4.0拆卸下來,但由於它是發佈模式並進行了優化,因此將反彙編與源代碼進行匹配非常困難。
您可以發佈您的內核代碼,以便我們可以看到爲什麼這個線程訪問的外邊界區的? – jopasserat
不幸的是它的專有源代碼,所以我不能發佈實際的代碼。謝謝。 – dwelch91