崔馨月,蔣 林,楊 坤,惠 超,胡傳瞻,趙 靜
(1.西安郵電大學電子工程學院,陜西 西安 710121;2.西安科技大學集成電路實驗室,陜西 西安 710054;3.西安郵電大學計算機學院,陜西 西安 710121)
高效視頻編碼HEVC(High Efficiency Video Coding)是當前互聯網技術飛速發展背景下的產物。編解碼算法具有數據量大、復雜度高的特點,有著良好的應用前景。
可重構陣列處理器在兼顧通用處理器的靈活性和專用硬件高性能特性的同時,又具有較好的能量效率和面積效率,因而受到了廣泛關注[1]。HEVC在專用硬件上的實現遠沒有在可重構陣列處理器上實現的靈活性高。
以幀內預測算法為例,利用相鄰預測單元PU(Prediction Unit)中已編碼的像素來預測新的編碼單元CU(Coding Unit)中的像素,去除空間冗余信息。使用專用硬件實現幀內預測算法主要是針對固定編碼塊大小或者1種固定模式,無法根據不同應用場景的需求實現不同算法的切換。文獻[2]采用了近似角度預測的幀內預測技術,并且設計了近似角度預測的硬件架構,減小了硬件面積,但是編碼時間較長且效率不高。文獻[3]為HEVC幀內預測提供了一種絕對誤差和SAD(Sum of Absolute Difference)單元硬件體系結構,但此結構會降低預測計算的精確度和編碼效率。文獻[4]提出了一種基于梯度的幀內預測硬件加速算法,省去了預測模式和劃分深度的選擇,減小了計算量,節省了編碼時間。但是,僅支持CU大小為16×16的算法實現,并且只選擇1種預測模式計算,固定塊大小的預測方式降低了編碼效率,單一的運算模式降低了幀內預測算法的準確性。文獻[5]提出了像素相似性的計算方法,減少了幀內預測算法執行的計算量和硬件的能量消耗。使用5個并行的數據路徑來分別計算1個8×8的CU塊和4個4×4的CU塊的預測方程,每條路徑都需要進行35種預測模式的計算,硬件結構固定且計算周期長。文獻[6]采用新的預測單元處理順序,基于16點的硬件復用結構,4種預測模式并行處理,預測準確性不高。
為了充分提高資源利用率,減小幀內預測算法在硬件實現上的資源消耗,本文提出一種幀內預測算法在可重構陣列處理器上的動態自重構實現方法,對處理單元PE(Processing Element)的執行狀態進行監測,實現幀內預測算法在不同應用場景間的動態自重構。
幀內預測算法的模式重構指的是根據不同應用場景,靈活切換所需的預測模式。在高清視頻傳輸應用場景下,對編碼質量與編碼速度有較高要求,為了得到較高的編碼質量需要全部遍歷幀內預測的35種預測模式,若對此35種預測模式在硬件上串行實現,則計算時間長且編碼速度低,因此,需要提出一種可并行計算方案;在移動視頻傳輸的應用場景下,需要降低硬件資源消耗及功率消耗,就要求在保證編碼質量的前提下減少硬件資源的使用,但是,35種預測模式并行計算會造成很大的資源消耗。如果滿足單一的應用場景需求,在專用硬件上實現幀內預測算法是有效的,但是當應用場景切換時,專用硬件無法同時滿足其需求,因此需要一種幀內預測算法的動態自重構的硬件實現方法,可以在應用場景切換時實現算法不同模式間的動態自重構。
通過分析幀內預測每種模式的計算過程可知,平面模式(Planar)和直流模式(DC)計算過程單一,33種角度模式占總預測模式的很大部分。雖然預測模式較多,但是其計算過程相對固定,確定每種模式的偏移量offset以后,就可以確定參考像素矩陣Ref的位置,之后所進行的操作完全相同。因此,可以通過重新配置offset值實現35種預測模式的重構計算。從硬件實現角度分析,整個可重構處理器結構通過PE執行狀態監測器對PE當前執行狀態進行監測,再由H-tree型傳輸網絡實現對PE陣列上任意PE配置信息的下發。所以,通過下發不同預測模式映射方案的配置信息,可以實現同一塊大小不同預測模式在陣列上的動態重構。此外,隨著CU塊大小(N值)改變,只是參考像素矩陣Ref的大小和數值隨之變化,處理過程不變。因此,在實現不同預測模式的靈活切換時,同時也支持不同預測塊大小的像素計算在硬件上的實現。
陣列結構的分布是規則的,但是幀內預測算法在陣列中的映射方案是非規則的,這導致部分PE未被分配執行任務而處于空閑狀態,同時又有部分PE執行完分配的任務后處于等待狀態,造成陣列計算資源在時間上的浪費。為了有效提升整個陣列的資源利用率,在執行幀內預測算法映射任務時需要對陣列的執行狀態做出判斷。因此,本文在每個PE中加入了執行狀態監測器,建立了一種基于狀態監測機制的幀內預測算法在可重構陣列上的動態自重構。
本文采用基于狀態監測的可重構視頻陣列處理器[7],如圖1所示。此處理器由可重構視頻陣列結構、輸入存儲器DIM(Data Input Memory)和輸出存儲器DOM(Data Output Memory)組成,可重構視頻陣列結構中包含主機接口、全局控制器和處理單元PE陣列。

