2011-04-16 119 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