GPUプログラミング
GPUで同じデータの浮動小数点数の総和を求めたところ、実行するたびに結果の最後の桁がわずかに違った。最も考えられる原因はどれか。
- AGPUの演算器が壊れているから
- BデータがGPUの中で毎回書き換わっているから
- Cアトミック演算などで足す順番が実行ごとに変わり、浮動小数点の足し算は順番によって丸めの結果が変わるから
答えと解説を見る
正解:C. アトミック演算などで足す順番が実行ごとに変わり、浮動小数点の足し算は順番によって丸めの結果が変わるから
浮動小数点の足し算は毎回丸めが入るので、(a+b)+cとa+(b+c)の結果がわずかに違うことがあります。並列の総和では、どのスレッドの値がどの順番で足されるかが、スレッドの実行の順番やアトミック演算の到着の順番で変わります。その結果、最後の桁が実行ごとに変わります。結果を毎回同じにしたい場合は、足す順番を固定したリダクションを使います。
- A. 壊れていなくても起こる、正常な現象です。
- B. データは変わっていません。
- C. 正しい。浮動小数点の足し算では結合法則が成り立ちません。