2012-07-23 99 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将返回到提示并在适当的位置设置焦点在设备上