gpt4 book ai didi

debugging - CUDA 调试,或者如何在不禁用优化的情况下获取 cuda-gdb 中的源代码行?

转载 作者:行者123 更新时间:2023-12-04 23:27:23 26 4
gpt4 key购买 nike

我有一个相当大且复杂的 CUDA 代码,对于大量块/线程,它非常可靠地挂起。我试图弄清楚代码卡在哪里。

当我在 cuda-gdb 中运行代码时,我可以看到哪些线程/块挂了,但是除了“虚拟 PC”之外,我看不到哪里。

如果我用“-G”编译代码以获取调试信息,它运行速度会慢很多并且拒绝挂起,无论我运行多长时间。

有没有办法将“虚拟 PC”映射到源代码中的一行代码,甚至是近似映射?或者有没有办法在不关闭所有优化的情况下获取调试信息?

我试过使用“-G3”,但无济于事。这只是给了我“nvcc warning : Setting optimization level to 0 as optimized debugging is not supported”类型的警告。我正在使用 CUDA 编译工具 4.1 版。

最佳答案

好吧,我想我已经自己弄清楚了。

cuobjdump在路径中,然后在 cuda-gdb , 命令 x $pc将为您提供当前线程停止的汇编程序。问题是如果源代码不是用 -G 编译的,您将无法将汇编语句与代码中的一行相关联。

要将汇编程序与内核代码匹配,首先确保您使用 nvcc -keep [..] mykernel.cu 编译内核。 .这应该会生成文件 mykernel.sm_20.cubin (或您选择的任何拱门)和 mykernel.ptx .

要获得整个内核的汇编程序,请运行 cuobjdump -sass mykernel.cubin > output.ptx .在 cuda-gdb , 做 x/20i $pc-80获取一些上下文,并在文件 output.ptx 中查找这些行.然后,您可以尝试将这些行与 mykernel.ptx 中的 PTX 代码相匹配。其中包含 .loc引用源代码行的语句。

这种方法需要一点创造力来匹配来自 cubin 文件的 PTX 和来自 nvcc 的 PTX。 ,因为说明可能会稍微重新排序。在我的代码中,我有大块 FFMA我可以寻找获取方位的说明。您可以使用“output.ptx”从调试器中找到确切的行,然后在“mykernel.ptx”中查找相同的相对位置。

这一切都涉及相当多的工作,但它确实允许您缩小“虚拟 PC”在原始来源中的位置。

关于debugging - CUDA 调试,或者如何在不禁用优化的情况下获取 cuda-gdb 中的源代码行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10588468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com