有關浮點數的效能

浮點數是指單精度浮點數float與雙精度浮點數double。

在vc++中前者佔4個byte的大小,後者則是8個。一直以來都有人想要知道到底該使用型態較好?

評估的角度有以下幾個

  1. 儲存空間
  2. 精度
  3. 運算速度

前兩者沒有什麼好比,就是trade off,真正有爭議的是在第三個角度。

隨著時代演進,這個問題的答案一直是在改變的。

結論就是視乎使用的平台,函式庫,以及搭配的硬體而定。

若單論CPU這個運算單元,兩個型態的運算速度是幾乎均等的。導致這樣的結論是由於FPU這個運算單元已經內建於一般的個人電腦之內了。不若使用的是float與double,在FPU裡面都會被轉為一個10byte的浮點數值來作計算。因此差別指在於儲存空間而已。

若是把SIMD這個函式庫(單指令存取多筆資料)納進來考慮,在不考慮精度的情況下,當然一組SIMD的暫存器能塞越多筆浮點數運算速度越快。就wiki的說法,目前SIMD的暫存器是512bit=64byte,因此可以同時運算16個單精度浮點數,8個雙精度浮點數。差別是兩倍。但是缺點在於,運算的演算法必須能夠同時將相同運算指令的命令擺在一起,否則一個一個作速度也是與不使用SIMD相同。再來,也有人提到,若使用的平台是.net framework,也是沒辦法使用SIMD的,請節哀。

最後是使用顯示卡相關的運算,雖然就我所知顯示卡內部的運算單位,已經統一改為使用雙精度浮點數。然而,使用CUDA這個顯示卡運算工具的使用者仍然聲稱使用單精度浮點數的效能較高。原因就在於傳輸頻寬,當到達傳輸頻寬的上限時,單精度當然能傳輸高於雙精度的資料量(單位),因此會有著兩倍的差異。但是這效能是否只是卡在自主記憶體傳輸去回顯示卡記憶體上就不能確定。

參考資料:

Float vs Double Performance – Stack Overflow

“On x86 processors, at least, float and double will each be converted to a 10-byte real by the FPU for processing. The FPU doesn’t have separate processing units for the different floating-point types it supports."

“used CUDA and I can remember that float was faster than double there, too. For once the traffic between Host and Device is lower. But even if the data resides on the Device all the time it’s slower."

float vs. double performance @ .NET Framework Developer Center Close

“Double takes twice the space in RAM and might therefore be slower due to cache misses."

The Old Joel on Software Forum – a bit offtopic – float vs. double performance?

“Using a 100,000,000 iteration loop an empty loop completes in ~0.5 s. One with basic float operations(*,/,-,+) in ~2.1 s and the same functions with double in 6.0 s."

“Focussing on float vs double performance is largely irrelevant as most time in a program is usally spent in disk/memory access."

SIMD – Wikipedia, the free encyclopedia

“Intel’s AVX instructions will process 256 bits of data at once, and Intel’s Larrabee graphic microarchitecture promises two 512-bit SIMD registers on each of its cores"

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s