GPUプログラミング

GPUの占有率について正しいものはどれか。

  1. A占有率が100%なら、必ず最高の性能が出る
  2. B占有率が低くても、1スレッドに独立した計算を多く持たせて命令の並列性を高めれば、高い性能が出ることがある
  3. C占有率は性能にまったく関係しない
答えと解説を見る

正解:B. 占有率が低くても、1スレッドに独立した計算を多く持たせて命令の並列性を高めれば、高い性能が出ることがある

占有率は遅延を隠すための手段の1つで、目的ではありません。1スレッドが互いに依存しない複数の計算やメモリの読み込みを並べて出せれば、少ないワープでも待ち時間を埋められます。逆に占有率を上げるためにレジスタを減らすと、メモリへの追い出しが増えて遅くなることもあります。性能はプロファイラで実際に測って判断するのが確実です。

  • A. ほかの要因で律速されていれば、それ以上は速くなりません。
  • B. 正しい。遅延を隠す方法はワープの数だけではありません。
  • C. 遅延を隠す力に影響します。
この分野を解く 分野ページへ

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

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