诊断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
我什至不必解释该错误信息...     
已邀请:
在CUDA中,“未指定的启动失败”等同于段错误。 最新的工具包版本附带一个名为cuda-memcheck的实用程序。它对执行中的内核内部的内存事务执行类似于valgrind的分析,并将报告缓冲区溢出或内核中任何非法指针的使用。您可以将其用作进一步分析的起点。如果您使用的是Fermi卡,则还提供内核内printf支持,不难生成自己的assert函数来测试和报告内核中的错误情况。 CUDA还附带了源代码级调试器,但是您需要专用的GPU才能使用它。如果您使用的是Linux,并且只有一个GPU,请退出X11并从控制台TTY运行它。     
如果设置了“保留预处理文件”标记--keep,将保留CUBIN文件和许多其他文件供您查看。但是我不确定这会有所帮助。     
您正在使用cudaGetLastError()吗?如果尚未使用“未指定的启动失败”信息,则可以帮助提供更多信息。     

要回复问题请先登录注册