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运行它。

    关于profiling - 诊断CUDA内核问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5687506/

    10-09 14:54
    查看更多