これは、cudaMemcpyToSymbol と cudaMemcpyのフォローアップ Q です。
-G フラグは cudaGDB ビルドを作成するためのものであるという印象を受けています。明らかなエラーも表示されます。(以下のコードのエラーは意図的なものです。Q は、リターン エラーが表示されなかった理由に関するものです。)
__constant__ float flt[480]; // 1920 bytes
__constant__ int ints[160]; // 640 bytes
Main() {
float* pFlts;
cudaMalloc((void**)&pFlts, 1920+640);
cudaError_t eerr=cudaMemcpyToSymbol(ints,pFlts,sizeof(ints),sizeof(ints),cudaMemcpyDeviceToDevice);
printf("ErrVal= %d\n",(int)eerr);
}
w/: nvcc jump.cu -o jumpでビルドし、w/: ./junkで実行すると、結果は ErrVal= 11で、これは「無効な引数」です。
w/: nvcc jump.cu -G -o jumpでビルドし、w/: ./junkで実行すると、結果は ErrVal= 0で、これは cudaSuccess です。
-G フラグを使用した経験はあまりありませんが、これは奇妙な動作のようです。-G erase がエラーを返すのはなぜですか?