代码之家  ›  专栏  ›  技术社区  ›  phimuemue

CUDA:使用-deviceemu和gdb调试

  •  1
  • phimuemue  · 技术社区  · 14 年前

    #define s) 是的。一切似乎都正常,所以我尝试了一些其他参数。现在,程序不再正常工作了。

    -deviceemu -g -O0 选项,因为我读到可以使用gdb调试它。在gdb中,我使用 break kernelstart .

    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<char> (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检查内核?

    2 回复  |  直到 13 年前
        1
  •  7
  •   codetwiddler    14 年前
    1. 使用cuda gdb
    2. 编译: nvcc -g -G filename.cu
    3. 在你的a.out上调用cuda gdb
    4. 您可以像往常一样在内核函数中设置断点。
    5. 您甚至可以使用如下命令获取当前线程的详细信息 cuda thread . 其他命令,如 cuda block 存在。
    6. 在线程之间切换 cuda thread (x,y,z)

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

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

        2
  •  1
  •   Pawel    13 年前

    编译方式:

    nvcc-g-g—保留