Figure 1 Reconfigurable video array structure
全局控制器用于控制與管理陣列計算資源,是可重構機制的關鍵部分。PE陣列是整個系統的核心計算部分。圖1所示的PE陣列包括4個處理單元簇PEG(Processing Element Group),它們通過路由器進行通信,每個PEG中包含4×4個PE,每個PE中又包含指令存儲器、數據存儲器及執行狀態監測器。
含有執行狀態監測器的PE結構如圖2所示。PE執行狀態監測器實時監測可重構陣列中每個PE的執行狀態,并把狀態信息反饋給上層控制器,這是可重構陣列實現實時自重構調度的基礎。整個PE采用取指、譯碼、執行和回寫四級流水線架構。PE通過對指令的譯碼產生不同的控制信號,控制執行級完成相應的操作。因此,狀態監測主要是通過PE內的標志信號busy_flag來判斷執行單元實際是否工作,busy_flag為1,說明當前PE處于工作狀態;busy_flag為0,說明當前PE處于空閑狀態。全局控制器下發一條狀態收集指令peg_state,獲取一個PEG中各個PE的工作狀態,根據狀態收集命令發送的順序,形成一個16位的PE陣列狀態寄存器,用來存儲16個PE的執行狀態,最低位代表PE00,最高位代表PE33。通過對該寄存器中0的個數與位置的統計,可以清晰地判斷出當前時刻哪些PE處于空閑,哪些PE正在工作。

Figure 2 PE structure based on state monitoring
根據此狀態寄存器中的數值,全局控制器通過H-Tree型層次化配置網絡,將配置指令下發到下層PE陣列的每一個空閑PE中去,讓PE在有效的執行周期內一直處于工作狀態,從而實現算法在可重構陣列處理器上的靈活切換。配置指令用于實現多種模式的靈活切換和對陣列計算資源的控制與管理,從而達到合理分配資源的目的。
在幀內預測算法計算過程中,每種模式預測像素的計算過程相互獨立、互不影響,因此可以實現算法在硬件上的并行映射。以8×8的CU為例,在4×4的PE陣列結構下,結合角度模式的計算特點以及陣列結構的特征進行預測值P(x,y)的映射,其中每個PE可以完成4個預測像素P(x,y)計算的所有操作,并且x方向與y方向同時并行處理,由于像素值的計算本身不存在數據依賴關系,因此可以在PE中同時計算。每個PE中可以執行4個像素點的所有預測模式的計算,因此本文選擇4路并行計算,既保證了計算速度適中,也不會造成過多的硬件資源消耗。
圖3和圖4分別為高清應用場景下幀內預測水平類和垂直類角度模式計算在可重構陣列處理器上的并行映射圖。其中,幀內預測在PEG00中映射,PE0000與DIM通信,用來接收原始像素值,在PEG00中計算結束后由PEG00的PE0033將殘差像素值傳給PEG01的PE0130,以進行后續離散余弦變換DCT(Discrete Cosine Transform)。

