7
__global__ void helloCUDA(float f)
{
printf("Hello thread %d, f=%f\n", threadIdx.x, f);
}
int main()
{
helloCUDA<<<1, 5>>>(1.2345f);
cudaDeviceSynchronize();
return 0;
}
なぜcudaDeviceSynchronize()ですか。多くの場所、例えばhereでカーネルコールの後では必要ありませんか?なぜcudaDeviceSynchronize()が必要ですか? device-printfのカーネルで?
私が投稿したリンクが表示された場合は、kernalコールの直後にcudamemcpy(.... device to host)を呼び出しています。なぜここにcudadevicesynchronize()がないのですか? – gpuguy
同じストリームに発行されたCUDA操作(API呼び出し、カーネル呼び出し)は、たとえ非同期であっても連続して実行されることが保証されているためです。したがって、カーネルとcudaMecpy操作は同じ(デフォルトの)ストリームになっているので、cudaMemcpyは、カーネルの起動が非同期(ホストスレッドに関して)であっても、カーネルが完了するまで開始されないことが保証されます。 –