GPUプログラミング

GPUで大きな行列の積を計算するとき、行列を小さなタイルに分けて共有メモリに読み込む理由として正しいものはどれか。

  1. Aグローバルメモリから読んだデータを共有メモリで何度も再利用し、遅いメモリへのアクセスの回数を減らすため
  2. B行列の値を小さくして、あふれを防ぐため
  3. C計算の回数を減らして、結果を近似するため
答えと解説を見る

正解:A. グローバルメモリから読んだデータを共有メモリで何度も再利用し、遅いメモリへのアクセスの回数を減らすため

行列の積では、同じ要素が何度も計算に使われます。素朴に書くと、各スレッドが毎回グローバルメモリから読み直すので、メモリの帯域が足りなくなります。タイルに分けて共有メモリに読み込めば、ブロックの全スレッドがそのタイルを何度も使えるので、グローバルメモリから読む量がタイルの大きさに比例して減ります。CPUのキャッシュでのブロッキングと同じ考え方です。

  • A. 正しい。演算強度を高める工夫です。
  • B. 値の大きさは変わりません。
  • C. 計算の回数は同じで、結果も正確です。
この分野を解く 分野ページへ

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

  1. GPUのカーネルで、1スレッドあたりのレジスタの使用量が多すぎると起こりうることとして正しいものはどれか。
  2. GPUの占有率(オキュパンシー)の説明として正しいものはどれか。
  3. GPUがメモリの長い遅延(数百クロック)を隠す主な方法として正しいものはどれか。
  4. GPUの占有率について正しいものはどれか。
  5. CUDAで、ブロックとSM(ストリーミングマルチプロセッサ)の関係として正しいものはどれか。