簡體   English   中英

CUDA:使用-deviceemu和gdb進行調試

[英]CUDA: Debug with -deviceemu and gdb

我編寫了一個CUDA應用程序,其中包含一些硬編碼的參數(通過#define )。 一切似乎都正常,因此我嘗試了其他一些參數。 現在,該程序無法正常運行了。

所以,我想調試它。 我使用-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<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檢查內核?

  1. 使用cuda-gdb
  2. 編譯: nvcc -g -G filename.cu
  3. 在a.out上調用cuda-gdb
  4. 您可以照常在內核函數中設置斷點。
  5. 運行該程序,它應該停止在您的內核函數中。
  6. 您甚至可以使用cuda thread類的命令來獲取當前正在執行的線程的詳細信息。 存在其他命令,例如cuda block
  7. 要在線程之間切換,請說cuda thread (x,y,z)

有關更多詳細信息,請參考最新版本的cuda-gdb文檔。 如果您使用的是最新版本的cuda工具包(即截至今天為3.2),請確保您正在查看的是最新版本的文檔(因為這些選項已發生很大變化)。

還要確保您正在從控制台(X11外部)運行cuda-gdb,因為您將停止GPU進行調試。

希望這可以幫助。

編譯:

nvcc -g -G-保持

為我解決了這個問題。 這樣可確保不會擦除編譯期間生成的所有中間文件,以便調試器可以找到它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM