GPUプログラミング

CUDAで、CPU側のプログラムがカーネルを起動した直後の動作として一般に正しいものはどれか。

  1. ACPUはカーネルが終わるまで必ず止まり、何もできない
  2. BカーネルはCPUの上で実行される
  3. C起動は非同期なので、CPUはカーネルの終了を待たずに次の処理へ進み、結果を使う前に同期を取る必要がある
答えと解説を見る

正解:C. 起動は非同期なので、CPUはカーネルの終了を待たずに次の処理へ進み、結果を使う前に同期を取る必要がある

カーネルの起動は、GPUへの命令の列に処理を追加するだけで、すぐにCPU側に制御が戻ります。そのためCPUは、GPUが計算している間に次のデータの準備などを進められます。一方で、結果をCPUで読む前には、cudaDeviceSynchronizeや結果のコピー(同じストリームなら前の処理の完了を待つ)で、カーネルの終了を確かめる必要があります。時間を測るときも、同期を取らないとカーネルの時間を正しく測れません。

  • A. 起動の関数はすぐに戻ります。
  • B. カーネルはGPUの上で実行されます。
  • C. 正しい。その間にCPUは別の仕事を進められます。
この分野を解く 分野ページへ

GPUプログラミングのほかの問題

  1. CPUとGPUの設計の考え方の違いとして正しいものはどれか。
  2. GPUで速く処理できる仕事の特徴として最も適切なものはどれか。
  3. GPUで実行すると効率が悪くなりやすい処理はどれか。
  4. CUDAなどのGPUプログラミングでいう「カーネル」の説明として正しいものはどれか。
  5. CUDAのスレッドの階層の組み合わせとして正しいものはどれか(大きい順)。