GPUプログラミング

CUDAの定数メモリ(コンスタントメモリ)が特に速く働くのはどのようなアクセスのときか。

  1. Aワープのすべてのスレッドが同じ番地を読むとき(1回の読み出しを全員に配れる)
  2. Bワープのスレッドがそれぞれ違う番地に書き込むとき
  3. Cワープのスレッドがそれぞれ違う番地をランダムに読むとき
答えと解説を見る

正解:A. ワープのすべてのスレッドが同じ番地を読むとき(1回の読み出しを全員に配れる)

定数メモリは、カーネルの実行中は書き換えない小さな領域で、専用のキャッシュを持っています。ワープの全員が同じ番地を読むと、1回の読み出しの結果を全員に一斉に配れるので非常に速く読めます。画像のフィルタの係数や、物理のシミュレーションのパラメータのように、全スレッドが同じ値を使う場合に向いています。番地がばらばらだと読み出しが分かれ、かえって遅くなります。

  • A. 正しい。フィルタの係数のように全員が同じ値を使う場合に向いています。
  • B. 定数メモリはカーネルからは書き込めません。
  • C. 違う番地を読むと、読み出しが順番に分かれて遅くなります。
この分野を解く 分野ページへ

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

  1. GPUのキャッシュについて、CPUと比べた一般的な特徴として正しいものはどれか。
  2. NVIDIA以外のGPUでも使える、GPUなどの並列計算のためのプログラミングの仕組みの例として正しいものはどれか。
  3. GPUで、条件に合う要素だけを配列から取り出して別の配列に詰めて書き出したい(各スレッドが出力する数は0か1)。各スレッドの書き込み先の番地を決めるのによく使われる並列の計算はどれか。
  4. GPUのカーネルを書くときに守るべき前提として正しいものはどれか。
  5. GPUで大きな行列を転置する(b[j][i] = a[i][j])とき、共有メモリを経由させる主な目的はどれか。