3

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

我什至不必解释该错误消息...

4

3 回答 3

3

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

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

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

于 2011-04-16T16:37:45.630 回答
2

如果您设置 Keep Preprocessed Files 标志 --keep 这将留下 CUBIN 文件和许多其他文件供您查看。但我不确定这会有多大帮助。

于 2011-04-16T16:18:41.987 回答
2

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

于 2011-04-16T16:26:28.887 回答