吳 杰,張文軍,高志勇,張小云
(上海交通大學(xué) 圖像通信與網(wǎng)絡(luò)工程研究所,上海 200240)
AVS是我國具備自主知識產(chǎn)權(quán)的第二代信源編碼標(biāo)準(zhǔn),其第二部分為視頻部分,在2006年經(jīng)信息產(chǎn)業(yè)部批準(zhǔn)正式成為國家標(biāo)準(zhǔn)[1]。AVS目前正處于大規(guī)模產(chǎn)業(yè)化的推廣期,因此研究AVS在眾核平臺下的并行解碼有著重要的意義。
AVS標(biāo)準(zhǔn)的視頻部分與MPEG-2以及H.264類似,也采用了基于塊匹配的編碼框架[2]。相對于MPEG-2標(biāo)準(zhǔn),AVS同H.264都采用了更加復(fù)雜的運(yùn)動估計等技術(shù),使得復(fù)雜度大幅增加,經(jīng)過優(yōu)化在主頻有限的單核處理器上也難以實現(xiàn)高清視頻(1 080p)的實時(25 f/s或更高)解碼[3]。
多核以及眾核處理器的發(fā)展以及并行計算為高清視頻碼流的實時解碼提供了一種可行的解決方案,設(shè)計良好的并行解碼器能達(dá)到接近線性的并行加速比。本文提出并實現(xiàn)了一種采用功能與數(shù)據(jù)混合并行的高清實時AVS并行解碼器,并在Tilera公司的Tile-Gx36平臺[4]上開發(fā)實現(xiàn),可用6個核實現(xiàn)1路高清AVS碼流的解碼。
AVS的視頻標(biāo)準(zhǔn)也采用了基于塊匹配的混合編碼框架,AVS解碼器的實現(xiàn)流程如圖1所示。
圖1 AVS解碼器流程圖
解碼器先對讀入的AVS碼流進(jìn)行碼流解析和熵解碼,得到殘差系數(shù)等信息,再經(jīng)過一系列運(yùn)算可以到殘差值,然后再根據(jù)編碼模式的不同選擇不同的預(yù)測方式進(jìn)行預(yù)測運(yùn)算,再經(jīng)過重建即可得到重建圖像。解碼得到的I幀、P幀可以作為參考幀。
利用多核處理器實現(xiàn)任務(wù)的并行,一般有兩種常見的方法,一種是功能并行,一種是數(shù)據(jù)并行[5]。功能并行的基礎(chǔ)是流水線模型,可以將要實現(xiàn)的功能拆分成多個功能模塊,通過流水線并行就可以實現(xiàn)功能上的并行。功能并行本質(zhì)上是利用時間上的并行性來實現(xiàn)并行加速的作用。AVS解碼器可以分為VLD和IQ/IDCT,幀內(nèi)預(yù)測、MV預(yù)測以及濾波等??梢詫@些功能模塊進(jìn)行劃分,然后再利用多核處理器的并行性來并行處理這些功能模塊。
數(shù)據(jù)并行是將要處理的數(shù)據(jù)進(jìn)行劃分,將劃分的數(shù)據(jù)交給不同的核處理,由此實現(xiàn)數(shù)據(jù)處理上的并行。對于AVS碼流,每一幀的數(shù)據(jù)可以劃分為多個Slice,每一個Slice可以由多個宏塊行組成,本文AVS并行解碼器的設(shè)計采用基于宏塊行的并行。
功能并行時,多個核之間需要進(jìn)行數(shù)據(jù)通信,因此會引入通信負(fù)載。而且功能并行時只有各個功能模塊耗時接近時才能有更好的并行加速比。數(shù)據(jù)并行時數(shù)據(jù)之間存在依賴性關(guān)系,如果數(shù)據(jù)依賴性差,則CPU將會有很多的時間處于空閑等待狀態(tài),并行效率就會下降,所以進(jìn)行數(shù)據(jù)并行時必須考慮劃分?jǐn)?shù)據(jù)模塊的依賴性。
本文提出的是一種數(shù)據(jù)并行和功能并行相結(jié)合的混合模型來實現(xiàn)AVS并行解碼器的設(shè)計。AVS解碼器中熵解碼與其他功能模塊是串行執(zhí)行的,按照這個思路可以將AVS解碼器劃分為兩大模塊,即VLD模塊以及并行解碼模塊。VLD模塊和功能解碼模塊之間符合流水線并行的方式,通過這種機(jī)制可以實現(xiàn)功能上的并行。在并行解碼模塊中多個核處理劃分后的數(shù)據(jù),由此實現(xiàn)數(shù)據(jù)上的并行。
AVS并行解碼器框圖如圖2所示,主線程負(fù)責(zé)熵解碼創(chuàng)建解碼任務(wù),多個線程進(jìn)行并行解碼。
圖2 AVS并行解碼混合模型框圖
本文采用任務(wù)池模型實現(xiàn)子任務(wù)的調(diào)度,任務(wù)池模型通常都是由主線程和工作線程組組成。主線程負(fù)責(zé)創(chuàng)建任務(wù)添加到任務(wù)池中,工作線程組從任務(wù)池中獲取任務(wù)并執(zhí)行,當(dāng)工作線程執(zhí)行完當(dāng)前任務(wù)后,立即去任務(wù)池中獲取任務(wù)再執(zhí)行,直到任務(wù)池為空。采用任務(wù)池模型的動態(tài)分配方案能夠減少核處于等待的時間,提高并行處理的效率。
本文采用任務(wù)池模型的調(diào)度機(jī)制實現(xiàn)AVS并行解碼器。在任務(wù)池模型中,為了高效率地實現(xiàn)并行,需要滿足以下兩個條件:1)任務(wù)池中有足夠多的任務(wù);2)任務(wù)池中的任務(wù)具備弱依賴性[6]。如果任務(wù)池中沒有足夠的任務(wù),工作線程組中將會有線程處于等待狀態(tài);如果任務(wù)池中的任務(wù)依賴性過強(qiáng),則這些任務(wù)只能按順序執(zhí)行。所以進(jìn)行任務(wù)劃分時顆粒度必須合理。在AVS并行解碼器的實現(xiàn)過程中,采用了幀間并行和幀內(nèi)宏塊行并行,以保證并行解碼器的效率。
3.3.1 AVS并行解碼器實現(xiàn)架構(gòu)
整個AVS并行解碼器的實現(xiàn)架構(gòu)由主線程和工作線程組兩個部分組成。并行AVS解碼器的實現(xiàn)架構(gòu)如圖3所示,主線程負(fù)責(zé)解析輸入碼流,熵解碼,創(chuàng)建宏塊行為單位的解碼重建任務(wù)并添加到任務(wù)池中。工作線程從任務(wù)池中取出一個任務(wù)做解碼重建,工作流程如下:1)幀間預(yù)測亮度宏塊重建;2)幀內(nèi)預(yù)測亮度宏塊重建;3)亮度宏塊BS值計算及環(huán)路濾波;4)幀間預(yù)測色度宏塊重建;5)幀內(nèi)預(yù)測色度宏塊重建;6)色度宏塊環(huán)路濾波。
圖3 并行AVS解碼器實現(xiàn)架構(gòu)
3.3.2 幀間并行和宏塊行并行
如圖2所示,本文設(shè)計的AVS并行解碼器采用了功能并行和數(shù)據(jù)并行混合的模型,如果只用1個主線程進(jìn)行熵解碼,隨著工作線程的增加,解碼任務(wù)不足,處于休閑等待的線程數(shù)增加,并行加速比就會降低。為了解決上述問題,引入幀間并行機(jī)制來創(chuàng)建更多的解碼任務(wù)提供給工作線程組執(zhí)行。在并行解碼模塊的設(shè)計中,如果一個線程完成一幀所有后續(xù)數(shù)據(jù)的解碼,任務(wù)顆粒度仍然較大,隨著工作線程的增加,容易出現(xiàn)線程等待任務(wù)的情況,為此需要進(jìn)行更小的顆粒度劃分,本文設(shè)計的AVS解碼器采用了宏塊行并行的機(jī)制。根據(jù)解碼的工作流程,采用了3行宏塊并行的任務(wù)劃分機(jī)制,考慮亮度和色度宏塊,則一共可以同時處理6行宏塊,如圖4所示。Mb_y行宏塊進(jìn)行幀間宏塊的重建時,其上一行Mb_y-1行宏塊已經(jīng)完成幀間宏塊的重建,正在進(jìn)行幀內(nèi)宏塊的重建,而Mb_y-2行則已經(jīng)完成幀間宏塊重建和幀內(nèi)宏塊重建,正在進(jìn)行去塊濾波。
圖4 宏塊行并行框圖
對于AVS-P2視頻解碼器而言,反量化、反變換以及插值模塊消耗的大多數(shù)時間,為了實現(xiàn)高清實時解碼,除了充分利用多核的并行性外,還需要利用處理器提供的單指令多數(shù)據(jù)(SIMD)指令集進(jìn)行計算的優(yōu)化。
Tile-Gx36是美國Tilera公司2012年發(fā)布的眾核處理器,它是由36個核組成的,每個核的頻率是1.2 GHz。核間的通信主要是通過核間互聯(lián)網(wǎng)絡(luò)imesh完成。Tilera提供的SIMD指令集能完成16位和8位的SIMD操作。Tilera的寄存器寬度為64位,所以可以同時處理4個16位的運(yùn)算或者8個8位的運(yùn)算。
AVS反量化表64個整數(shù)均大于32 768,只可用無符號16位表達(dá),最高位均為1。而Tilera公司提供的SIMD指令集僅支持有符號16位的乘法運(yùn)算,為了使用Tilera公司提供的乘法指令,將反量化表中的每個數(shù)減去32 768,用有符號位表示。對反量化公式做如下修正
1個像素塊的殘差一般是用8位表示的,AVS變換矩陣的系數(shù)值較大,如果用8位來表示,變換計算的中間結(jié)果可能會發(fā)生溢出,所以在進(jìn)行中間運(yùn)算的時候需要進(jìn)行數(shù)據(jù)擴(kuò)展,第一次運(yùn)算將數(shù)據(jù)由8位擴(kuò)展到16位,第二次運(yùn)算將數(shù)據(jù)由16位擴(kuò)展到32位,最后將輸出結(jié)果壓縮為16位的整型數(shù)據(jù)。Tilera提供的SIMD指令集提供了相應(yīng)的數(shù)據(jù)位擴(kuò)展和壓縮指令。
AVS解碼器與H.264的樣本插值不同,采用的是4抽頭濾波器進(jìn)行樣本插值。從AVS的插值流程能夠看出,對于類似同位置的像素點,進(jìn)行的運(yùn)算相同,因此可以利用SIMD指令并行處理??紤]到并行處理過程中會發(fā)生數(shù)據(jù)位溢出,需要將8位擴(kuò)展為16位整型數(shù)據(jù)進(jìn)行計算。AVS參考軟件采用了大量的循環(huán)來計算每個分像素的值,執(zhí)行這些循環(huán)會引來額外的負(fù)載。利用SIMD指令除了可以并行處理數(shù)據(jù)提高速度外,還很大程度地減少了循環(huán)次數(shù),極大地提高了運(yùn)行速度。
實驗采用的測試碼流為用AVS參考軟件rm52j編碼的1 080p碼流,編碼方式為IBBP,碼率為10 Mbit/s。未做任何優(yōu)化前,單核解碼速度為2.9 f/s,經(jīng)過優(yōu)化后單核解碼速度為6.1 f/s。采用5幀并行以及宏塊行并行,解碼速度與核數(shù)之間的關(guān)系如圖5所示。采用幀級并行和宏塊行并行的情況下6個核可以實現(xiàn)30 f/s的解碼速度,達(dá)到高清實時的解碼。
從圖5中可以看出,當(dāng)核數(shù)小于15時,有著接近線性的并行加速比,核數(shù)再增加,解碼速度不會繼續(xù)增加。這是由于主線程創(chuàng)建的解碼任務(wù)有限,隨著核數(shù)的增加,核間通信的負(fù)載增加,處理器實際解碼的時間減少。
本文設(shè)計并在Tile-Gx36平臺上實現(xiàn)了AVS高清實時并行解碼器,并行機(jī)制采用了幀級并行和宏塊行并行的二級混合并行機(jī)制,調(diào)度方式采用了基于任務(wù)池的調(diào)度策略。實驗表明,本設(shè)計有著良好的并行加速比,對于10 Mbit/s的1 080p的AVS碼流,6個核可以實現(xiàn)實時解碼。因此,1片Tile-Gx36可以實現(xiàn)6路AVS高清碼流的實時解碼。
:
[1]GB/T20090.2—2006,信息技術(shù)先進(jìn)音視頻編碼第2部分:視頻[S].2006.
[2]黃鐵軍,高文.AVS標(biāo)準(zhǔn)制定背景與知識產(chǎn)權(quán)狀況[J].電視技術(shù),2005,29(14):4-7.
[3]牛旭寧,張遠(yuǎn),馬思偉,等.AVS解碼器復(fù)雜度分析[J].計算機(jī)應(yīng)用與軟件,2010,27(5):67-70.
[4]Tilera[EB/OL].[2013-10-20].http://www.tilera.com.
[5]葉朝敏,陳穎琪,高志勇.基于多核處理器的高清實時MPEG-2—H.264轉(zhuǎn)碼器設(shè)計[J].電視技術(shù),2012,36(21):15-19.
[6]田韜,李鵬,張悠慧.H.264并行解碼的設(shè)計與實現(xiàn)[J].微計算機(jī)信息,2008(14):114-115.
作者簡介:吳 杰(1990—),碩士生,主研視頻編解碼;
張文軍(1963—),博士生導(dǎo)師,主要研究方向為圖象通信與多媒體技術(shù)、高清晰度電視等;
高志勇(1957—),博士生導(dǎo)師,主要研究方向為高速視頻圖像處理、數(shù)字電視等;
張小云(1977—),碩士生導(dǎo)師,主要研究方向為視頻編解碼、高速視頻處理等。
責(zé)任編輯:時 雯 收稿日期:2013-11-14