以下に示すように、2つのカーネルを呼び出そうとしています
for (t=0; t<=time_total; t++)
{
//kernel calls
kernel1<<<noOfBlocks,noOfThreadsPerBlock>>>(** SOME PARAMETERS **);
checkCudaError(cudaThreadSynchronize());
kernel2<<<noOfBlocks,noOfThreadsPerBlock>>>(** SOME PARAMETERS **);
checkCudaError(cudaThreadSynchronize());
}
そして、2番目のカーネルの構造は
var[index+0]=**SOME CALCULATION**
var[index+1]=**SOME CALCULATION**
var[index+2]=**SOME CALCULATION**
このコードを実行すると、checkCudaError は何も報告せず、コードが実行されて何らかの出力が得られますが、Visual Studio では次の例外が発生します。
First-chance exception at 0x7640c41f in **.exe: Microsoft C++ exception: cudaError_enum at memory location 0x0039f9c4..
First-chance exception at 0x7640c41f in **.exe: Microsoft C++ exception: cudaError_enum at memory location 0x0039f9c4..
Nsight を確認すると、カーネル 2 で次のエラーが発生しています。
CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES
ここでの問題は、カーネル 2 の var 配列が一部の行を正しく提供していることです。一部は他の行値のコピーであり、一部はガベージです。
また、私がこれを行うとき
var[index+0]=3
var[index+1]=3
var[index+2]=3
var のすべての値は 3 に設定されます