我正在研究一個iPhone應用程序,它涉及每秒完成數千次的某些物理計算。我正在優化代碼以提高幀率。我正在尋找的改進之一是反平方根。現在,我正在使用Quake 3 fast inverse square root方法。然而,在做了一些研究之後,我聽說there is a faster way by using the NEON指令集。我不熟悉內聯彙編,也不知道如何使用NEON。我試圖實現math-neon庫,但我得到編譯器錯誤,因爲大多數基於NEON的函數缺少return
。iPhone上最快的逆平方根
編輯:我突然得到一些「不清楚的問題」收票。雖然我覺得它很清楚,而且回答的人顯然明白,也許有些人需要明確說明: 你如何使用Neon執行更快的計算?是否真的是獲得iPhone上反平方根的最快方法?
編輯:我今天做了霓虹燈VS雷神之錘一些比較正規的測試,但如果有什麼事情,我現在更加不確定的結果:
應用程式測試:(一個應用程序,目前在App Store與修改其invsqrt方法)
- 地震方法(通過壓力條件下的平均FPS略有增加)
- 霓虹燈領導(這是一個非常密切的呼叫,但它似乎是地震W¯¯作爲稍快)
- 1/sqrtf()(有點更明顯的差異,1-3 FPS下降)。
「正式」測試
- 霓虹燈(顯然是最快的(一個,它吞噬了我的手機的CPU需要多長時間每種方法的應用程序。次穿越1000萬個隨機生成的浮標陣列來獲得)如果它用於一次執行兩個sqrt,則速度加倍)。
- 1/sqrtf()(只比霓虹燈更慢。這令人驚訝的結果使我認爲這個測試「不確定」,直到我進一步調查)
- 雷神之錘(此方法,令人驚訝的,是數量級的幾個訂單比慢其他兩種方法。這是特別奇怪,因爲它在其他測試中的表現。)
雖然地震VS霓虹燈太近肯定地說什麼在應用性能測試中,地震對1 /在第一個測試中,sqrtf()很清楚,第二個測試與輸出的值非常一致。然而,最終重要的是應用性能,所以我將根據該測試做出最終決定。
您是否在樂器下運行您的應用程序以查看實際使用時間?除非你的意思是「三十萬」之類的東西,否則你花費大量的CPU時間來做每秒「數千」(反向)平方根是極不可能的。 –
我的應用程序中的「壓力條件」正在運行每秒約122500次的計算。在我的目標情景中,它將每秒運行594000次。改變平方根方法有明顯的效果,但還有其他瓶頸。 – WolfLink