期刊VIP學術指導 符合學術規范和道德
保障品質 保證專業,沒有后顧之憂
摘要:CUDA(Compute Unified Device Architecture)是一種由NVIDIA推出的通用并行計算架構,可進行大規模并行計算和處理密集型數據。系統地分析H.264編碼器各模塊的編碼性能及復雜性,基于CUDA研究H.264標準編碼在可編程圖形處理器上的實現,充分利用CUDA存儲器資源與并行計算能力可加速編碼的各關鍵模塊處理過程,可提高H.264的編碼速度。
關鍵詞:H.264視頻編碼,CUDA,并行框架
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2011)20-4966-02
H.264是由ITU-T VCEG和ISO/IEC MPEG聯合推出的國際視頻編碼標準,具有較高的視頻編碼壓縮率和網絡適應性。由于H.264的高效率編碼主要來自于新的關鍵技術,而每一個新的關鍵技術都會造成計算復雜度的提升,因而導致H.264視頻編碼在編解碼時計算量顯著增加。故H.264的高效壓縮編碼性能是以增加編解碼時間為代價的,如何降低H.264的計算復雜度,有效的提高H.264的編碼速度是一個重要的研究課題。
1 H.264編碼器中各模塊的編碼性能
H.264的主要編碼流程包括:幀內預測、運動估計/運動補償、整數變換/量化、熵編碼、去塊效應濾波。分析H.264編碼器的典型運行周期,采用JVT的JM軟件,在Pentium Dual-Core 2.93GHz,內存4GB的平臺下運行,對三個不同分辨率大小的視頻序列suzie_qcif 176×144,news_cif 352×288,soccer 704×576測試各個模塊的時間比例,可知三個視頻序列各個模塊的平均時間比例如表1所示。
在H.264編碼過程中,復雜度最高、耗時最長的是運動估計/補償部分,占81.73%;其次是幀內預測和整數變換/量化部分,分別占5.84%和5.46%,熵編碼、濾波和其它占6.97%。為了提高整體的編碼速度,滿足系統實時性要求,非常有必要降低各個模塊尤其是運動估計、幀內預測和整數變換/量化部分的計算時間。
2 基于CUDA的H.264視頻編碼并行框架
NVIDIA推出了支持CUDA的GPU架構,既采用了統一處理架構,又引入了片內共享存儲器,支持隨機寫入和線程間通信。為了充分利用CUDA存儲器資源與并行計算能力,考慮關鍵模塊的數據相關性與可并行性,提出一個基于CUDA的H.264視頻編碼的并行框架,如圖1所示。把運動估計/運動補償、幀內預測、整數變換及量化、去方塊濾波 、熵編碼放入GPU內完成,CPU端只負責視頻數據和碼流的傳輸,最大程度發揮GPU的并行度。
運動估計/運動補償在H.264視頻編碼中是計算密度最大的部分,用CUDA實現運動估計對提高整體編碼速度起著相當重要的作用。本框架充分利用資源的并行度,幀間預測使用整幀圖像中宏塊與宏塊之間進行并行計算的策略,大大減少視頻編碼的時間;并使用可變尺寸塊的全搜索運動估計算法,合理地分配線程,盡可能多的利用共享存儲器以減少對全局存儲器的訪問,高效地實現了全搜索運動估計算法在CUDA架構下的并行過程。
幀內預測在H.264視頻編碼中是一個耗時的模塊。本框架采用一種塊級并行的幀內模式選擇方法,即改進原有的塊內并行方法,使用基于宏塊之間的并行實現。該方法打破了原來塊與塊之間像素的依賴關系,用原始塊像素代替重構像素來預測當前塊的像素值以便達到塊級之間并行,用CUDA并行執行,可加快編碼的速度。
H.264視頻編碼中整數變換是針對4×4大小的殘差塊進行的一種變換,殘差塊之間的數據是相互獨立的,每一塊的像素都執行相同的變換操作,非常適合并行計算。本框架通過優化的整數DCT變換采用宏塊間并行實現對殘差數據的變換及量化,這樣便能充分利用CUDA的并行計算能力,提高并行度。
量化后的系數矩陣要進行Zigzag排序與熵編碼。本框架可采用霍夫曼編碼代替CAVLC熵編碼。在熵編碼之前先進行zigzag掃描,把一個宏塊劃分為一個線程塊,這樣,一個宏塊包括16個線程,用一個線程對4×4的塊進行掃描、編碼。使用CUDA實現編碼時,數據操作過程的控制方式如下:
dim3 blocksize(16,16);
dim3 gridsize((NX/blocksize.x,NY/blocksize.y);
kernel_function<<>>();
其中kernel_function為實現各環節的核函數。此外,在GPU端還需要聲明一些 __device__ 類型的函數用于實現核函數的子過程。
通過對H.264視頻編碼各個關鍵模塊的CUDA實現,基本建立起一個基于CUDA編程模型的H.264標準并行框架,下面通過具體的實驗來分析,基于CUDA的H.264并行框架在具體的編碼過程中的編碼速度與普通的CPU編碼速度相比所產生的加速效果。
3 實驗分析
應用基于CUDA的H.264視頻編碼并行框架進行程序實現與實驗測試,在JVT提供的JM16.1參考軟件做測試平臺下,對三個不同分辨率大小的視頻序列suzie_qcif 176×144,news_cif 352×288,soccer 704×576測試進行測試:各測試序列取50幀,搜索范圍為16×16,運動估計采用全搜索算法,參考幀數量為3幀。視頻編碼的各個模塊在CPU和GPU上分別運行的整個編碼時間如表2(時間單位為秒)所示。
實驗可知,對不同分辨率大小的視頻序列進行視頻編碼過程,在GPU上運行的時間比CPU明顯降低,各個分辨率大小的加速比為兩倍左右,充分體現了GPU強大的并行計算能力,但是由于各個模塊之間的參數需要來回拷貝,花費大量的時間,從而整體加速比CPU的編碼速度只提高了兩倍左右;從分辨率大小為176×144、352×288、704×576的加速比來看,其加速比例一直在提升,可見在一定范圍內,數據越密集,數據量越大,越有利于CUDA的加速。
4 結論
系統地分析H.264編碼器各模塊的編碼性能及復雜性,對H.264視頻編碼的各個關鍵模塊進行CUDA實現:幀內預測使用原始像素代替重構像素來預測當前塊的像素值以便達到塊級之間并行;幀間預測則通過改進原有的塊內并行方法,使用基于宏塊之間的并行實現;然后通過優化的整數DCT變換采用宏塊之間并行實現對殘差數據的變換及量化;最后對量化后的系數矩陣完成Zigzag排序與熵編碼。基本建立了一個基于CUDA的H.264視頻編碼并行框架。并用程序實現前面研究的并行模塊,在CPU和GPU上測試不同分辨率的視頻序列,對整個編碼時間進行比較。通過實驗結果的分析得出結論,基于CUDA的H.264視頻編碼并行框架的編碼過程與普通的CPU編碼相比有兩倍左右的加速效果。
參考文獻:
[1] 畢厚杰.新一代視頻壓縮編碼標準[M].北京:人民郵電出版社,2005:105-289.
[2] 張舒,褚艷利.GPU高性能運算之CUDA[M].北京:中國水利水電出版社,2009:2-141.