GPUプログラミング

GPUの混合精度の計算で、掛け算をFP16などの低い精度で行い、足し合わせ(累積)をFP32で行うことが多い理由として正しいものはどれか。

  1. A掛け算はFP32ではできないから
  2. B多数の積を足し合わせるときに低い精度では丸めの誤差がたまり、小さな値が失われるので、累積だけは高い精度で行うから
  3. C足し算はFP16ではできないから
答えと解説を見る

正解:B. 多数の積を足し合わせるときに低い精度では丸めの誤差がたまり、小さな値が失われるので、累積だけは高い精度で行うから

FP16の仮数は10ビットしかないので、大きくなった合計に小さな積を足すと、積が丸めで消えてしまうことがあります。行列の積では何千もの積を足し合わせるので、この誤差がたまると結果が大きくずれます。そこで、メモリの量と演算器の負担の大きい掛け算は低い精度で行い、累積だけをFP32で行います。テンソルコアの多くは、この形の積和を1命令で行えます。

  • A. FP32でも掛け算はできますが、遅く電力も多く使います。
  • B. 正しい。速さと精度の両方を得る工夫です。
  • C. FP16でも足し算はできますが、誤差が大きくなります。
この分野を解く 分野ページへ

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

  1. GPUで同じデータの浮動小数点数の総和を求めたところ、実行するたびに結果の最後の桁がわずかに違った。最も考えられる原因はどれか。
  2. CUDAで1ブロックあたりのスレッドの数を決めるときの一般的な目安として正しいものはどれか。
  3. 上のようなループ(グリッドストライドループ)でカーネルを書く利点として正しいものはどれか。
  4. CUDAの定数メモリ(コンスタントメモリ)が特に速く働くのはどのようなアクセスのときか。
  5. GPUのキャッシュについて、CPUと比べた一般的な特徴として正しいものはどれか。