2

Nvidia の Sum Reduction カーネル (reduction6) を呼び出すルーチンを作成していますが、結果を CPU と GPU で比較すると、ベクトル サイズが大きくなるにつれてエラーが増加するため、次のようになります。

CPU と GPU の両方の削減は浮動小数点数です

Size: 1024  (Blocks : 1,  Threads : 512)
Reduction on CPU:  508.1255188 
Reduction on GPU:  508.1254883 
Error:  6.0059137e-06

Size: 16384 (Blocks : 8, Threads : 1024)
Reduction on CPU:  4971.3193359 
Reduction on GPU:  4971.3217773 
Error:  4.9109825e-05

Size: 131072 (Blocks : 64, Threads : 1024)
Reduction on CPU:  49986.6718750 
Reduction on GPU:  49986.8203125 
Error:  2.9695415e-04

Size: 1048576 (Blocks : 512, Threads : 1024)
Reduction on CPU:  500003.7500000 
Reduction on GPU:  500006.8125000 
Error:  6.1249541e-04

このエラーについて何か考えはありますか?、ありがとう。

4

1 に答える 1

6

浮動小数点の加算は必ずしも結合法則ではありません

これは、浮動小数点の合計の演算の順序を変更すると、異なる結果が得られる可能性があることを意味します。定義により合計を並列化すると、合計の演算の順序が変わります。

浮動小数点数を合計する方法はたくさんあり、それぞれにさまざまな入力分布の精度の利点があります。これがまともな調査です。

指定された順序での順次合計が最も正確な合計方法になることはめったにないため、それを比較する場合は、通常の並列削減で使用されるツリーベースの合計と十分に比較できるとは思わないでください。

于 2013-03-01T03:05:50.300 に答える