[英]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檢查內核?
nvcc -g -G filename.cu
cuda thread
類的命令來獲取當前正在執行的線程的詳細信息。 存在其他命令,例如cuda block
。 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.