Figure 3 Parallel mapping of horizontal class angle pattern

Figure 4 Parallel mapping of vertical class angle pattern
對于水平類預測模式,每行所計算的預測像素值對應的pos(參考像素在Ref中的位置)和ω(當前像素對應參考像素的加權因子)是相同的,只在每行的起始PE計算(垂直類模式同理,每列所需的pos與ω相同),每個PE中計算4個像素點的所有角度預測模式,最大化地利用PE的資源。在HM16.7軟件中對大量測試序列的CU塊劃分并進行統計,結果顯示將1幀圖像劃分為8×8的CU塊出現的概率最高[8],因此,本文主要以8×8的CU塊進行像素預測計算。首先,在PE00中從DIM內每次取出一個8×8的CU作為原始塊,和其左側、上方共33個參考像素存入PE00的數據存儲器中,整個PEG共享此存儲,其他PE計算時均從PE00的數據存儲器中讀取數據,分別計算出64個像素點在不同模式下的預測值;最后根據率失真優化算法選擇一種最優的預測模式,并將此最優模式計算出來的預測像素與原始像素作差,得到8×8的殘差矩陣傳入DCT模塊做后續處理。
3.2節中,在4×4的可重構陣列上實現了幀內預測算法的4路并行設計。但由于多個PE在訪問同一地址中的數據時有先后順序,并非所有PE同時結束任務,導致有些PE先完成計算后處于空閑狀態,造成PE資源的浪費。因此,需要一種幀內預測算法的自重構實現方法,在部分PE空閑時及時下發新的任務,實現對可重構陣列資源的充分利用。
在高清視頻傳輸應用場景下,要求編碼質量高,編碼計算過程精確,因此使用的是3.2節中幀內預測算法的并行化設計映射方案。使用陣列規模為4×4的PE,將8×8大小的CU遍歷35種預測模式,從中選擇最優預測模式,記為方案1。首先將參考像素的選取指令初始化到陣列處理器外部存儲的0~47號地址中,將35種預測模式的計算指令存到外部存儲的48~466號地址中,每個PE計算1個CU塊4個原始像素點的預測像素。
在移動視頻傳輸應用場景下,要求減小硬件資源的消耗,為了保證編碼速度,降低了對編碼質量的要求,因此使用陣列規模為1×4的PE,將8×8大小的CU遍歷5種預測模式,從中選擇最優預測模式,記為映射方案2。經過HM16.7官方軟件分別對測試序列Cactus_1920×1080、ChinaSpeed_1024×768和RaceHorses_832×480進行預測統計,圖5~圖7所示為測試出現頻率最高的7種預測模式統計結果,其中橫坐標為模式種類,縱坐標為使用該模式預測的CU塊數。同時,在3個序列的測試過程中,Planar、DC、角度模式Angular26、Angular10和Angular18出現的頻率最高,平均出現概率為92.23%。因此,本文選用該5種預測模式作為最優預測模式的備選。

Figure 5 Seven prediction models with the highest occurrence probability of Cactus
如圖8所示的映射方案2中,每個PE計算8×8 CU塊的2列共16個像素點在5種預測模式下的預測像素。其本質上與映射方案1的每行處理過程一樣,不同的是映射方案2的y值要從1遍歷到8。映射方案2中讀取數據時采用的是共享存儲,在陣列上的映射不受PE位置的影響,所以可以使用陣列上任意位置的4個PE完成該映射方案的執行。

Figure 6 Prediction models with the highest occurrence probability of ChinaSpeed

Figure 7 Prediction models with the highest occurrence probability of RaceHorses

