趙 靜,蔣 林,朱 筠,謝曉燕,楊 坤,崔馨月
(1.西安郵電大學(xué) 電子工程學(xué)院,陜西 西安 710121;2.西安科技大學(xué) 安全科學(xué)與工程學(xué)院,陜西 西安 710600;3.西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 710121)
為適應(yīng)不同高級(jí)應(yīng)用場(chǎng)景下的視頻編碼需求,新一代高效視頻編碼(high efficiency video coding,HEVC)標(biāo)準(zhǔn)引入了諸多新技術(shù),來提高編碼效率[1]。但是,分辨率和壓縮性能的提升伴隨著計(jì)算復(fù)雜性和編碼時(shí)間的急劇增加,這對(duì)高清視頻的實(shí)時(shí)處理提出了巨大的挑戰(zhàn),在保證視頻圖像質(zhì)量的前提下如何節(jié)省編碼時(shí)間成為學(xué)者們的研究熱點(diǎn)[2,3]。
硬件解決方案因其高性能、低功耗等優(yōu)點(diǎn)成為實(shí)現(xiàn)HEVC編碼器的主流趨勢(shì),主要包括3 種類型:第1 種是中央處理器(CPU)/圖像處理器(graphic processing unit,GPU)架構(gòu)[4],將部分高計(jì)算強(qiáng)度負(fù)載轉(zhuǎn)移到GPU上,但其大多數(shù)難以實(shí)現(xiàn)細(xì)粒度的并行,無法滿足逐漸嚴(yán)苛的編碼時(shí)間需求;第2種是在專用集成電路和現(xiàn)場(chǎng)可編程門陣列(field programmable gate array,F(xiàn)PGA)中實(shí)現(xiàn)[5,6],雖然可以解決計(jì)算效率低的問題,但應(yīng)用發(fā)生變化時(shí),需要重新設(shè)計(jì)電路,靈活性較差;第3種是基于可重構(gòu)陣列處理器的解決方案[7],F(xiàn)PGA是一種細(xì)粒度的可重構(gòu)器件,雖然在設(shè)計(jì)時(shí)不可避免地受到可用資源和頻率的限制,但可重構(gòu)陣列處理器可以根據(jù)視頻圖像不同的需求,對(duì)處理單元邏輯功能和連接方式進(jìn)行靈活配置,具有較好的靈活性和擴(kuò)展性。
面對(duì)海量像素?cái)?shù)據(jù)、高復(fù)雜度視頻編碼算法和苛刻的實(shí)時(shí)性要求,除了具有性能優(yōu)越的硬件配置之外,基于硬件資源協(xié)調(diào)分配的并行優(yōu)化算法設(shè)計(jì)也很重要。文獻(xiàn)[6]的優(yōu)化算法極大地提高了吞吐量,然而,高復(fù)雜性的優(yōu)化算法引入了13%的編碼開銷,優(yōu)化代價(jià)較大。文獻(xiàn)[7~9]重點(diǎn)針對(duì)編碼器內(nèi)的單個(gè)算法進(jìn)行優(yōu)化,實(shí)現(xiàn)編碼速度或圖像質(zhì)量的提升。但這些大多數(shù)都是針對(duì)局部算法的優(yōu)化,性能提升效果有限。
本文引入軟件流水線思想,提出一種基于可重構(gòu)陣列處理器的HEVC算法流水線并行實(shí)現(xiàn)方案。將所有編碼塊級(jí)的子任務(wù)組織成流水線的形式,將其并行映射在不同處理單元簇上,并進(jìn)行全局的流水線并行化設(shè)計(jì),使得編碼塊可以同時(shí)被處理,從而減少硬件的等待時(shí)間。該方法在不引入其他額外硬件開銷、不降低視頻圖像質(zhì)量的同時(shí),實(shí)現(xiàn)編碼效率提升66%。
項(xiàng)目組前期研發(fā)的可重構(gòu)陣列處理器結(jié)構(gòu)如圖1 所示[10,11]。每個(gè)處理單元組(processing element group,PEG)由4 ×4的輕核處理單元(processing element,PE)陣列、存儲(chǔ)單元和高速交換開關(guān)構(gòu)成。全局控制器利用H-tree傳輸網(wǎng)絡(luò)向PE陣列下發(fā)配置信息,對(duì)計(jì)算資源進(jìn)行管理和控制。數(shù)據(jù)輸入存儲(chǔ)器(data input memory,DIM)和數(shù)據(jù)輸出存儲(chǔ)器(data output memory,DOM)用來存放待編碼視頻圖像的原始數(shù)據(jù)和處理結(jié)果。
可重構(gòu)陣列處理器中豐富的計(jì)算資源為視頻編碼提供了強(qiáng)大的算力,可重構(gòu)配置的計(jì)算系統(tǒng)使用靈活的高速計(jì)算結(jié)構(gòu)來執(zhí)行并行處理,以適應(yīng)視頻算法的多樣性,有效提高HEVC編碼器計(jì)算效率。
HEVC映射方案包含幀內(nèi)環(huán)路和幀間環(huán)路,每個(gè)算法映射在不同的PEG上,如圖2 所示。幀內(nèi)預(yù)測(cè)算法從DIM中讀取原始數(shù)據(jù),將計(jì)算得到的殘差值作為輸出傳遞給離散余弦變換(discrete cosine transform,DCT)算法,并將最優(yōu)預(yù)測(cè)值傳遞給求和模塊,去塊(deblocking,DB)濾波算法將編碼塊處理結(jié)果存入DOM。幀間環(huán)路主要包含整數(shù)運(yùn)動(dòng)估計(jì)(integer motion estimation,IME)、運(yùn)動(dòng)補(bǔ)償(motion compensation,MC)、DCT算法、求和模塊和DB算法。
圖2 HEVC映射方案
各編碼算法具有不同的數(shù)據(jù)流特性,結(jié)合可重構(gòu)陣列處理器分析不同算法的并行加速方案如下:
1)幀內(nèi)預(yù)測(cè)算法:各種預(yù)測(cè)模式的計(jì)算過程相互獨(dú)立,將其映射在不同的PE上,采取多種預(yù)測(cè)模式并行處理的加速方案。
2)DCT算法:主要包含變換、量化、反量化和反變換這4個(gè)步驟,每個(gè)步驟映射在不同的PE 上,則至少需要4 個(gè)PE來共同完成。1個(gè)PEG共有16個(gè)PE,因此,將輸入數(shù)據(jù)流劃分為4組,采取4路并行的方式。
3)DB濾波算法:DB 濾波算法需將像素塊劃分為2 部分,分別進(jìn)行濾波操作,且濾波過程中無數(shù)據(jù)依賴關(guān)系,采取2路并行的方式可以使得這2部分像素同時(shí)進(jìn)行處理。
4)MC算法:各像素點(diǎn)的插值計(jì)算過程相互獨(dú)立,因此,將輸入數(shù)據(jù)分發(fā)到不同PE中,同一時(shí)間進(jìn)行多個(gè)像素點(diǎn)的插值計(jì)算。
5)IME算法:IME中進(jìn)行4個(gè)參考?jí)K的SAD值計(jì)算,其計(jì)算過程相互獨(dú)立,可以采取4路并行的方式加速計(jì)算。
在非流水線編碼方式下,只有將該編碼塊的處理結(jié)果存入DOM并產(chǎn)生復(fù)位信號(hào)后,才可以開始處理下一編碼塊。因此,每個(gè)PEG有超過1/2的時(shí)間處于等待狀態(tài),沒有充分發(fā)揮PEG可獨(dú)立并行運(yùn)行的優(yōu)勢(shì),存在硬件資源浪費(fèi)問題,過長(zhǎng)的等待時(shí)間也極大限制了HEVC效率。
軟件流水線技術(shù)將編碼塊處理過程劃分為不同的階段,每個(gè)階段對(duì)應(yīng)不同的執(zhí)行單元,各執(zhí)行單元并行工作的方式增大子任務(wù)的吞吐量,從而縮短完成總?cè)蝿?wù)所需要的時(shí)間?;诳芍貥?gòu)陣列處理器的HEVC視頻編碼器具有分簇執(zhí)行的特點(diǎn),即不同算法對(duì)應(yīng)不同的PEG,具備流水線并行化的基本條件。假設(shè)編碼一幀圖像是總?cè)蝿?wù),則每個(gè)編碼塊的處理過程可以看作是不同的子任務(wù)。
幀內(nèi)和幀間環(huán)路的流水級(jí)設(shè)計(jì)如表1 所示。HEVC編碼器在每個(gè)流水線周期均讀取一個(gè)新的編碼塊并開始它的處理流程。流水線周期,即編碼塊沿流水線移動(dòng)的時(shí)間間隔,取決于運(yùn)行時(shí)間最長(zhǎng)的算法。當(dāng)流水線處于滿載狀態(tài)時(shí),PE利用率最高,相較于之前同一時(shí)間周期內(nèi)只能處理1個(gè)編碼塊,流水線編碼器的幀內(nèi)環(huán)路可以同時(shí)處理4個(gè)編碼塊;幀間環(huán)路可以同時(shí)處理5個(gè)編碼塊。
表1 HEVC的流水段劃分
流水線的正常工作要求各執(zhí)行單元必須具有自動(dòng)循環(huán)處理子任務(wù)的能力,即每個(gè)算法模塊完成一個(gè)編碼塊處理結(jié)果的傳輸之后,程序自動(dòng)跳轉(zhuǎn)到頭部重新開始執(zhí)行,進(jìn)行下一個(gè)編碼塊的處理。
以DCT算法為例,其在PE 陣列上的并行映射結(jié)果如圖3 所示,PE00 將編碼塊的像素分為4 組并分別發(fā)送到PE10、PE20和PE30,每組4 個(gè)橫向PE 間采用鄰接互聯(lián)的數(shù)據(jù)傳遞方式完成處理流程,最后由PE03將處理結(jié)果傳輸給下一個(gè)模塊。此時(shí),PE03在其本地存儲(chǔ)器的510 號(hào)地址存儲(chǔ)1個(gè)數(shù)字作為結(jié)束標(biāo)志,該簇中的其他PE運(yùn)行結(jié)束后循環(huán)檢測(cè)該標(biāo)志,若能檢測(cè)到則跳轉(zhuǎn)到程序首行,開始下一編碼塊的處理;若沒有檢測(cè)到則繼續(xù)等待,直到檢測(cè)成功。
圖3 DCT算法在PEG11 上的并行映射
HEVC流水線的調(diào)度過程如圖4 所示,當(dāng)前PEG 在向下一級(jí)算法所在的PEG傳遞處理結(jié)果前,需要確保其處于空閑狀態(tài)。算法運(yùn)行結(jié)束時(shí)在特定的地址空間存儲(chǔ)一個(gè)數(shù)字作為握手信號(hào),其他算法通過檢測(cè)該握手信號(hào)是否存在來判斷該算法的運(yùn)行狀態(tài)。當(dāng)握手成功時(shí),代表算法處于空閑狀態(tài),此時(shí)可以向其PE傳輸數(shù)據(jù)。各流水段算法在首次執(zhí)行時(shí),其對(duì)應(yīng)的處理元簇必定為空閑狀態(tài),故不需要檢測(cè)握手信號(hào),可直接開始執(zhí)行。
圖4 流水線調(diào)度過程
由于環(huán)路的數(shù)據(jù)流向在幀內(nèi)預(yù)測(cè)算法處存在分支,而同一PEG內(nèi)存儲(chǔ)空間不能在同一流水線周期內(nèi)重復(fù)使用,否則最后存入的數(shù)據(jù)會(huì)覆蓋掉先前存儲(chǔ)的數(shù)據(jù),從而導(dǎo)致流水線在求和模塊產(chǎn)生數(shù)據(jù)沖突。
為了解決這個(gè)問題,采用輪詢存儲(chǔ)方法,將可能產(chǎn)生沖突的數(shù)據(jù)按標(biāo)簽分開存儲(chǔ),不同的標(biāo)簽對(duì)應(yīng)不同的編碼塊和存儲(chǔ)位置,編碼塊循環(huán)存儲(chǔ)在不同的空間。在幀內(nèi)環(huán)路中,求和模塊處于流水線的第三級(jí),因此,該算法所在的PEG01內(nèi)最多可能存儲(chǔ)3 個(gè)編碼塊的最優(yōu)預(yù)測(cè)數(shù)據(jù),所以設(shè)置3個(gè)標(biāo)簽,從而避免了流水線設(shè)計(jì)引起的數(shù)據(jù)沖突。
為了檢驗(yàn)本文提出方案的正確性和可行性,基于可重構(gòu)陣列處理器進(jìn)行仿真驗(yàn)證。首先,使用仿真軟件將測(cè)試數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制的形式存入DIM 中,并將指令通過平臺(tái)專用的翻譯器轉(zhuǎn)換為陣列處理器可以識(shí)別的二進(jìn)制指令,存入對(duì)應(yīng)PE陣列的指令存儲(chǔ)器中,完成初始化工作。然后使用基于標(biāo)準(zhǔn)的驗(yàn)證軟件進(jìn)行仿真驗(yàn)證,Xilinx 公司的ISE14.7 開發(fā)環(huán)境進(jìn)行綜合,選用BEE4 系列開發(fā)板XC6VLX550T進(jìn)行FPGA 測(cè)試[12]。實(shí)驗(yàn)表明,編碼器的工作頻率為153.6 MHz,電路規(guī)模為164553Flip—flops,測(cè)試結(jié)果如圖5所示,其中,圖5(a)~(c)為幀內(nèi)環(huán)路的測(cè)試結(jié)果,圖5(d)~(f)為幀間環(huán)路的測(cè)試結(jié)果,均具有良好的可視效果。
圖5 測(cè)試結(jié)果
為了驗(yàn)證所提方案適用于各種不同類型的視頻圖像,選取不同類別的標(biāo)準(zhǔn)測(cè)試序列進(jìn)行編碼測(cè)試,表2 為改進(jìn)前后方案的性能比較。加速比S為改進(jìn)前后執(zhí)行時(shí)間的比率,衡量并行化的性能效果,計(jì)算如式(1)所示,T1和Tn分別為流水線并行前和并行后的處理器運(yùn)行時(shí)間
表2 改進(jìn)前后性能對(duì)比
結(jié)果顯示,流水線并行方案的平均加速比約2.92,圖像的編碼時(shí)間比改進(jìn)之前平均減少了66%,節(jié)省了大量的編碼時(shí)間,編碼器性能得到明顯提升。
本文基于可重構(gòu)陣列處理器的HEVC編碼器充分利用了編碼單元內(nèi)細(xì)粒度并行性和可重構(gòu)特性,同時(shí)引入流水線設(shè)計(jì),獲得了較高的加速比。文獻(xiàn)[13]通過設(shè)計(jì)模式?jīng)Q策的并行架構(gòu)實(shí)現(xiàn)編碼器加速,雖然硬件開銷很小,但其編碼時(shí)間相比本文較長(zhǎng)。圖6為本文方案與文獻(xiàn)[13]的方案對(duì)不同分辨率視頻圖像的處理時(shí)間,灰色折線代表的是加速比??梢钥闯?,本文方案相對(duì)于文獻(xiàn)[13]獲得了普遍的加速,對(duì)高清視頻圖像的處理時(shí)間節(jié)約了18%,運(yùn)行時(shí)間整體較短,并且受分辨率影響較小。
圖6 處理速度的比較
峰值信噪比(peak signal to noise ratio,PSNR)和結(jié)構(gòu)相似性(structural similarity,SSIM)是2 種常用的評(píng)估視頻圖像質(zhì)量的指標(biāo)。選取5組測(cè)試序列,在全I(xiàn)幀配置下進(jìn)行測(cè)試,結(jié)果如表3所示,平均SSIM值為0.994 1;與HM16.8 相比,PSNR值平均增加了0.021 9 dB,基本保持不變。結(jié)果表明,本文方案在編碼時(shí)間得到提高的同時(shí),視頻圖像質(zhì)量也得到了保證。
表3 與HM16.8 的視頻圖像質(zhì)量對(duì)比
本文分析HEVC算法的數(shù)據(jù)相關(guān)性,結(jié)合可重構(gòu)陣列處理器的工作特性,對(duì)不同處理元簇上的編碼算法進(jìn)行自動(dòng)循環(huán)設(shè)計(jì),并基于握手機(jī)制設(shè)計(jì)流水線調(diào)度方式,實(shí)現(xiàn)了HEVC流水線并行化映射。此外,采用輪詢存儲(chǔ)方法避免了圖像重建模塊的數(shù)據(jù)沖突。該方案在FPGA平臺(tái)上的工作頻率可達(dá)153.6 MHz,對(duì)比改進(jìn)前方案的執(zhí)行時(shí)間減少了約66%。在保證視頻圖像質(zhì)量不降低和不消耗更多硬件資源的前提下,實(shí)現(xiàn)了視頻編碼速度的提升。