摘 要: 針對高清視頻龐大的數(shù)據(jù)量以及H.264編碼器復(fù)雜的編碼結(jié)構(gòu)引起的低編碼速率的問題,對影響算法編碼速率的原因進(jìn)行了深入分析,并設(shè)計(jì)了高效的多核并行方案,進(jìn)而充分利用TMS320C6678的多核性能,并結(jié)合TMS320C6678的運(yùn)算存儲特性,對H.264編碼器進(jìn)行了多方面的優(yōu)化,最終使H.264編碼器對720P高清視頻序列編碼速率從1.2 fps增加到27.2 fps,更加貼近于實(shí)際應(yīng)用。
關(guān)鍵詞: H.264編碼器;TMS320C6678;高清視頻
0 引言
H.264標(biāo)準(zhǔn)吸取以往標(biāo)準(zhǔn)中的優(yōu)點(diǎn),編碼效率與H.263+以及MPEG-4 SP相比最多可節(jié)省50%的碼率,存儲需求大大降低。正是由于H.264強(qiáng)大的功能及其巨大的市場潛力,國內(nèi)外不少公司開始對H.264的編解碼應(yīng)用進(jìn)行研究并有產(chǎn)品紛紛面世。目前國內(nèi)也紛紛對 H.264標(biāo)準(zhǔn)進(jìn)行研究,使用專用H.264編解碼芯片推出了許多產(chǎn)品。編碼芯片速度很快,但是性能固定,無法根據(jù)需求進(jìn)行性能的改進(jìn),另一方面新一代的HEVC編碼算法性能更為優(yōu)越,但是由于其技術(shù)應(yīng)用尚不成熟,H.264仍然擁有巨大的應(yīng)用潛力,因而在DSP上實(shí)現(xiàn)H.264編碼器具有重大意義。
1 H.264復(fù)雜度分析
H.264標(biāo)準(zhǔn)相比于以往壓縮標(biāo)準(zhǔn)有以下主要優(yōu)點(diǎn)[1]:
(1)在相同重建圖像質(zhì)量下,H.264相比H.263+和MPEG-4節(jié)約50%的碼率;
?。?)H.264具有較強(qiáng)的抗誤碼能力,可以在惡劣的無線環(huán)境中運(yùn)用;
?。?)H.264采用簡潔的分層模式,具有更友好的特性。
本文采用H.264編碼器的可靠性能測試結(jié)果如表1所示。
為了對編碼器進(jìn)行更具針對性的優(yōu)化,本文對編碼器內(nèi)部主要算法部分進(jìn)行了時(shí)間統(tǒng)計(jì),結(jié)果如圖1所示。
2 編碼器在DSP上的實(shí)現(xiàn)
2.1 DSP的多核并行處理方案
為了充分發(fā)揮TMS320C6678的性能,需要設(shè)計(jì)一個(gè)高效的多核并行處理方案[2]。核間通信(IPC)的方式一般有兩種:MessageQ消息機(jī)制和Notify中斷機(jī)制。其中中斷機(jī)制是一種不可屏蔽的中斷通信機(jī)制,通信快速便捷,因而本文采用Notify中斷方式進(jìn)行核間通信。多核之間實(shí)現(xiàn)可靠通信后,就需要為8個(gè)核的并行運(yùn)算設(shè)計(jì)一種高效的拓?fù)浣Y(jié)構(gòu),通常有Data-Flow模式和Master-Slave模式兩種常用的核間通信拓?fù)浣Y(jié)構(gòu)。
(1)Data-Flow模式:通信控制邏輯簡單,適合單向通信,多核利用率不穩(wěn)定,取決于各個(gè)核流水工作量均衡度,適用于能將算法分成多個(gè)獨(dú)立的相等工作量任務(wù)的情況。
(2)Master-Slave模式:通信控制邏輯相對復(fù)雜,多核利用率較高,程序開發(fā)相對簡單[3]。
根據(jù)圖1中時(shí)間測試可知,H.264編碼器中各任務(wù)工作時(shí)間很不均衡,因此本文采用Master-Slave模式。
2.2 多核算法流程
在Master-Slave模式下,核0充當(dāng)邏輯控制器及數(shù)據(jù)流收發(fā)器,其他核則專于壓縮算法處理。當(dāng)核0接收到視頻幀時(shí),將720P視頻幀盡可能均勻地分成7個(gè)視頻片分配到各核的接收緩沖區(qū)中,核1~5的視頻片為106×1 280,核6~7的視頻片為90×1 280,各核在編碼完后將數(shù)據(jù)流存放在發(fā)送緩沖區(qū)中。為充分利用、提高多核并行效率,本文為每個(gè)運(yùn)算核提供了兩組數(shù)據(jù)緩沖區(qū),形成一個(gè)乒乓緩沖存儲結(jié)構(gòu),用以節(jié)約運(yùn)算核對核0的等待時(shí)間,使各個(gè)核運(yùn)算基本保持全速運(yùn)行狀態(tài),從而充分地利用多核并行處理能力。
3 H.264編碼器的DSP優(yōu)化
編碼器在DSP上的優(yōu)化依據(jù)是基于DSP硬件結(jié)構(gòu)上的特有操作,分為傳輸與運(yùn)算兩種操作。傳輸優(yōu)化是DSP核、EDMA控制器等主動(dòng)模塊對不同存儲類型訪問性能優(yōu)化配置過程。本文采用的傳輸方面優(yōu)化有緩存優(yōu)化、EDMA優(yōu)化、數(shù)據(jù)存儲優(yōu)化;在運(yùn)算方面主要是針對C66x核的單指令多數(shù)據(jù)操作(SIMD)以及并行操作特性,在編譯器、C語言以及匯編語言層面上對編碼器進(jìn)行優(yōu)化。
3.1 緩存(Cache)優(yōu)化
C6678擁有兩級緩存結(jié)構(gòu),SYS/BIOS默認(rèn)將一級數(shù)據(jù)存儲(L1D)32 KB、一級程序存儲(L1P)32 KB全部設(shè)置為緩存,而本地二級存儲(LL2)則默認(rèn)全部為普通存儲,可用于存放一些關(guān)鍵數(shù)據(jù)。圖2是在一級緩存為32 KB大小的情況下通過測試得到二級存儲不同緩存化程度與平均編碼時(shí)間的關(guān)系圖[4]。
由圖2可以看出,當(dāng)二級緩存大小超過1/8Cache程度時(shí),編碼時(shí)間基本保持不變??紤]到資源寶貴,LL2用來存放一些高速運(yùn)行的算法數(shù)據(jù)會表現(xiàn)出更好的性能,本文將二級緩存設(shè)置為1/8Cache模式。
3.2 數(shù)據(jù)存儲優(yōu)化
數(shù)據(jù)存儲優(yōu)化是根據(jù)C6678對不同存儲資源訪問的不同速度而確定數(shù)據(jù)分配,表2是DSP多核共享訪問DDR3和SL2的實(shí)驗(yàn)統(tǒng)計(jì)對比。
編碼過程中,全局變量所在的數(shù)據(jù)段為bss,動(dòng)態(tài)開辟的空間、臨時(shí)變量以及中間保存結(jié)果所在的數(shù)據(jù)段為stack,還有全局?jǐn)?shù)組所在的段為far,這部分訪問頻繁的數(shù)據(jù)則放在LL2上;其他訪問較少的段,如text、sysmem、cio則統(tǒng)一放在DDR3上。
3.3 EDMA優(yōu)化
TMS320C6678共有3個(gè)EDMA管理器,10個(gè)通道。本文待壓縮視頻序列為720P,YUV420格式,一幅圖像的大小為1.32 MB,在任務(wù)分配過程中需要對圖像進(jìn)行拷貝。對于這種大數(shù)據(jù)量的復(fù)制過程,EDMA比通過DSP核進(jìn)行復(fù)制具有相當(dāng)大的優(yōu)勢,并且EDMA還可以完成非連續(xù)數(shù)據(jù)段的復(fù)制[5]。EDMA和DSP核的復(fù)制性能與復(fù)制數(shù)據(jù)量的關(guān)系測試對比如圖3所示。
3.4 匯編優(yōu)化
匯編優(yōu)化是一種運(yùn)算型的優(yōu)化,通過充分利用C66x核的SIMD特性以及運(yùn)算單元并行特性,從而減少運(yùn)算過程中所消耗的時(shí)間[6]。
根據(jù)圖1中所示,編碼時(shí)間主要集中在預(yù)測、運(yùn)動(dòng)估計(jì)、DCT、量化等部分,選擇各部分算法中的關(guān)鍵函數(shù)進(jìn)行匯編優(yōu)化[7],優(yōu)化結(jié)果如表3所示。
3.5 其他優(yōu)化
除上述4種基于TMS320C6678特性的獨(dú)特優(yōu)化,還可以進(jìn)行一些DSP中常用的普適優(yōu)化,這里只做簡單描述。
?。?)-O優(yōu)化:-O優(yōu)化是編譯器對代碼優(yōu)化的級別,其中-O2深度優(yōu)化速度和減少代碼體積,一般為推薦等級,故本文選擇-O2優(yōu)化級別。
?。?)去雙重循環(huán)優(yōu)化:在文件級優(yōu)化的過程中,編譯器對于單重循環(huán)可以進(jìn)行Pipeline優(yōu)化,當(dāng)遇到雙重循環(huán)時(shí),通過解開一層循環(huán),優(yōu)化效率會得到很大提升[8]。
(3)內(nèi)聯(lián)函數(shù)優(yōu)化:內(nèi)聯(lián)函數(shù)在調(diào)用處直接插入,而不是調(diào)用,因而可以省略掉函數(shù)的調(diào)用開銷,適合對頻繁調(diào)用的簡單函數(shù)如T264_sad_u_c()等進(jìn)行優(yōu)化。
4 測試結(jié)果
4.1 測試環(huán)境
本文編碼器測試環(huán)境如下:調(diào)試軟件環(huán)境CCS5.2.1,測試用到的DSP硬件平臺為TMS320C6678,編碼算法為H.264,量化參數(shù)Qp=30,編碼結(jié)構(gòu)GOP為I幀:P幀=1:5,測試視頻序列為官方KristenAndSara.yuv、shields_ter.yuv兩個(gè)序列,分辨率為720P,為更方便準(zhǔn)確地計(jì)算平均編碼速率,測試幀數(shù)設(shè)定為300幀。
4.2 測試結(jié)果
以KristenAndSara.yuv的測試為記錄,編碼器在優(yōu)化過程中的各項(xiàng)指標(biāo)整體記錄如表4所示。
由表4可以看出,表中一系列優(yōu)化以后,編碼圖像質(zhì)量并沒有什么影響,編碼速度得到了極大的提升,其中多核優(yōu)化的作用非常明顯,說明本文的多核結(jié)構(gòu)效率是很高的。
5 結(jié)論
H.264具有相當(dāng)優(yōu)越的壓縮性能,面對其運(yùn)算復(fù)雜性與龐大運(yùn)算量的難題,本文結(jié)合硬件特點(diǎn),對編碼器進(jìn)行一系列優(yōu)化,從而使編碼器實(shí)現(xiàn)對高清視頻序列實(shí)時(shí)編碼。目前對DSP編碼器的研究很熱,本文提供的C6678多核方案、基于C6678硬件特點(diǎn)的優(yōu)化以及720P實(shí)時(shí)高清視頻H.264編碼器都是很有意義的。
參考文獻(xiàn)
[1] 梁佩珊.H.264編碼器算法優(yōu)化與設(shè)計(jì)[D].杭州:浙江大學(xué),2006.
[2] 曹折波,李青.多核處理器并行編程模型的研究與設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(13):2999-3002.
[3] 吳灝,肖吉陽,范紅旗,等.TMS320C6678多核DSP的核間通信方法[J].電子技術(shù)應(yīng)用,2012,38(9):2-3.
[4] 王熹微,唐昆,崔慧娟.基于DM642的視頻編碼Cache優(yōu)化策略[J].微計(jì)算機(jī)信息,2005,21(09Z):84-86.
[5] PESCADOR F, MATURANA G, GARRIDO M J, et al. An H. 264 video decoder based on a latest generation DSP[J]. IEEE Transactions on Consumer Electronics, 2009,55(1):205-212.
[6] 鄭回青,林嘉宇,張鑌.基于TMS320C64xDSP的匯編優(yōu)化方法[J].微處理機(jī),2010,31(1):105-108.
[7] 黃國玉,廖湘柏.基于DM642的x264源代碼的匯編優(yōu)化[J].南華大學(xué)學(xué)報(bào)(自然科學(xué)版),2014,28(1):74-76.
[8] Su Bogong, Wang Jian, ESGUERRA A. Source-level loop optimization for DSP code generation[C]. 1999 IEEE International Conference on Acoustics, Speech, and Signal Processing, 1999. Proceedings. 1999,4:2155-2158.