0

正常に動作し、コンパイル時にエラーや警告が発生しないソース コードをデバッグしようとしています。問題は、cuda-gdb で段階的に実行すると、CUDA カーネルがまったく起動されないことです (デバッガーから取得した出力は、Nvidia cuda-gdb ガイドに示されているものとはまったく異なります)。エラーなしで引き続き動作します。常に CUDA カーネル、デバイス、またはスレッドがありません。どうやらフォーカスも何にも設定されていません。CUDA-GDB の 4.2 リリースを使用しています。

これは、カーネルを起動する必要があるときにデバッガーから得られるものです。

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(\277Pn@") 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 フォーラムがオフラインになっているため、これを解決する方法がわかりません。

よろしくお願いします。

4

1 に答える 1

1

cuda-gdbの出力を見ると、カーネル起動のホストコンポーネント(つまり、<<< >>>)を使用しているようです。CUDAカーネルの起動は非同期です。ホストコールは起動を準備し、起動が完了する前に(または、場合によっては起動された作業が開始される前に)戻ります。その結果、ホストで停止している間、起動された作業がまだGPUにディスパッチされていない可能性があります。

ホスト側のカーネル起動呼び出しにステップインしても、デバイスのカーネル起動にはステップインしません。代わりに、カーネル自体の内部にブレークポイントを設定し、アプリを自由に実行できるようにしてください。ブレークポイントは、file:linenumber(例break matrixMul1.cu:<line>または名前(例break MatrixMulKernel))で設定できます。デバイス側のブレークポイントに到達すると、cuda-gdbはプロンプトに戻り、必要に応じてデバイスにフォーカスを設定します。

于 2012-09-11T06:30:19.650 に答える