Figure 8 Intra prediction mapping under mobile application scenarios
為了實現2種映射方案在可重構陣列上的靈活切換,首先針對1幀圖像實現2種映射方案的自重構。首先將圖像分割成若干個64×64的編碼樹單元CTU(Coding Tree Unit)進行處理,以1個CTU劃分成16個8×8的CU為例,將第1個CU配置成為方案1,即從35種預測模式中選取最優的預測模式;后續的15個CU重構成方案2,即從5種預測模式中選取最優的預測模式。計算下一個CTU時,再將第1個CU重構成方案1,以此類推,直到1幀圖像預測結束。
圖9所示為1幀圖像基于狀態監測機制的幀內預測自重構流程圖。PE陣列啟動時,每個PE內的狀態監測器同步開始工作,此時所有PE處于空閑狀態。全局控制器通過H-tree型指令傳輸網絡下發一條狀態收集指令收集當前PE的執行狀態并反饋給上層控制器,此時狀態寄存器中會顯示16位全為0。計算第1個CTU時,全局控制器首先下發方案1的配置信息,陣列中PE接收到配置信息后開始工作,進行第1個CU塊預測像素的計算。此時,PE執行狀態監測器不斷地監測PE是否處于空閑狀態,由于多個PE在訪問同一地址中的數據時有先后順序,因此,并非所有PE同時結束任務。全局控制器下發狀態收集指令,接收到反饋信號后,若狀態寄存器中出現4個0,說明有4個PE處于空閑狀態,則對這4個PE下發映射方案2的配置信息,以計算第2個CU塊的預測像素;繼續監測PE的執行狀態,再次出現4個空閑PE時,再對這4個空閑PE下發映射方案2的配置信息,計算第3個CU塊的預測像素。第1個CTU計算結束后,等待全部PE空閑,再次下發方案1來計算第2個CTU第1個CU的預測像素,以此類推,直到1幀圖像所有CTU遍歷結束后停止。

Figure 9 Flow chart of intra prediction self-reconstruction
全局控制器下發不同的配置信息實現了2種映射方案的靈活切換,當監測到空閑PE達到4個時,能夠及時下發下一CU塊所要執行的映射方案,讓PE在有效的執行周期內一直處于工作狀態,從而縮短重構時間,提升重構性能。在基于狀態監測的可重構陣列處理器上映射幀內預測算法,能夠合理利用每一個空閑PE,及時下發新的配置指令,不僅節省了計算時間,而且不會造成資源浪費。
為了驗證幀內預測算法動態自重構實現方法的可行性,本文將幀內預測模塊的自重構方案與幀內環路的其它模塊聯調,在可重構陣列處理器中進行測試。通過ModelSim仿真驗證,在XILINX公司的ISE14.7基于Virtex 6開發環境對設計進行綜合,結果如表1所示。
表1列舉了1幀圖像分別在高清場景(下文用方案1表示)、移動場景(下文用方案2表示)以及2種方案切換(自重構方案)下的各項性能指標對比,3種方案分別在4.1節和4.2節有說明。將1幀圖像分割為8×8的CU塊執行映射方案1的模式計算,花費的時鐘周期數為7 692,電路規模為32 738 Flip-flops,硬件資源的消耗高于方案2的,但是預測模式較全面。將1幀圖像分割為8×8 CU執行映射方案2的計算,所花費的時鐘周期數為5 787,相比方案1降低了24.8%,電路規模為9 084 Flip-flops,硬件資源的消耗低于方案1的。基于狀態監測機制下的自重構方案,平均每個CU塊執行的時鐘周期數為4 849,相比方案1的減少了36.9%,相比方案2減少了10.6%,硬件資源的消耗與方案1的相同。
使用多種測試序列加載到可重構陣列處理器進行幀內編碼,將編碼前后的像素值導入Matlab端計算其峰值信噪比PSNR,與HM16.7軟件下的測試結果相比較并計算ΔPSNR[9],結果如表1所示。由表1可知,3種方案相比,方案1的PSNR值最高,方案2的PSNR值低于方案1的,編碼質量較低,但仍能滿足圖像質量要求。執行自重構方案得出的PSNR值在與方案1的幾近相同的情況下,即達到幾乎相同的編碼質量條件下,執行時間減少了36.9%。
同樣地,使用本文的自重構方案重復上述步驟,將不同測試序列的PSNR值、結構相似度SSIM與HM16.7標準測試下(QP值為32)的結果相比。比較結果如表2所示,使用本文的自重構方案得出的平均PSNR值高于HM16.7軟件的0.043 dB,平均ΔPSNR值高于文獻[9]的0.106 dB,滿足圖像質量要求。
通過全局控制器下發不同應用場景的配置信息,實現本文提出的自重構方案,將幀內預測算法在可重構陣列處理器上進行映射,使用stefan_cif測試序列在BEEcube公司的BEE4系列開發板上進行FPGA測試,驗證自重構方案的正確性。將該測試序列的第1幀原始像素存入DIM中,按照4.2節提出的自重構方案,將1幀圖像以CTU為單位處理,CTU內是方案1切換至方案2,CTU間是方案2切換為方案1。將幀內預測計算后的預測像素值進行幀內環路聯調,導入Matlab恢復后的測試結果如圖10所示,可以看出測試結果具有良好的可視效果。

