デバイスGeForceGTX680私のプログラムでは、値はCUDAMemcpyを使用してホストからデバイス変数にコピーされます。プログラムのさまざまな実行時に、以前の値がグローバルメモリに保持されていることがわかりました。(実行可能ファイルを複数回実行する)コードtest.cu:
ファーストラン:
const test[]="overflowhappen";
cudaMalloc((void **) &test_d, sizeof(char)*strlen(test));
cudaMemcpy(test_d,test,sizeof(char)*strlen(test),cudaMemcpyHostToDevice);
function<<<1,1>>>(testfn);
nvcc test.cu
cuda-gdb a.out
<gdb> b testfn
<gdb>p test_d ->>overflowhappen
2回目の実行(テスト文字列をvarに変更しました)
const test[]="var"
cudaMalloc((void **) &test_d, sizeof(char)*strlen(test));
cudaMemcpy(test_d,test,sizeof(char)*strlen(test),cudaMemcpyHostToDevice);
function<<<1,1>>>(testfn);
nvcc test.cu
cuda-gdb a.out
<gdb> b testfn
<gdb>p test_d ->> varrflowhappen
「rflowhappen」は前の実行からコピーされます。cudaMemsetを変数に試しましたが、それでも前の実行の値が変数値として表示されます。コードに問題がありますか?どうすればそれを防ぐことができますか?