私はVS10で単純なCUDAプロジェクトをコンパイルしました(そしてそれは機能します)が、奇妙なことに、コードの一部、つまりホスト側のスラストでさえなく、スラスト呼び出しを含む部分にブレークポイントを設定したり、ステップオーバーしたりすることはできません。デバッグ キー -D_NEXUS_DEBUG -g および -G0 を指定して nvcc を実行すると、問題の部分は F10 およびブレークポイントから見えなくなります。
たとえば、次の関数では、ステップ デバッグはスター付きの (簡単な) 行でのみジャンプします。
int thrust_test() {
thrust::host_vector<int> h_vec(1000);
thrust::generate(h_vec.begin(), h_vec.end(), rand);
*h_vec[0] = 1002;
thrust::device_vector<int> d_vec = h_vec;
*int h_res=-1;
h_res = thrust::reduce(h_vec.begin(), h_vec.end(), int(0), thrust::maximum<int>());
*int d_res=-1;
d_res = thrust::reduce(d_vec.begin(), d_vec.end(), int(0), thrust::maximum<int>());
*int prod=-1;
*prod = h_res*d_res;
return 0;
}
[逆アセンブリ] ウィンドウにステップインしてからソースに戻ると、Thrust ソースが取得されます。しかし、明らかに何かが壊れています。
質問 2: ビルド ログの下にすべての警告が 2 回出力されるのはなぜですか?
------ Configuration: Debug x64 ------
Compiling CUDA source file ..\..\..\src\cudamain.cu...
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin\nvcc.exe" -gencode=arch=compute_13,code=\"sm_13,compute_13\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include" -G0 --keep-dir "x64\Debug" -maxrregcount=0 --machine 64 --compile -D_NEXUS_DEBUG -g -Xcompiler "/EHsc /nologo /Od /Zi /MDd " -o "x64\Debug\cudamain.cu.obj" "cudamain.cu"
cudamain.cu(21): warning : variable "prod" was set but never used
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include\thrust/functional.h(759): warning : type qualifier on return type is meaningless
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include\thrust/functional.h(759): warning : type qualifier on return type is meaningless
cudamain.cu(21): warning : variable "prod" was set but never used