诊断CUDA内核问题

时间:2011-04-16 15:26:41

标签: profiling runtime-error diagnostics cuda

CUDA在整个地方都有很多文档和指南,但是我无法找到的是如何诊断编译的内核的任何形式的指令,但是会得到一些含糊不清的错误消息,例如'未指定的启动失败'超出正常范围'这些块/网格结构是否有意义?“等。

我可以以某种方式拦截cubin文件并对内存结构进行一些静态分析吗?请原谅我的小说,但我无法在任何地方找到任何明确的白痴指南。

每个人都度过一个美好的周末。

我正在寻找什么

  • 如何分离cubin中间文件
  • 之后如何解决正在发生的事情,特别是注册和内存配置,以查看我的代码是否违反了任何硬件要求,或者我是否只是在某个地方错过了一个错误。

对于后来遇到这种情况的人(我似乎习惯于创建SO问题,这些问题会在几个月后继续出现在我自己的查询中......)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

我甚至不必解释该错误信息......

3 个答案:

答案 0 :(得分:3)

在CUDA中,“未指定的启动失败”相当于段错误。

最近的工具包版本附带了一个名为cuda-memcheck的实用程序。它像执行内核中的内存事务分析一样执行valgrind,并将报告内核中的缓冲区溢出或任何非法指针使用情况。您可以将其用作进一步分析的起点。如果您使用的是Fermi卡,还有内核中的printf支持,那么生成自己的断言函数并不难以测试和报告内核中的错误情况。

CUDA还附带一个源代码级调试器,但您需要专用的GPU来使用它。如果您使用的是Linux并且只有一个GPU,请退出X11并从控制台TTY运行它。

答案 1 :(得分:2)

如果您设置了保留预处理文件标记 - 请注意这将使CUBIN文件和其他许多人留下来让您查看。但我不确定这会有多大帮助。

答案 2 :(得分:2)

您使用的是cudaGetLastError()吗?如果尚未用于“未指定的启动失败”,这可能有助于提供更多信息。