5

nsight 2.2、Toolkit 4.2、最新の nvidia ドライバーを使用しています。コンピューターで GPU をいくつか使用しています。ビルドカスタマイズ 4.2. CUDA のプロジェクト プロパティで「GPU 出力の生成」を設定しました。nsight モニターがオンになっています (すべてが見栄えがします)。

グローバルカーネル関数にいくつかのブレークポイントを設定しました。nsight は関数の宣言で停止しますが、いくつかのブレーク ポイントをスキップします。nsight がブレーク ポイントに到達するか、ブレーク ポイントをスキップするかを決定するのと同じです。面白いことに、nsight は for ループで停止しますが、単純な割り当て操作では停止しません。

もう 1 つの問題は、フォーカスを設定したり、ウォッチ リストに変数を追加したりできないことです。この場合 (添付のスクリーンショットを参照)、変数の値を解決できません: "posss" または "testDetctoinRate1" この場合はレジスターです。一方、共有メモリまたはブロック メモリは、ローカルのリストに自動的に挿入されます。

デバッグ前のカーネルのスクリーン ショットを次に示します。

これはデバッグ中のスクリーンショットです

次の呼び出しでカーネル関数を呼び出します。

checkCUDA<<<1, 32>>>(sumMat->rows,sumMat->cols , (UINT *)pGPUsumMat); 
cudaError = cudaGetLastError();
if(cudaError != cudaSuccess)
{
    printf("CUDA error: %s\n", cudaGetErrorString(cudaError));
    exit(-1);
}

カーネル呼び出しはエラーなしで機能します。

すべてのブレークポイントで nsight 停止を強制するオプションはありますか? スレッドのレジスタをウォッチ リストに追加するにはどうすればよいですか?

アップデート

最初に、私のデバッグ コマンド ラインは次のとおりです。

# Runtime API (NVCC Compilation Type is hybrid object or .c file)
set CUDAFE_FLAGS=--sdk_dir "c:\Program Files\Microsoft SDKs\Windows\v7.0A\"
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\nvcc.exe" --use-local-env --cl-version 2010 -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"..\..\..\opencv\modules\gpu\src\opencv2\gpu\device" -I"..\..\..\opencv\modules\gpu\include\opencv2\gpu" -I"..\..\..\build\include\\"   -G  --keep-dir "Debug" -maxrregcount=0  --machine 32 --compile  -g    -Xcompiler "/EHsc /nologo /Od /Zi  /MDd  " -o "Debug\%(Filename)%(Extension).obj" "%(FullPath)"

プロパティ ページで変更しました --> cuda --> ホスト --> ホスティング デバッグ情報を生成 --> いいえ

コマンドラインに -g と -O の文字が含まれていないため、コマンドラインは次のようになります。

# Runtime API (NVCC Compilation Type is hybrid object or .c file)
set CUDAFE_FLAGS=--sdk_dir "c:\Program Files\Microsoft SDKs\Windows\v7.0A\"
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\nvcc.exe" --use-local-env --cl-version 2010 -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"..\..\..\opencv\modules\gpu\src\opencv2\gpu\device" -I"..\..\..\opencv\modules\gpu\include\opencv2\gpu" -I"..\..\..\build\include\\"   -G  --keep-dir "Debug" -maxrregcount=0  --machine 32 --compile      -Xcompiler "/EHsc /nologo /Od /Zi  /MDd  " -o "Debug\%(Filename)%(Extension).obj" "%(FullPath)"

でデバッグします-oが、問題はありますか? 変更はありません。

4

4 に答える 4

6

ソリューション エクスプローラーで .cu ファイルを右クリックし、 に移動してCUDA C/C++ | Deviceに設定Generate GPU Debug InformationYes (-G0)ます。

于 2012-06-01T17:08:00.283 に答える
2

Nsight の「CUDA メモリ チェッカーを有効にする」がオフになっているかどうかを確認します。VS C++ 2010 のデバッグ モードで、NSight が CUDA カーネル コードのブレークポイントを停止できるようにする場合があります。少なくとも、私には機能します。

于 2013-03-29T03:31:02.330 に答える
0

デバッグ ビルドで、-O オプションと -g オプションの両方を nvcc に渡していますか? その場合は、-O を削除してみてください。

背景: これは、コンパイラによって最適化されたコードをデバッグしようとするときに発生する問題のようなものです。最適化中に、コンパイラは、ソースの一部の行に関連付けられているマシン コード命令がなくなるようにコードを変更し、デバッガーがそれらの行にブレークポイントを設定できないようにします。

于 2012-05-31T06:34:46.927 に答える
0

同様の問題があります。Nsight はどのブレーク ポイントでも停止していません。しかし、実行を完了します。

-G0 をデバッグ情報オプションとして使用する場合。エラーが発生します。

cuda 4.2およびcuda 5ツールキットでnvidia 2.2.0.1225を使用しています。301.42 グラフィックドライバー搭載。

于 2012-10-19T07:59:27.370 に答える