基于Blackfin533的CCSDS圖像壓縮算法編碼優(yōu)化
5)在源代碼中,為了節(jié)省存儲(chǔ)器空間,在結(jié)構(gòu)中使用了位域,但Blackfin 533在處理位域操作時(shí)效率極低,若將位域類型改為char或sh-ort類型,雖然在一定程度上增加了編碼時(shí)所需的存儲(chǔ)容量,但卻能夠明顯縮短編碼時(shí)間。
6)碼流輸出函數(shù)BitsOutput的功能是輸出指定位數(shù)的數(shù)據(jù)到碼流文件,在源代碼中占到總編碼時(shí)間的約1/5。據(jù)統(tǒng)計(jì),在壓縮比率為8:1的 Lena圖時(shí),程序調(diào)用BitsOutput函數(shù)達(dá)14萬多次。若將該函數(shù)改為32位的形式輸出,并通過移位方式進(jìn)行碼流輸出以及在程序中減少該函數(shù)調(diào)用的方法進(jìn)行優(yōu)化,可使其占用周期減少到原來的20%。另外,編碼時(shí)只輸出一位的情況很多,將這些地方換成單獨(dú)的函數(shù)可進(jìn)一步減少編碼時(shí)間;
7)循環(huán)優(yōu)化:保持循環(huán)體內(nèi)代碼簡單,減少分支判斷。避免循環(huán)中依賴前次循環(huán)的數(shù)據(jù),這樣可以實(shí)現(xiàn)并行處理。內(nèi)外循環(huán)合并,可以使優(yōu)化器專注于內(nèi)循環(huán)。減少數(shù)據(jù)跨切層數(shù)。利用Blackfin533的零開銷循環(huán),將代碼中的循環(huán)層數(shù)控制在兩層以內(nèi)。
(3)匯編級(jí)優(yōu)化。
通過以上方式進(jìn)行的CCSDS編碼器的優(yōu)化,使得圖像編碼的時(shí)間縮短,但是,這樣實(shí)現(xiàn)的算法運(yùn)行效率還是比較低,這是因?yàn)樗械拇a都是由C語言編寫的,并沒有完全利用DSP的各種性能。因此必須結(jié)合DSP本身的特點(diǎn),對(duì)其進(jìn)一步優(yōu)化,才能使CCSDS高效的對(duì)圖像進(jìn)行編碼。
C語言匯編化的優(yōu)化方法有:
(1)節(jié)省寄存器資源。Blackfin提供了8個(gè)32位數(shù)據(jù)寄存器及一系列地址寄存器。對(duì)于這些寄存器,應(yīng)盡可能做到一個(gè)寄存器多次使用,同時(shí)盡量使用較短的數(shù)據(jù)類型。
(2)利用指令的流水線結(jié)構(gòu),盡量展開C語言中的循環(huán)體,減少分支判斷,盡量減少流水線的打斷。
(3)使用并行指令。大多數(shù)指令都存在相應(yīng)的可并行的指令,如一條運(yùn)算指令可以并行兩條數(shù)據(jù)讀取指令。使用并行指令可以成倍地提高代碼的執(zhí)行速度。
(4)將除法轉(zhuǎn)化為乘法或查表實(shí)現(xiàn)。Blackfin中提供了乘法器但沒有除法器,執(zhí)行除法指令將花費(fèi)幾十甚至上百個(gè)指令周期,因此將除法轉(zhuǎn)化為乘法或查表,可減少這種開銷。
(5)使用專用指令。Blackfin533提供了大量的圖像視頻專用指令,通過使用這些指令,能在很大程度上提高代碼的執(zhí)行效率。
2 優(yōu)化結(jié)果
選用Lena圖像和Area圖像在壓縮比率為8的情況下進(jìn)行測試,測試結(jié)果如表1所示,可見文中的優(yōu)化方案可將編碼時(shí)間由原來的3 425 ms優(yōu)化至48 ms,時(shí)間節(jié)省98.6%,提高了CCSDS圖像壓縮算法編碼的實(shí)時(shí)性能。
3 結(jié)束語
文中首先介紹了CCSDS算法結(jié)構(gòu)的一般流程,接著針對(duì)編碼器的DSP移植提出了優(yōu)化方案,包括算法編碼選項(xiàng)的選取優(yōu)化、系統(tǒng)級(jí)優(yōu)化、程序級(jí)優(yōu)化以及匯編優(yōu)化,最后給出了對(duì)比結(jié)果。可見,文中提出的優(yōu)化方法縮短了編碼時(shí)間,提高了算法效率。
本文引用地址:http://m.butianyuan.cn/article/151180.htm
評(píng)論