2017-01-07 5 views
0

私はGPUプログラミング(C#)にALEA GPUを使用しています。カーネルでatomic_addのような原子操作を使用すると、カーネルのデバッグ中に変数のCUDA WarpWatchウィンドウに「名前を解決できませんでした」というエラーが表示されます。 blockIdx.x、blockDim.x、threadIdx.xおよび配列の値が表示されますが、変数名は解決できません。カーネルは期待どおりに動作しますが、デバッグ中に変数を監視することができないため、バグを修正することが困難です。 CUDA 8 Toolkitがインストールされ、Visual Studio 2015を使用しています。ALEA Kernel with Atomic Operation(atomic_add)をデバッグ中に「名前を解決できませんでした」

アイデアはありますか?

+1

デバッグコード、つまりデバッグプロジェクトをコンパイルしましたか? –

+0

はい。私はALEAGPUサイトで書かれたすべてをやった。プロジェクトはデバッグモードで動作します。私はすでにそれをデバッグし、カーネルをステップ実行することができます。原子操作がない場合は、変数の値を見ることができます。それ以外の場合は、Warp Watchウィンドウで「名前を解決できませんでした」というエラーが表示されます。私は何が起こっているかを追うことができるように、(カーネルコードで)コンソールに変数値を書き込まなければなりませんでした。 –

+0

@RobertCrovella、私はALEA GPUを理解しているので、CUDAのコンパイルがここに含まれているかどうかはわかりません。デバッグ情報はCUDAコンパイラではなく、ALEAソリューションによって管理されているようです。 –

答えて

1

これは、NVIDIA NVVMバックエンドがデバッグモードまたはリリースモードでコンパイルされているかどうかにかかわらず、NVIDIA NVVMバックエンドによって行われる最適化のために起こります。それはレジスタにいくつかの値を割り当てます、そして、現在、それを回す方法はありません。 CUDA Cの動作は非常に似ています。結果を得るための唯一の方法は、それらをグローバルメモリに書き込んで、レジスタ割り当てを騙したり、実行したようにカーネルのコンソールに書き出すことです。今のところ、私は他のアプローチについて知らない。

関連する問題