2011-12-20 66 views
0

我正在編譯和使用opencv框架的ios項目,所以我很想知道什麼是我的項目中最好的編譯器標誌。使用opencv框架的客觀C項目的最佳編譯器標誌

該項目處理大量的矩陣像素,所以我需要從編譯器的一邊讓SIMD指令能夠儘可能高效地處理這個矩陣。

我使用這個標誌:-mfpu =霓虹燈,-mfloat-ABI = softfp和-O3,

而且我也發現這個其他標誌: -mno拇指 -mfpu =特立獨行 -ftree-矢量化 -DNS_BLOCK_ASSERTIONS = 1

我真的不知道它是否會爲我節省很多cpu處理,我通過谷歌搜索,但沒有找到讓我充分理由知道最好的東西編譯器標誌。

謝謝

回答

1

我也使用與霓虹燈相同的標誌。根據優化級別O3或任何內容,不會對霓虹固有代碼進行優化。它只是優化了ARM代碼。

正如Vasile所說,通過在裝配中書寫霓虹燈代碼可以獲得最佳性能。 最簡單的方法是編寫一個程序,其中使用固有的霓虹燈代碼並使用您提到的標誌進行編譯。現在使用爲代碼生成的彙編代碼進一步優化。

很多優化可以通過並行化或利用霓虹燈的雙重指令功能來完成。

1

問題是編譯器不擅長生成向量化的代碼。因此,只需啓用NEON,您就不會獲得太多改進(也許10%??)

您可以做的是分析您的應用程序並使用NEON手動編寫那些消耗您時間的部分。如果你這樣做,爲什麼不將它們修補到公共OpenCV源代碼中?現在,OpenCV幾乎沒有針對NEON進行過優化的代碼(對於x86 SSE2,它的優化效果要好得多)。