GPUプログラミング

CUDAで1ブロックあたりのスレッドの数を決めるときの一般的な目安として正しいものはどれか。

  1. Aワープの大きさの32の倍数にする(128や256など)
  2. B必ず1にする
  3. C必ず素数にする
答えと解説を見る

正解:A. ワープの大きさの32の倍数にする(128や256など)

ブロックのスレッドは32本ずつワープに分けられるので、例えば100本にすると最後のワープは4本しか使わず、残りの28本分の実行の枠がむだになります。32の倍数にしておけば、どのワープもいっぱいに使えます。実際には128〜256本程度がよく使われ、占有率や共有メモリの使い方を見ながら調整します。

  • A. 正しい。端数のワープができないようにします。
  • B. 1スレッドでは、ワープの31本がむだになります。
  • C. 素数にすると、端数のワープができます。
この分野を解く 分野ページへ

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

  1. 上のようなループ(グリッドストライドループ)でカーネルを書く利点として正しいものはどれか。
  2. CUDAの定数メモリ(コンスタントメモリ)が特に速く働くのはどのようなアクセスのときか。
  3. GPUのキャッシュについて、CPUと比べた一般的な特徴として正しいものはどれか。
  4. NVIDIA以外のGPUでも使える、GPUなどの並列計算のためのプログラミングの仕組みの例として正しいものはどれか。
  5. GPUで、条件に合う要素だけを配列から取り出して別の配列に詰めて書き出したい(各スレッドが出力する数は0か1)。各スレッドの書き込み先の番地を決めるのによく使われる並列の計算はどれか。