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