次の内容は、GPUの計算エラーに関するものです。
十分な時間があれば、Intel i7-3610QMとNvidia GeForce GTX 660は、同じ指示が与えられた場合、互いに意見が一致しなくなります。(cuda 5.5、compute_20、sm_20)
そのため、2つのうちの1つがエラーになると結論付ける必要があります。
粒子シミュレーションの実行可能性調査のベンチマーク中に、1000倍程度の倍精度変換(sin、cos、乗算、除算、加算、減算を含む変換)のエラーが忍び込んできたことがわかりました。
比較する数値の抜粋を少し紹介します(最初の数値は常にCPU、2番目のGPUです)
-1.4906010142701069
-1.4906010142701074
-161011564.55005690
-161011564.55005693
-0.13829959396003652
-0.13829959396003658
-16925804.720949132
-16925804.720949136
-36.506235247679221
-36.506235247679228
-3.3870884719850887
-3.3870884719850896
(すべての変換シーケンスがエラーになるわけではないことに注意してください)
最大誤差はほとんど無視でき(0.0000000000000401%)
ますが、依然として存在し、累積誤差の原因になります。
現在、このエラーは、組み込みライブラリの1つの実装の違いが原因である可能性があります。実際、GPUはCPUが切り上げられる場所を切り捨てまたは切り捨てることを好むようです。興味深いことに、これは負の数でのみ発生するようです。
しかし、ポイントは、デジタルマシン上であっても、同一の命令が必ずしも同一の結果を返すことが保証されているわけではないということです。
これが貢献することを願っています。
サイドノートとしての編集:GPU算術エラーの場合、これ(ctrl + f "ECCメモリをサポートする最初のGPU")も興味深い場合がありますが、上記のエラーには必ずしも関連しません。