摘要 通過程序結構的調(diào)整,,編碼結構的優(yōu)化及代碼的匯編級優(yōu)化,完成編碼器的DSP高效實現(xiàn),。實驗結果表明,,優(yōu)化后的編碼器降低了運算復雜度,提高了CCSDS圖像壓縮算法的實時性,。
關鍵詞 CCSDS,;Blackfin533,;編碼器;優(yōu)化
空間數(shù)據(jù)咨詢會(CCSDS)于2005年11月提出的針對空間應用的CCSDS圖像壓縮算法,,具有良好的圖像壓縮性能和抗誤碼能力,,同時算法復雜度較低。但在具體硬件實現(xiàn)時,,仍不能夠滿足實時高效的要求,,因此,必須對該算法的硬件實現(xiàn)進行改進和優(yōu)化,。文中針對這一問題,提出編碼優(yōu)化方案,,提高算法的實時性,。采用ADI公司的Blackfin533芯片以及Visual DSP++5.0仿真平臺,是實現(xiàn)CCSDS編碼器的有效途徑,。
1 編碼優(yōu)化
文中采用CCSDS圖像壓縮算法編,、解碼的C程序源代碼。通過以下幾個方面實現(xiàn)優(yōu)化:調(diào)整程序結構,;編碼結構的優(yōu)化,;代碼的匯編級優(yōu)化。
1.1 程序結構調(diào)整
選用的源代碼是符合CCSDS圖像壓縮算法標準流程的編,、解碼器源代碼,,代碼容量約為326 kB,對于實時圖像壓縮,,其中含有大量的冗余代碼,,而所用芯片的64 kB指令存儲器是遠遠滿足不了要求的,因此,,要將CCSDS源代碼移植到DSP上,,就必須調(diào)整程序結構,去掉冗余代碼,,降低程序所占內(nèi)存,。
(1)刪除與編碼無關的代碼。(2)刪除冗余判斷,。(3)刪除不必要的中間變量,。(4)改寫編碼主函數(shù)。
經(jīng)過以上優(yōu)化,,代碼容量降低為56 kB,,這樣,所選用的Blackfin533芯片的L1指令存儲器就足以容納,,而無需利用高速Cache和DMA進行指令的傳輸,,提高了編碼效率,。
1.2 主要函數(shù)和數(shù)據(jù)的優(yōu)化
在以上優(yōu)化的基礎上,采用Blackfin533芯片對Lena圖像進行壓縮,,壓縮比率為8:1,,時間為3425 ms,遠達不到實時性的要求,。因此,,還需對編碼結構和算法進行改進,以提高編碼速度,。
(1)編碼選項的選取,。
在CCSDS圖像壓縮算法中有多種編碼供選取,增大了算法的靈活性,,但也增加了算法硬件實現(xiàn)的復雜度,,并且這些編碼選項在實現(xiàn)時存在大量判斷語句。一般情況下,,判斷分支會打斷DSP指令運行的流水線,,從而影響編碼運行時間。所以在進行DSP移植時應進行編碼選項,。
1)編碼段大小S的選?。喝鐖Dl所示,S>64時,,重建圖像的客觀質(zhì)量增加趨于平緩,,所以在實現(xiàn)時選擇S大小為64,這樣一個編碼段所需的編碼原數(shù)據(jù)存儲量為8kB,,從而可以保證對編碼段的編碼過程在數(shù)據(jù)存儲器L1中完成,,而無需Cache和DMA在各級存儲器之間轉(zhuǎn)移數(shù)據(jù),提高了編碼效率,。
2)DC系數(shù)編碼選項k的選?。簶藴手刑峁┝俗顑?yōu)化和啟發(fā)式兩種k值選擇方式,文中選擇復雜度較低的啟發(fā)式選取方案,。
(2)程序級優(yōu)化,。
1)Blackfin533是16位定點DSP處理器,而在源代碼中使用的是浮點DWT,,移植在定點DSP中運行需要大量時間,。測試結果表明:對512× 512的圖像進行浮點DWI變換耗時3000 ms以上,影響了CCSDS圖像壓縮算法的編碼效率,。因此在實現(xiàn)過程中,,采用定點化的方法實現(xiàn)浮點DWT,并最終匯編化,使對圖像進行浮點DWT處理的時間降低到12 ms以下,。
2)源代碼中有大量數(shù)組類型的指針變量,,其緩沖區(qū)是通過malloc和calloc等函數(shù)進行動態(tài)分配的,這樣會占用大量的編碼時間和可能會導致內(nèi)存泄露以及導致DMA數(shù)組傳輸錯誤等問題,,所以在實現(xiàn)過程中,,由于所需編碼的圖像信息是可以事先得知的,于是可用靜態(tài)數(shù)組來代替動態(tài)申請的數(shù)組,,這樣不僅指定了分配的位置,,便于DMA傳輸,還縮短了編碼時間,。
3)編碼塊的數(shù)據(jù)格式選?。涸创a中是將一個編碼塊按照二維數(shù)組的格式進行存儲的,即8×8的格式,。在實現(xiàn)過程中發(fā)現(xiàn),,DC系數(shù)編碼及AC系數(shù)字的映射過程對二維數(shù)組的索引取值耗時很長,因此可以將編碼塊改成一維數(shù)組,,即1×64的組織形式,這樣在實現(xiàn)過程中可以減少編碼時間,。
4)用查表法代替大量的判斷分支:AC系數(shù)熵編碼函數(shù)RiceCoding中有大量的分支判斷語句,,占據(jù)大量的編碼時間,用查表法替換這里的分支判斷語句,,可以使函數(shù)的編碼時間減少80%以上,。此外,CCSDS編碼器代碼中的大量分支判斷語句和RiceCoding函數(shù)一樣,,也可用查表法實現(xiàn),。這正是以空間換時間的典型應用。
5)在源代碼中,,為了節(jié)省存儲器空間,,在結構中使用了位域,但Blackfin 533在處理位域操作時效率極低,,若將位域類型改為char或sh-ort類型,,雖然在一定程度上增加了編碼時所需的存儲容量,但卻能夠明顯縮短編碼時間,。
6)碼流輸出函數(shù)BitsOutput的功能是輸出指定位數(shù)的數(shù)據(jù)到碼流文件,,在源代碼中占到總編碼時間的約1/5。據(jù)統(tǒng)計,,在壓縮比率為8:1的 Lena圖時,,程序調(diào)用BitsOutput函數(shù)達14萬多次。若將該函數(shù)改為32位的形式輸出,并通過移位方式進行碼流輸出以及在程序中減少該函數(shù)調(diào)用的方法進行優(yōu)化,,可使其占用周期減少到原來的20%,。另外,編碼時只輸出一位的情況很多,,將這些地方換成單獨的函數(shù)可進一步減少編碼時間,;
7)循環(huán)優(yōu)化:保持循環(huán)體內(nèi)代碼簡單,減少分支判斷,。避免循環(huán)中依賴前次循環(huán)的數(shù)據(jù),,這樣可以實現(xiàn)并行處理。內(nèi)外循環(huán)合并,,可以使優(yōu)化器專注于內(nèi)循環(huán),。減少數(shù)據(jù)跨切層數(shù)。利用Blackfin533的零開銷循環(huán),,將代碼中的循環(huán)層數(shù)控制在兩層以內(nèi),。
(3)匯編級優(yōu)化。
通過以上方式進行的CCSDS編碼器的優(yōu)化,,使得圖像編碼的時間縮短,,但是,這樣實現(xiàn)的算法運行效率還是比較低,,這是因為所有的代碼都是由C語言編寫的,,并沒有完全利用DSP的各種性能。因此必須結合DSP本身的特點,,對其進一步優(yōu)化,,才能使CCSDS高效的對圖像進行編碼。
C語言匯編化的優(yōu)化方法有:
(1)節(jié)省寄存器資源,。Blackfin提供了8個32位數(shù)據(jù)寄存器及一系列地址寄存器,。對于這些寄存器,應盡可能做到一個寄存器多次使用,,同時盡量使用較短的數(shù)據(jù)類型,。
(2)利用指令的流水線結構,盡量展開C語言中的循環(huán)體,,減少分支判斷,,盡量減少流水線的打斷。
(3)使用并行指令,。大多數(shù)指令都存在相應的可并行的指令,,如一條運算指令可以并行兩條數(shù)據(jù)讀取指令。使用并行指令可以成倍地提高代碼的執(zhí)行速度,。
(4)將除法轉(zhuǎn)化為乘法或查表實現(xiàn),。Blackfin中提供了乘法器但沒有除法器,執(zhí)行除法指令將花費幾十甚至上百個指令周期,因此將除法轉(zhuǎn)化為乘法或查表,,可減少這種開銷,。
(5)使用專用指令。Blackfin533提供了大量的圖像視頻專用指令,,通過使用這些指令,,能在很大程度上提高代碼的執(zhí)行效率。
2 優(yōu)化結果
選用Lena圖像和Area圖像在壓縮比率為8的情況下進行測試,,測試結果如表1所示,,可見文中的優(yōu)化方案可將編碼時間由原來的3 425 ms優(yōu)化至48 ms,時間節(jié)省98.6%,,提高了CCSDS圖像壓縮算法編碼的實時性能,。
3 結束語
文中首先介紹了CCSDS算法結構的一般流程,接著針對編碼器的DSP移植提出了優(yōu)化方案,,包括算法編碼選項的選取優(yōu)化,、系統(tǒng)級優(yōu)化、程序級優(yōu)化以及匯編優(yōu)化,,最后給出了對比結果,。可見,,文中提出的優(yōu)化方法縮短了編碼時間,,提高了算法效率。