我使用OpenCV
爲iOS
完成了計算密集型應用程序。當然這很慢。但它比我的PC原型慢200倍。所以我正在優化它。從最初的15秒開始,我能夠獲得0.4秒的速度。我想知道我是否找到了所有的東西以及其他人可能想要分享的內容。我所做的:IOS/iPad/iPhone的最高速度
替換成 「
double
」 數據類型裏面的OpenCV爲 「float
」。 Double是64bit和32bit的CPU不能輕易處理它們,所以float給了我一些速度。 OpenCV經常使用double。在編譯器選項中增加了「
-mpfu=neon
」。副作用是仿真器編譯器無法工作的新問題,只能在本機硬件上測試任何東西。用90個值查找表替換
sin()
和cos()
實現。加速是巨大的!這與PC不同,這種優化不會加速。代碼以度爲單位工作,此值已轉換爲弧度爲sin()
和cos()
。此代碼也被刪除。但查找表完成了這項工作。啓用
"thumb optimizations"
。有些博客文章推薦完全相反,但這是因爲拇指通常會使armv6
上的速度變慢。armv7
沒有任何問題,使事情變得更快,更小。爲了確保拇指優化和
-mfpu=neon
工作在最佳狀態,並且不引入崩潰,我完全移除了armv6目標。我所有的代碼都被編譯爲armv7
,這也被列爲應用商店中的要求。這意味着最低iPhone
將是3GS
。我認爲放棄舊的是可以的。無論如何,老一代的CPU速度較慢,如果安裝在舊設備上,CPU密集型應用程序會提供不良的用戶體驗。當然我用
-O3 flag
我來自OpenCV的刪除
"dead code"
。通常在優化OpenCV時,我會看到我的項目顯然不需要的代碼。例如,經常有額外的"if()"
來檢查像素大小爲8位或32位,我知道我只需要8位。這會刪除一些代碼,爲優化器提供更好的機會去除更多內容或用常量替換。此外,代碼更適合緩存。
其他技巧和想法?對於我來說,啓用拇指和替換三角函數是助推器製造商,讓我感到驚訝。也許你知道要做更多的事情,這會讓應用程序飛行?
這個加速度對我來說是新的。由於需要大會級別的思考,因此使用它仍然有點困難。但仍然有可能,也許會試一試。我稍後再接受它,因爲我想看看我們是否能在這裏獲得更多有用的提示。 –
在WWDC 2012視頻中有一個會議完全處理Accelerate框架。你應該看看它^^ – borrrden
http://adcdownload.apple.com//wwdc_2012/wwdc_2012_session_pdfs/session_708__the_accelerate_framework.pdf 和 https://developer.apple.com/videos/wwdc/2012/#708似乎作爲它的鏈接 –