GPUプログラミング

GPUのカーネルで、1スレッドあたりのレジスタの使用量が多すぎると起こりうることとして正しいものはどれか。

  1. Aレジスタが自動で増えて、性能が必ず上がる
  2. B計算結果が必ず間違う
  3. CSMのレジスタの総数は決まっているので、同時に載せられるスレッドの数が減り、メモリの遅延を隠しにくくなる
答えと解説を見る

正解:C. SMのレジスタの総数は決まっているので、同時に載せられるスレッドの数が減り、メモリの遅延を隠しにくくなる

GPUは、実行中のすべてのスレッドのレジスタをチップ上に持っておくことで、ワープの切り替えを一瞬で行います。そのため1スレッドが使うレジスタが多いと、SMに同時に載せられるスレッドの数が減ります。足りない分はメモリに追い出され(スピル)、遅くなることもあります。コンパイラの設定でレジスタの上限を指定し、スレッドの数との釣り合いを取ることがあります。

  • A. レジスタの総数は回路で決まっています。
  • B. 結果は正しいままで、速さに影響します。
  • C. 正しい。レジスタはスレッド数を決める資源の1つです。
この分野を解く 分野ページへ

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

  1. GPUの占有率(オキュパンシー)の説明として正しいものはどれか。
  2. GPUがメモリの長い遅延(数百クロック)を隠す主な方法として正しいものはどれか。
  3. GPUの占有率について正しいものはどれか。
  4. CUDAで、ブロックとSM(ストリーミングマルチプロセッサ)の関係として正しいものはどれか。
  5. CUDAで、カーネルの途中で、ほかのすべてのブロックの計算が終わるのを待ってから次の段階に進みたい。一般的な方法はどれか。