[英]Precision in Sum reduction kernel with floats
我正在創建一個例程,該例程調用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
對這個錯誤有任何想法嗎?,謝謝。
這意味着,當您更改浮點求和的運算順序時,可能會得到不同的結果。 通過定義並行化求和會更改求和的操作順序。
浮點數求和有很多方法,每種方法對於不同的輸入分布都具有准確性。 這是一個不錯的調查 。
給定順序的順序求和很少是最准確的求和方法,因此,如果要與之進行比較,則不要期望它與典型並行歸約中使用的基於樹的求和相比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.