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