我聽說iPhone 4和iPad有一個叫做VFP的fpu,它在某種程度上優化了浮點運算,甚至允許SIMD(儘管是否GCC利用這是可疑的)。不過,我讀過一些Android設備,使用固定點超過浮點的速度可以提高20倍的性能。iPhone 4和iPad 2:固定點算法優於浮點數
在這些設備中使用浮點運算的定點算法實現我的代碼的浮點密集部分會有什麼好處。
我聽說iPhone 4和iPad有一個叫做VFP的fpu,它在某種程度上優化了浮點運算,甚至允許SIMD(儘管是否GCC利用這是可疑的)。不過,我讀過一些Android設備,使用固定點超過浮點的速度可以提高20倍的性能。iPhone 4和iPad 2:固定點算法優於浮點數
在這些設備中使用浮點運算的定點算法實現我的代碼的浮點密集部分會有什麼好處。
iPhone 3G armv6 CPU有一個VFP流水線浮點單元,其吞吐量要高於整數中的相同計算。 GCC支持生成計劃用於流水線的VFP指令。 iPhone 3GS和iPhone 4 armv7 CPU沒有流水線VFP單元,因此在某些浮點序列上實際上比iPhone 3G略慢;但armv7處理器在可矢量化的短浮點處更快,因爲它具有NEON並行矢量單元。某些Android設備CPU根本沒有任何硬件浮點單元,因此操作系統使用FP進行軟件仿真,可能比整數或定點慢一個數量級以上。
一般的經驗法則可能是,如果您的算法只能處理24位尾數精度,並且不會在浮點和整數之間進行大量轉換,請在iOS上使用短浮點。它幾乎總是更快。
但是,如果您想用您的C代碼(使用NDK)支持較舊的Android設備,請使用縮放整數。
如果你的應用程序沒有進行大量的數字處理,對於0.1%以下的典型應用程序,以上都沒有引起顯着差異。
由於hotpaw2表示,iPhone 4和iPad 2都具有硬件浮點,因此您不會看到在缺乏此類硬件的平臺上可以獲得的數量級的加速。
這就是說,NEON向量單元不支持整數操作以及浮點,並且能夠通過鑄造它們作爲固定點的問題,而不是加快某些操作。 但是,除非你真的明白你在做什麼,並準備編寫關鍵例程的程序集實現,否則你不會看到任何好處。
堅持浮點,如果它適合您的問題。如果您需要提高性能,我保證追蹤執行您的應用程序將帶來許多更好的調整機會。