GPUプログラミング
CUDAで、CPU側のプログラムがカーネルを起動した直後の動作として一般に正しいものはどれか。
- ACPUはカーネルが終わるまで必ず止まり、何もできない
- BカーネルはCPUの上で実行される
- C起動は非同期なので、CPUはカーネルの終了を待たずに次の処理へ進み、結果を使う前に同期を取る必要がある
答えと解説を見る
正解:C. 起動は非同期なので、CPUはカーネルの終了を待たずに次の処理へ進み、結果を使う前に同期を取る必要がある
カーネルの起動は、GPUへの命令の列に処理を追加するだけで、すぐにCPU側に制御が戻ります。そのためCPUは、GPUが計算している間に次のデータの準備などを進められます。一方で、結果をCPUで読む前には、cudaDeviceSynchronizeや結果のコピー(同じストリームなら前の処理の完了を待つ)で、カーネルの終了を確かめる必要があります。時間を測るときも、同期を取らないとカーネルの時間を正しく測れません。
- A. 起動の関数はすぐに戻ります。
- B. カーネルはGPUの上で実行されます。
- C. 正しい。その間にCPUは別の仕事を進められます。