2012-07-23 131 views
0

我正在嘗試調試可正常工作的源代碼,並且在編譯時不會給出錯誤或警告。問題是,當我一步一步地用cuda-gdb運行它時,根本沒有啓動CUDA內核(我從調試器獲得的輸出與Nvidia cuda-gdb指南中顯示的完全不同),但程序仍然工作沒有任何錯誤。在任何時候,我都會得到沒有CUDA內核,設備或線程。顯然焦點也沒有設置任何東西。我正在使用CUDA-GDB的4.2版本。CUDA-GDB:沒有CUDA設備

這是我從調試程序時得到它應該進入內核:

Breakpoint 1, matrixMulGPU (M=0x609160, N=0x609270, P=0x609490, Width=8) 
    at matrixMul1.cu:141 
141  MatrixMulKernel<<<dimGrid, dimBlock>>>(Md, Nd, Pd, Width); 
(cuda-gdb) step 
MatrixMulKernel (__cuda_0=0x210000, __cuda_1=0x210100, __cuda_2=0x210200, 
    __cuda_3=8) at matrixMul1.cu:103 
103 __global__ void MatrixMulKernel(float *Md, float *Nd, float *Pd, int Width){ 
(cuda-gdb) step 
__device_stub__Z15MatrixMulKernelPfS_S_i (__par0=0x210000, __par1=0x210100, 
    __par2=0x210200, __par3=8) 
    at tmpxft_000016d4_00000000-1_matrixMul1.cudafe1.stub.c:5 
5 tmpxft_000016d4_00000000-1_matrixMul1.cudafe1.stub.c: Arquivo ou diretório não encontrado. 
    in tmpxft_000016d4_00000000-1_matrixMul1.cudafe1.stub.c 
(cuda-gdb) step 
cudaLaunch<char> (
    entry=0x4011ea "UH\211\345SH\203\354(H\211}\350H\211u\340H\211U؉MԋM\324H\213U\330H\213]\340H\213E\350H\211\336H\211\307\350\024\377\377\377H\203\304([\311\303UH\211\345SH\203\354(\[email protected]") at cuda_runtime.h:958 
958 return cudaLaunch((const char*)entry); 
(cuda-gdb) step 
959 } 
(cuda-gdb) step 
MatrixMulKernel (__cuda_0=0x210000, __cuda_1=0x210100, __cuda_2=0x210200, 
    __cuda_3=8) at matrixMul1.cu:121 
121 } 

我的CUDA設備是一塊GeForce 8400M GS,我曾與DEVICEQUERY檢查沒有問題。 我不知道如何解決這個問題,因爲Nvidia論壇目前處於脫機狀態!

非常感謝。

+1

您可以在顯示設備上調試使用cuda-gdb需要一個專用設備 – talonmies 2012-07-23 20:19:02

+0

talonmies,你是什麼意思顯示設備?雖然我的設備可以使用RAM內存,不是專用的嗎? – felippeduran 2012-07-25 02:32:59

+0

我的意思是GPU你不能調試運行你的顯示器,所以除非你至少有兩個GPU,或者你沒有運行X窗口,否則你不能使用cuda-gdb。 – talonmies 2012-07-25 06:13:31

回答

1

看着cuda-gdb輸出,你似乎在內核啓動的主機組件上(即< < < >>>)。 CUDA內核啓動是異步的。主持人致電啓動並在完成之前返回(或者在某些情況下啓動的工作開始之前)。因此,當您停止在主機上時,啓動的工作可能尚未分派給GPU。

進入主機端內核啓動調用將不會進入設備上的內核啓動。相反,嘗試在內核中設置一個斷點,讓應用程序自由運行。斷點可以通過文件設置:linenumber(例如break matrixMul1.cu:<line>或按名稱(例如break MatrixMulKernel))。當設備端斷點被擊中時,cuda-gdb將返回到提示並在適當的位置設置焦點在設備上