ARM NEON技術在車位識別算法中的應用
3 圖像處理算法在CORTEX-A8 平臺上的優化
本系統是Cortex-A8和Linux系統上搭建,Linux下使用的編譯器為GCC.本文中使用普通C 語言優化和NEON編程優化對圖像相關函數進行了優化,并進行了測試對比,下面給出方差函數variance代碼進行優化前后的對比說明,如圖5優化前的代碼。
3.1 C語言級別優化
對于一般C語言級別的優化,對于圖像這類矩陣數據而言,主要針對循環優化。以第一個循環為例,如圖6對于C語言級別循環優化后的代碼如圖6所示。
由優化后的結果可見,通過對循環展開,有效的減少了循環跳轉次數,跳轉為原來的1 4 .但是也可以發現,加法運算次數,幾乎和原來相同并沒有減少。對于其他for循環和其他函數進行優化后,測試時間對比如表2所示。
由表中數據可見,使用普通C 語言界別優化,并沒有明顯提升,原因是在Linux系統上使用GCC編譯器進行編譯的,在選擇-O2 級別優化的時候,已經對循環進行了優化,所以運行速度沒有明顯提升。
3.2 使用NEON技術的優化
GCC 編譯器從4.3 版本開始,很好地提供了對ARM NEON 技術的支持。例如GCC 中的函數:
uint32x2_t vadd_u32(uint32x2_t,uint32x2_t),對應匯語言:vadd.i32 d0,d0,d0.uint32x2_t代表這個數據類型是2 個32 位無符號整型。在使用GCC 編譯器中的NEON 技術時,需要包含頭文件arm_neon.h>.NEON增強指令集是在Cortex-A系列發布后才具有的功能,因此ARM11 無法使用NEON 技術。對方差函數variance第一個for循環優化后的代碼對比如圖7所示。
評論