GPUプログラミング

GPUがメモリの長い遅延(数百クロック)を隠す主な方法として正しいものはどれか。

  1. ACPUより何倍も大きなキャッシュを1スレッドごとに持つ
  2. Bあるワープがメモリを待つ間に、ほかの実行できるワープに切り替えて演算器を動かし続ける
  3. Cメモリを待たずに、データの値を推測して計算する
答えと解説を見る

正解:B. あるワープがメモリを待つ間に、ほかの実行できるワープに切り替えて演算器を動かし続ける

CPUは大きなキャッシュと複雑な回路で1つのスレッドの待ちを減らしますが、GPUは数多くのワープを載せておき、メモリを待っているワープを脇に置いて、すぐに実行できる別のワープの命令を出します。レジスタがすべてチップ上にあるので、切り替えに手間がかかりません。十分な数のワープがあれば、メモリの遅延の間も演算器を休ませずに済みます。

  • A. 1スレッドあたりのキャッシュはむしろ小さいです。
  • B. 正しい。多数のスレッドで待ち時間を埋めます。
  • C. 値を推測して計算することはしません。
この分野を解く 分野ページへ

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

  1. GPUの占有率について正しいものはどれか。
  2. CUDAで、ブロックとSM(ストリーミングマルチプロセッサ)の関係として正しいものはどれか。
  3. CUDAで、カーネルの途中で、ほかのすべてのブロックの計算が終わるのを待ってから次の段階に進みたい。一般的な方法はどれか。
  4. GPUで画素の値のヒストグラムを作るとき、全スレッドがグローバルメモリの256個のビンにatomicAddで直接足すと遅いことがある。改善の方法として正しいものはどれか。
  5. GPUで多数の値の総和を求めるとき、木の形のリダクション(隣どうしを足して半分にすることを繰り返す)を使う理由として正しいものはどれか。