一千萬個為什麽

搜索

我正在研究一種應該實時運行的流體動力學Navier-Stokes求解器。因此,表現很重要。

現在,我正在研究一些緊密的循環,每個循環占執行時間的很大一部分:沒有單一的瓶頸。這些循環中的大多數都進行了一些浮點運算,但是它們之間存在很多分支。

浮點運算主要限於加法,減法,乘法,除法和比較。所有這些都是使用32位浮點數完成的。我的目標平臺是x86,至少有SSE1指令。 (我在匯編器輸出中驗證了編譯器確實生成了SSE指令。)

我正在使用的大多數浮點值具有相當小的上限,而接近零值的精度不是很重要。所以我想到了這樣的想法:也許轉換到定點算法可以加快速度?我知道唯一可以確定的方法是測量它,可能需要數天,所以我想事先了解成功的可能性。

在Doom的時代,定點已經風靡一時,但我不確定它在2010年的位置。考慮到現在有多少芯片被用於浮點性能,是否有可能定點運算仍然存在給我一個顯著的速度提升?有沒有人有任何可能適用於我的情況的實際經驗?

最佳答案

堅持浮點。固定點實際上只有在8位或16位工作並且使用SIMD時才有用(圖像處理和音頻是典型的用例)。

現代CPU通常有2個FPU,每個時鐘周期最多可以發出2個FP指令。然後,您還可以使用4路FP SIMD(SSE)進行優化。

如果您仍在努力獲得良好的性能,那麽請嘗試使用更好的編譯器,例如Intel的ICC。此外,由於64位模型中的寄存器數量增加,64位英特爾可執行文件往往比32位英特爾可執行文件快一些,因此如果可以,則構建64位。

當然,您也應該對您的代碼進行分析,以便確定熱點的確定位置。您沒有說明您正在使用的操作系統,但在Windows上 VTune ,在Linux上縮放Shark 將幫助您快速輕松地找到性能瓶頸。

轉載註明原文: 定點算法值得我麻煩嗎?

猜你喜歡