2011-04-16 165 views
3

CUDA在各處都有大量文檔和指南,但我一直無法找到的是如何診斷編譯內核的任何形式的指令,但會得到諸如此類的模糊的錯誤消息作爲超出正常範圍的「未指定的啓動失敗」「這些塊/網格結構是否有意義?等診斷CUDA內核問題

我可以以某種方式攔截cubin文件,並對內存結構等做一些靜態分析?原諒我的不高興,但我無法在任何地方找到任何明確的白癡指南。

祝大家週末愉快。

我正在尋找

  • 如何分離出的cubin中間文件
  • 做什麼用它之後制定出了什麼事情,特別是註冊和內存配置,看看我的代碼違反了任何硬件要求,或者如果我在某處錯過了一個錯誤的錯誤。

對於任何人碰到這個未來更高版本(我似乎已經創建,使保持顯示在我自己的查詢個月後......問題的習慣)CUDA-Memcheck給出更有趣的反應是,「檢查錯誤」處理。例如

========= Error: process didn't terminate successfully 
========= Invalid __global__ write of size 4 
=========  at 0x00000040 in decomp 
=========  by thread (1,0,0) in block (0,0,0) 
=========  Address 0x00101024 is out of bounds 
========= 
========= ERROR SUMMARY: 1 error 

我甚至沒有解釋該錯誤信息......

+0

所以我認爲我們回答了第1部分,CUBIN文件。第2部分可能取決於你在做什麼。你能舉出一個你遇到這些錯誤的場景的具體例子嗎? – 2011-04-16 17:19:13

回答

3

在CUDA中,「未指定的啓動失敗」相當於段錯誤。

最近的工具包版本附帶一個名爲cuda-memcheck的實用程序。它對執行內核中的內存事務執行valgrind分析,並將報告內核中的緩衝區溢出或任何非法指針使用情況。您可以將其用作進一步分析的起點。如果您使用的是Fermi卡,還有內核printf支持,生成您自己的斷言函數來測試並報告內核中的錯誤條件並不困難。

CUDA還附帶一個源代碼級調試器,但您需要一個專用的GPU來使用它。如果你在Linux上,只有一個GPU,退出X11並從控制檯TTY運行它。

+0

我稱之爲'答案',因爲它容易指出我的問題的來源,但tbh大家的答案和意見是非常有幫助的。 – Bolster 2011-04-16 18:37:51

2

如果將保持預處理文件標誌--keep這將離開的cubin文件和其他人躺在附近的一臺主機讓你看看。但我不確定這會有多大幫助。

+0

謝謝,但我想我想知道的是我能做些什麼(如上所述,我不是一個真正的大師在這...) – Bolster 2011-04-16 16:30:10

+0

@Andrew Bolster:你可以反彙編CUBIN文件來看看最終的機器碼在卡上運行,但這不是你想要的。 – talonmies 2011-04-16 16:39:40

2

您使用的是cudaGetLastError()嗎?如果它還沒有用來給出「未明確的發射失敗」,這可能有助於提供更多信息。

+0

謝謝你的回答;但是,是的,那是我得到我的當前信息從:) – Bolster 2011-04-16 16:29:30