2010-01-18 181 views
11

雖然,據我所知,IEEE 754沒有提到刷新到零模式以加快處理denormalized numbers的速度,但某些體系結構提供此模式(例如http://docs.sun.com/source/806-3568/ncg_lib.html)。浮點運算中的清零行爲

在本技術文檔的特定情況下,非規範化數字的標準處理是默認值,並且必須明確激活flush-to-zero。在默認模式下,非規格化數字也在軟件中處理,速度較慢。

我在嵌入式C的靜態分析器上工作,它試圖預測在運行時可能發生的值的正確(如果有時不精確)範圍。它的目標是正確的,因爲它旨在排除在運行時發生錯誤的可能性(例如對於關鍵的嵌入代碼)。這要求在分析過程中捕獲所有可能的行爲,並因此在浮點計算過程中產生所有可能的值。

在這種情況下,我的問題是雙重的:

  1. 嵌入式架構之中,是否有架構只提供刷新到零?他們可能並不需要將自己宣傳爲「IEEE 754」,但可以提供接近IEEE 754風格的浮點運算。

  2. 對於同時提供,在嵌入式上下文中的體系結構,是不是齊平到零可能由系統被激活,以使反應時間更可預測的(對於這些共同的約束嵌入式系統)?

中,我使用的浮點值的區間算術處理刷新到零是很簡單的,如果我知道我必須這樣做,我的問題是更不管我必須這樣做。

+0

好問題,說得好。我不是嵌入式系統的專家,但我懷疑沒有明確的答案。這完全取決於您的特定最終用戶環境。 – GManNickG 2010-01-18 02:42:08

回答

7

對於這兩個問題都可以。有些平臺只支持清零,而且有很多平臺的默認清零爲零。

您還應該意識到許多嵌入式和dsp平臺都使用「Denormals Are Zero」模式,這是浮點語義中的另一個摺痕。


編輯FTZ的與DAZ進一步的解釋:

在FTZ,當操作會產生正常的算術下反規範結果,零而是返回。請注意,有些實現總是刷新爲正零,而另一些可能會刷新爲正或負零。最好不要依靠任何一種行爲。

在DAZ中,當一個操作的輸入是一個反常規時,零代替它的位置。再次,沒有關於哪個零將被替換的一般保證。

一些支持這些模式的實現允許它們獨立設置(並且一些僅支持其中的一個),所以您可能需要獨立或同時對任一模式進行建模。

還要注意,一些實現將這兩種模式組合成「沖洗爲零」。例如,ARM VFP「清零」模式就是FTZ和DAZ。

+0

今天我實現了間隔算術,它立刻包含了FTZ,DAZ(衝到+0或相同符號爲零)和IEEE 754次正常的所有可能性。我們的迴歸測試沒有顯示與以前的IEEE 754算術相比有任何不同。所以它可能不需要打擾用戶的選擇,新模式應該讓每個人都感到高興。這是一件非常好的事情。再次感謝! – 2010-01-21 23:23:42

+0

真棒,高興地幫助。 – 2010-01-21 23:50:50

+0

執行浮點數學的實用性是什麼,以便表示小於最小歸一化值的任何尾數位將被舍入?我認爲這可能比處理非規格值更便宜,因爲所有浮點數都具有相同的表示形式。只有'最後清理'階段纔會改變。 – supercat 2012-02-22 00:21:42

2

ARM Cortex內核有一個刷新到零的選項,很難看出你可以忽略它。然後再次,不要從論壇採取商業建議。與您的客戶交談。

+0

現有的用戶非常棒,他們使用理智的平臺,理解浮點問題,並且他們花費了很長時間來停用編譯器對fmadd的無聲生成,以使得舍入錯誤更加可預測。這是我感興趣的潛在用戶。感謝您的反饋。 – 2010-01-18 03:18:41