2011-10-25 67 views
1

我正在爲iPhone構建一個庫(speex,但我確定它也會應用到很多其他庫),並且make腳本可以選擇使用固定點而不是浮點。針對iPhone的編譯優化:浮點還是固定點?

由於iphone ARM處理器具有VFP擴展並執行非常好的浮點計算,您是否認爲使用固定點選項是更好的選擇?

如果有人已經對此進行了基準測試並希望分享,我會非常感謝他。

回答

2

嗯,這取決於你的應用程序的設置,這裏是一些指導方針

  1. 首先嚐試啓用優化0(最快最小)
  2. 打開放鬆IEEE符合
  3. 如果您的應用程序可以在獨立的連續內存位置輕鬆處理浮點數,您應該查看ARM NEON內部指令和彙編指令,它們可以在一條指令中處理多達4個浮點數。
  4. 如果您已經在大量使用浮點運算,嘗試一些你的邏輯切換到固定點(但請記住,從NEON移動註冊中一個完整的流水線失速整數寄存器結果)
  5. 如果您已經大量使用整數數學,試着將你的一些邏輯改爲浮點數學。
  6. 記得在優化之前進行配置文件
  7. 而且最重要的是,更好的算法總是會擊敗上述的微優化。
0

如果您正在處理大量的連續數據,NEON絕對是您的選擇。

浮動或固定,這是一個很好的問題。 NEON處理固定速度有點快,但我會保持原生輸入格式,因爲轉換需要時間並最終需要額外的內存。

即使lib提供了不同的輸出格式作爲選項,它幾乎總是意味着lib內部轉換。所以我猜float在這種情況下是本地的。堅持下去。

沒有人會阻止你微調優化算法。通常,算法越好,由於現代機器上的流水線操作,通過微優化可以獲得更多的性能增益。

雖然我會遠離內在的東西。網絡上有太多的帖子抱怨內部人員做些瘋狂的事情,特別是在處理即時值時。 它可能會變得非常麻煩,你也難以用內在函數優化任何東西。