該系統(tǒng)基于CORTEX-A和Linux系統(tǒng)。在Linux中使用的編譯器是GCC。本文采用通用C語言優(yōu)化和NEON編程優(yōu)化對圖像相關(guān)函數(shù)進(jìn)行了優(yōu)化,并進(jìn)行了測試比較。方差函數(shù)方差代碼在優(yōu)化前后進(jìn)行比較,如圖所示。
對于一般的C語言級(jí)優(yōu)化,對于矩陣數(shù)據(jù),如圖像,主要用于循環(huán)優(yōu)化。以第一個(gè)循環(huán)為例,如圖所示,C語言級(jí)優(yōu)化的代碼如圖所示。
從優(yōu)化結(jié)果可以看出,回路跳數(shù)被有效地減少到。但是也可以發(fā)現(xiàn),加法運(yùn)算的數(shù)目與原始運(yùn)算的數(shù)目幾乎相同,并沒有減少。在對其他循環(huán)函數(shù)和其他函數(shù)進(jìn)行優(yōu)化之后,測試時(shí)間對比如表所示。
從表中的數(shù)據(jù)可以看出,使用公共C語言邊界優(yōu)化并沒有明顯的改進(jìn),因?yàn)長inux系統(tǒng)使用GCC編譯器進(jìn)行編譯,在選擇-O級(jí)優(yōu)化時(shí),循環(huán)已經(jīng)優(yōu)化,所以速度還沒有達(dá)到明顯改善。
GCC編譯器從.版本開始,為ARM氖技術(shù)提供了良好的支持,例如GCC中的函數(shù):
Unt xyt vADuju(uTIN xxyt,utIntxxyt),對應(yīng)于宿語言:VADD。I d,d,d。uintx_t表示兩個(gè)位無符號(hào)整數(shù)的數(shù)據(jù)類型。當(dāng)在GCC編譯器中使用NEON技術(shù)時(shí),需要包括頭文件arm_neon.h.NEON增強(qiáng)指令集,該指令集只有在發(fā)布了Cortex-A系列后才可用,因此ARM不能使用NEON技術(shù)。比較第一個(gè)for循環(huán)之后的方差函數(shù)的第一個(gè)差異如圖所示。
從優(yōu)化的程序代碼中,我們可以看到循環(huán)跳數(shù)是,但是由于使用了與氖有關(guān)的VLDQUU函數(shù),可以在四位的NEN寄存器中加載位的值,調(diào)用VADQQUU可以同時(shí)添加四個(gè)數(shù)據(jù),在一個(gè)指令周期內(nèi)完成F。我們的加法運(yùn)算,加法運(yùn)算的次數(shù)是,大大提高了運(yùn)算性能。
類似的方法可以用來優(yōu)化第二個(gè)for循環(huán),但是調(diào)用的函數(shù)略有不同,具體參考了GCC的技術(shù)文檔,詳細(xì)描述了使用。
與此方法類似,其它函數(shù)如預(yù)處理、角點(diǎn)、相關(guān)函數(shù)優(yōu)化等都集中在循環(huán)碼和并行碼的優(yōu)化上。
利用ARM NEON技術(shù),對圖像處理等矩陣運(yùn)算進(jìn)行并行優(yōu)化,可以大大提高處理速度。優(yōu)化后,速度比優(yōu)化前提高了兩倍,比ARM快了八倍。SIR和其他多媒體處理算法。
免責(zé)聲明:本網(wǎng)站內(nèi)容來源網(wǎng)絡(luò),轉(zhuǎn)載是出于傳遞更多信息之目的,并不意味贊成其觀點(diǎn)或證實(shí)其內(nèi)容真實(shí)性。轉(zhuǎn)載稿涉及版權(quán)等問題,請立即聯(lián)系網(wǎng)站編輯,我們會(huì)予以更改或刪除相關(guān)文章,保證您的權(quán)利。
作者:徐州百都網(wǎng)絡(luò) | 來源: | 發(fā)布于:2022-04-03 11:00:52