当前位置:  开发笔记 > 小程序 > 正文

CUDA:使用-deviceemu和gdb进行调试

如何解决《CUDA:使用-deviceemu和gdb进行调试》经验,为你挑选了1个好方法。

我写了一个CUDA应用程序,里面有一些硬编码参数(通过#defines).一切似乎都正常,所以我尝试了其他一些参数.现在,该程序不再正常工作.

所以,我想调试它.我用-deviceemu -g -O0选项编译应用程序,因为我读到我可以使用gdb来调试它.在gdb中,我在内核启动时设置断点break kernelstart.

但是,gdb会在我的CUDA内核开始时跳转,但是我不能单步执行它,因为它不允许我检查内核中的内容.我认为最好是给出gdb的输出:

Breakpoint 1, kernelstart (__cuda_0=0x100000, __cuda_1=0x101000, __cuda_2=0x102000, __cuda_3=0x102100) at cudatest.cu:287
(gdb) s
__device_stub__Z12kernelstartPjS_S_S_ (__par0=0x100000, __par1=0x101000, __par2=0x102000, __par3=0x102100) at /tmp/tmpxft_000003c4_00000000-1_cudatest.cudafe1.stub.c:7
7   /tmp/tmpxft_000003c4_00000000-1_cudatest.cudafe1.stub.c: No such file or directory.
    in /tmp/tmpxft_000003c4_00000000-1_cudatest.cudafe1.stub.c
(gdb) s
cudaLaunch (entry=0x804a98d "U\211\345\203\354\030\213E\024\211D$\f\213E\020\211D$\b\213E\f\211D$\004\213E\b\211\004$\350\r\377\377\377\311\303U\211\345\203\354\070\307\004$\340 \005\b\350\345\341\377\377\243P!\005\b\307\004$x\234\004\b\350\b\001") at /usr/local/cuda/bin/../include/cuda_runtime.h:773
(gdb) s
(gdb) s
cudatest (__cuda_0=0x100000, __cuda_1=0x101000, __cuda_2=0x102000, __cuda_3=0x102100) at cudatest.cu:354
(gdb) s

之后,它会跳回我的main程序.

我知道我的规格不仅仅是含糊不清,但任何人都可以猜出问题出在哪里?是否可以使用gdb检查内核?



1> codetwiddler..:

    使用cuda-gdb

    编译: nvcc -g -G filename.cu

    在你的a.out上调用cuda-gdb

    您可以照常在内核函数中设置断点.

    运行程序,它应该在你的内核函数内停止.

    您甚至可以使用如下命令获取当前正在执行的线程的详细信息cuda thread.其他命令如cuda block存在.

    在线程之间切换说 cuda thread (x,y,z)

有关更多详细信息,请参阅最新版本的cuda-gdb文档.如果您使用的是最新版本的cuda工具包(即截至今天的3.2),请确保您正在查看最新版本的文档(因为选项已经发生了很大变化).

并且还要确保从控制台(X11外部)运行cuda-gdb,因为您要停止GPU进行调试.

希望这可以帮助.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有