Table 1 Performance comparison of different schemes

Table 2 Performance indices of different test sequences

Figure 10 Test results of stefan_cif FPGA
將1幀圖像的自重構思路擴展至一個分辨率為1920×1080的視頻測試序列,第1個I幀采用方案1預測,后7個I幀采用方案2預測,以圖像為單位進行2種方案的自重構,模擬高清、移動場景的切換。測試結果表明,平均1幀圖像的編碼時間為3.56×10-2s,滿足1 080 p@30的編碼要求。
在ISE14.7基于Virtex 6開發環境下對設計進行綜合后和不同文獻的硬件參數的對比結果如表3所示。由表3可知,在相同的硬件工藝下,文獻[6]方法消耗了5 787個時鐘周期,最高主頻為196 MHz,本文使用的時鐘周期數為4 849,相比之下時鐘周期數降低了16.2%,雖然最高主頻低了20%,但是本文方法的硬件資源比其減少了33.6%,并且可以靈活切換所有的預測模式。文獻[10,11]方法的時鐘周期和頻率都優于本文方法的,且文獻[11]方法的吞吐量在高清視頻下達到每秒110幀,但是其硬件資源是本文方法的3倍以上,產生的成本過大,并且只是對幀內預測算法的固定映射。文獻[12]方法的吞吐量與本文的相近,但是最高主頻比本文方法的低了31%,這會導致編碼效率不高,并且其硬件資源的消耗比本文方法的高26%。文獻[13]方法支持4 K的視頻傳輸,硬件資源的消耗也較少,但是文獻[13]方法僅支持CU塊大小為4×4的2種預測模式的計算,通過犧牲模式種類的選擇,減少CU塊尺寸,來增加視頻編碼的精準性,計算復雜,頻率是本文方法的1/3。
本文基于狀態監測機制的可重構陣列處理器結構,針對HEVC幀內預測算法在專用硬件上實現難以達到算法靈活切換以及資源消耗過多的問題,提出了一種幀內預測算法自重構的硬件實現方法。該方法通過PE的工作狀態監測器監測PE的執行狀態,監測到空閑PE則及時下發新的配置信息,實現對陣列資源的充分利用,提高了計算效率,減少了硬件資源的使用。實驗結果表明:對于幀內預測算法的動態自重構實現方法,與文獻[6]方法在專用處理器上的實現方法相比,達到了對算法靈活切換的同時,硬件資源消耗減少了33.6%,算法執行的時鐘周期數減少了16.2%。本文提出的幀內預測算法的動態自重構實現方法在對配置信息的調度方式上仍有待完善,如何結合算法本身以及陣列結構的特點,在指令流與數據流混合驅動的PE陣列實現幀內預測算法在時間與空間上的自適應重構將是下一步的研究方向。

Table 3 Comparison of hardware parameters and other performance indices