簡體   English   中英

關於浮點運算

[英]about floating point operation

最近,我一直在使用CUDA開發環境制作程序(FDTD Operation),OS是Windows server 2008,圖形卡是TeslaC2070,編譯器是VS2010。 該程序使用單精度和雙精度浮點計算。

我正在閱讀CUDA編程指南3.2和4.0。 在附錄中,指南告訴我sin()cos()最大准確度為2 ULP。 我原來的CPU程序產生的結果與CUDA版本不同。

我想使結果正確相同。 可能嗎?

引用Goldberg (一篇論文,每個計算機科學家,計算科學家,甚至可能是每個編程的科學家都應該閱讀):

由於舍入誤差,代數的關聯定律不一定適用於浮點數。

這意味着當您更改操作順序時 - 即使使用表面上的關聯算法 - 您可能會得到稍微不同的答案。

根據定義,並行性導致相對於串行算術的不同操作順序。 “令人尷尬的並行”計算,即每個輸出元素獨立於其他輸出元素計算的計算,有時不必擔心這一點。 但集體操作,如減少或掃描,以及空間鄰域計算,如模板(如FDTD),確實會遇到這種影響。

實際上,即使使用不同的編譯器(甚至不同的編譯器選項)也可以改變浮點計算的結果,即使在編譯相同的代碼時也可以有或沒有並行性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM