2015-03-25 131 views
3

我正在開發一些數值軟件,它的性能很大程度上取決於數值精度(即浮點數,雙精度等)。 我注意到ARM NEON並不完全符合IEEE754浮點標準。有沒有辦法在x86 CPU上模擬NEON的浮點精度?例如模擬NEON SIMD浮點運算的庫。我可以在x86 C程序中模擬ARM NEON嗎?

+0

http://meta.stackexchange.com/a/66378 – auselen 2015-03-25 08:06:15

+1

請注意,NEON _arithmetic_應該是單精度754 - 「不符合」主要來自對754指定多個模式的某些方面具有固定值(舍入,異常陷印,非正常處理等)。如果精度比速度更重要,請考慮定位VFP而不是NEON。 – Notlikethat 2015-03-25 11:09:55

+0

NEON沒有把非正常變爲零嗎?如果是這樣,我相信在x86中有一個設置可以做到這一點。 – EOF 2015-03-25 11:32:59

回答

1

也許吧。

我對SSE不太瞭解,但是可以強制許多SSE模式的行爲像NEON。這將取決於您的編譯器和可用庫,但請參閱Visual Studio FP unit control functions。這可能足夠滿足您的要求。

此外,您可以使用arm_neon.h標頭確保您使用類似的內在函數來完成類似的操作。最後,如果你真的需要在這些邊界條件下達到這個精度,你將需要一個好的測試套件來驗證你是否按預期實現了你的結果。最後,即使使用純粹的「C」代碼(通常符合IEEE-754),並使用ARM上的VFP作爲其他評論者所述,您將得到不同的結果,因爲浮點非常不規則過程,並受到優化和操作順序的突發事件的影響。讓結果在不同的編譯器中相匹配是非常具有挑戰性的,更不用說硬件體系結構。例如,如果要在CL/MSVS上與/fp:precise進行比較,要在英特爾上使用gcc獲得非常令人滿意的結果,通常需要使用-ffloat-store標誌。

最後,您可能需要接受某種非零容錯。試圖達到零可能是困難的,但如果你到達那裏聽到你的結果會很棒。看起來有可能......但很難。

0

感謝您的回答。

最後,我使用了連接到桌面的android手機,並且手機上正在運行某些功能。

相關問題