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