謝曉燕,周金娜,朱 筠,劉新闖,雷 祥
1(西安郵電大學 計算機學院,西安 710121)2(西安郵電大學 電子工程學院,西安 710121)
HEVC是在視頻編碼專家組(Video Coding Experts Group,ITU-T VCEG)和運動圖像專家組(Moving Picture Experts Group,ISO/IEC MPEG)的共同協(xié)作下開發(fā)的最新視頻編碼標準[1].HEVC具有顯著的壓縮效果,在確保與H.264相同視頻質量的同時降低了50%的比特率[2].其預測單元塊(Prediction Unit,PU)的大小從64×64到4×4不等[3].運動補償算法由于不同尺寸的編碼單元和插值操作,采用了8抽頭亮度濾波器和4抽頭色度濾波器.HEVC的內(nèi)插濾波器分別占編碼器和解碼器執(zhí)行時間的20%~30%和20%~40%,使得插值濾波器成為HEVC中最耗時的編碼工具之一[4],插值運算的高復雜性增加了對硬件加速的需求.為了提高運動補償算法的計算效率,一些學者提出了多種解決方案.
文獻[5]提出了四行并行2維(2 Dimensional,2D)緩存機制,以減少61.86%的存儲器流量并支持更高的內(nèi)插器吞吐量,可以更高效地完成數(shù)據(jù)的更新,但是其硬件設計復雜,靈活性差.文獻[6]根據(jù)運動補償算法中8抽頭濾波器的系數(shù)設計出了21個加法器完成濾波操作,將A、B型濾波器合并為一個可重構濾波器架構.雖然這種方法與H.264相比效率提高了0.043%,但是所需濾波器和寄存器的數(shù)量較多,占用硬件資源較大.文獻[7]設計了一種可重構數(shù)據(jù)通路的亮度插值濾波器,擁有較高的設計效率,但是需要額外的存儲器和控制邏輯.文獻[8]提出了一種新的靈活的硬件結構,用于插值濾波器中使用的半像素和四分之一像素.該架構可以在30個時鐘周期內(nèi)處理4×4 PU的整個分數(shù)位置,但是卻僅能計算4×4塊.文獻[9]使用64個可重構的濾波器來滿足不同的濾波器類型,該架構雖然能夠實現(xiàn)高吞吐量,但是設計復雜性較高,僅能計算8×8塊.文獻[10]提出了并行化和流水線結構的分像素插值方案,采用高并行度的8輸入雙通道插值器,實現(xiàn)了視頻的實時傳輸,但所占資源較多.
綜上所述,動態(tài)可重構的并行化運動補償算法已成為視頻高計算性能有效的解決方案[11].本文采用動態(tài)可編程可重構的陣列處理器來實現(xiàn)運動補償算法的并行化實現(xiàn),基于該結構即高效又靈活的特點,又采用數(shù)據(jù)復用和并行操作的思想,動態(tài)實現(xiàn)運動補償算法的可變塊模式切換.提高插值過程的計算效率,縮短了編碼時間,提高算法的靈活性.
運動補償算法采用8抽頭濾波器替換H.264中的6抽頭濾波器,新的8抽頭濾波器中使用了三種不同的插值系數(shù),使得分數(shù)精度的樣本預測更加精確,插值系數(shù)如表1所示.
表1 分數(shù)精度樣本位置對應插值系數(shù)
Table 1 Fractional accuracy sample position corresponding
to interpolation coefficient
分數(shù)精度樣本位置插值系數(shù) a、d、e、f、g{-1,4,-10,58,17,-5,1}/64 b、h、i、j、k{-1,4,-11,40,40,-11,4,-1}/64 c、n、p、q、r{1,-5,17,58,-10,4,-1}/64
圖1所示為亮度插值分數(shù)精度樣本位置示意圖.整數(shù)樣本所在位置用大寫字母表示,分數(shù)樣本所在位置用小寫字母表示.當運動矢量(Motion Vector,MV)指向整數(shù)樣本所在位置時,不進行插值運算,直接以此整數(shù)樣本值作為最后的預測結果輸出.當運動矢量指向分數(shù)位置時,即1/2像素精度或1/4像素精度位置時,運動補償插值模塊將利用插值濾波器進行非整數(shù)樣本預測.
圖1 亮度插值分數(shù)精度樣本位置Fig.1 Luma interpolation score accuracy sample position
運動補償算法的數(shù)據(jù)相關性大部分來源于參考像素的讀取,插值操作需要用周圍的像素點作為參考.例如一個8×8編碼塊,最多需要15×15參考塊,而對于下一個編碼塊,也需要15×15參考塊.其中當前參考塊的數(shù)據(jù)和下一參考塊的數(shù)據(jù)存在數(shù)據(jù)重疊現(xiàn)象,如果對參考數(shù)據(jù)分開做處理,則需要復雜的控制邏輯來完成.而針對更大的編碼塊,需要的參考塊數(shù)據(jù)更多,可以根據(jù)數(shù)據(jù)復用思想來更新下一參考塊數(shù)據(jù).并且PU塊越大,需要計算的插值像素點越多,需要處理的分像素位置情況也更復雜.如果每次只處理一個像素點,只針對一種分像素位置進行處理,耗時較長,算法的計算效率低下.運動補償算法在同一時間內(nèi)可以進行相同的插值計算操作,比如執(zhí)行8×8像素塊,每個像素點的插值計算和其余63個像素點的插值計算并無數(shù)據(jù)相關性,所以插值計算過程可以采用并行的思想,在同一時刻處理多個像素.讀取參考塊數(shù)據(jù)和插值計算數(shù)據(jù)存在相關性,所以參考塊讀取與插值計算這兩個過程為串行執(zhí)行.
依照前面分析,本文提出一種基于動態(tài)可重構陣列處理器的運動補償并行插值計算方法,該結構兼顧專用硬件的高效性和通用處理器的靈活性,充分滿足了運動補償算法插值計算的需求[12].同時采用數(shù)據(jù)復用的思想進行參考塊數(shù)據(jù)的動態(tài)選取,進行陣列和指令的可配置來實現(xiàn)可變塊模式的動態(tài)選擇.
采用數(shù)據(jù)復用的思想進行參考塊數(shù)據(jù)的動態(tài)選取,參考塊更新以8×8的編碼塊為例進行說明.當前一編碼塊處理完之后,就緊接著處理下一編碼塊,這涉及到了參考塊數(shù)據(jù)的更新,如圖2所示.當前參考塊和下一個參考塊數(shù)據(jù)重合的區(qū)域大小為7×15,則下一個參考塊可以通過當前參考塊更新120個數(shù)據(jù)即可得到下一個參考塊.該過程分為兩個步驟,執(zhí)行流程圖如圖2所示.
圖2 更新參考塊數(shù)據(jù)Fig.2 Update reference block data
第一步:按列處理參考塊像素:首先將處理元中15×15參考塊的前8列像素值刪除.并把第9列像素作為重構15×15參考塊的第1列像素;然后把第10列像素作為重構15×15的參考塊的第2列像素;把第11列像素作為重構15×15的參考塊的第3列像素;把第12列像素作為重構15×15的參考塊的第4列像素;把第13列像素作為重構15×15的參考塊的第5列像素;把第14列像素作為重構15×15的參考塊的第6列像素;最后把第15列像素作為重構15×15的參考塊的第7列像素,即處理完成下一參考塊的前7列數(shù)據(jù).
第二步:將剩余參考塊數(shù)據(jù)從外存中按行加載,處理后8列像素:先將第一行8個像素從外存中加載進來,放在重構15×15參考塊的第1行像素位置;再將下一行8個像素從外存中加載進來,放在重構15×15參考塊的第2行像素位置;并將第3行8個像素從外存中加載進來,放在重構15×15參考塊的第3行像素位置;以此類推,最后將第15行8個像素從外存中加載進來,放在重構15×15的參考塊第15行像素的位置.
本文所采用的可重構視頻陣列結構由1024個同構且規(guī)則的輕核處理元以鄰接互連的方式構成,簇內(nèi)通過鄰接互連和共享存儲通信,簇間通過路由器和適配器進行通信.可重構陣列處理器由全局指令存儲器、輸入存儲器、輸出存儲器、陣列處理器和全局控制器五部分組成.全局指令存儲器用于存儲陣列處理器工作的操作指令和調(diào)用指令;輸入存儲器負責從外存中加載相應的視頻序列;陣列處理器為核心計算部分由8×8個簇(Processing Element Group,PEG)組成.全局控制器為可重構機制的核心部分,全局控制器用于實現(xiàn)對陣列計算資源的控制與管理,包括操作指令的廣播、調(diào)用指令的分發(fā)、計算資源信息的收集等.其上層為主機接口,下層為32×32個處理元(Processing Element,PE)組成的陣列處理器.主要功能是在主機接口和陣列處理器之間形成一個層次化編程網(wǎng)絡,利用層次化編程網(wǎng)絡來實現(xiàn)對陣列計算資源的控制與管理.為取址簡單,尋址過程中的位寬可以逐級遞減以確保每一條指令都同時到達PE,層次化編程網(wǎng)絡設計通過H型網(wǎng)絡進行指令加載.主處理器只需要向全局控制器發(fā)送任務指令和必要的數(shù)據(jù)或數(shù)據(jù)存儲地址,全局控制器便會控制指令傳輸網(wǎng)絡分配指令給不同PE執(zhí)行相應的操作,如圖3所示.
圖3 動態(tài)可重構陣列處理器Fig.3 Dynamic reconfigurable array processor
在運動補償算法中,處理的編碼塊越大,需要計算的插值像素點也就越多,待處理的分像素位置情況越復雜.如果每次只處理一個像素點,只針對一種分像素位置進行處理,則耗時太長,算法計算效率低下.所以本文采用數(shù)據(jù)并行的思想,在同一時間處理多個像素點,縮短數(shù)據(jù)讀取和計算時間從而提高算法的計算效率.以8×8塊大小為例,算法的映射圖如圖4所示,具體操作步驟如下:
Step 1.原始數(shù)據(jù)和參考數(shù)據(jù)加載.當前幀的數(shù)據(jù)存儲在DIM中,參考幀的數(shù)據(jù)存儲在到DOM中的.PE00訪問DIM,讀取原始像素值,并發(fā)送到PE03.同時PE01訪問DOM,讀取相應的參考像素值.并下發(fā)到PE00,PE11,PE02,PE03.其中PE00將數(shù)據(jù)下發(fā)給PE10,PE20,PE30;PE11將數(shù)據(jù)下發(fā)給PE21,PE31;PE02將數(shù)據(jù)下發(fā)給PE12,PE22,PE32;PE03將數(shù)據(jù)下發(fā)給PE13,PE23,PE33.為了提高數(shù)據(jù)傳輸效率,不需要等待PE00下發(fā)完后其他PE才下發(fā),只要某個PE接收到下發(fā)數(shù)據(jù)命令就立刻將數(shù)據(jù)下發(fā)給相對應的PE.
Step 2.插值計算.各個PE接收到數(shù)據(jù)之后,開始進行1/2或者1/4插值計算.由于運動補償算法在同一時間內(nèi)有大量相同的插值計算,每個像素點的插值計算和其他像素點的插值計算并無數(shù)據(jù)相關性,所以插值計算可以在16個PE中同時進行.插值計算完成后再將預測值通過共享存儲傳輸?shù)絇E03中.
Step 3.將PE03中的預測值和當前像素值進行殘差計算,計算完后將殘差值傳輸?shù)絇E30中與預測值完成圖像重建.
圖4 運動補償算法的映射圖Fig.4 Map of motion compensation algorithm
運動補償算法支持所有可能的PU尺寸,其范圍從4×4像素塊到64×64像素塊,這對內(nèi)存訪問,控制和處理的并行性要求是一個重大挑戰(zhàn).為了應對這一挑戰(zhàn),本文提出了一種運動補償算法的動態(tài)可重構實現(xiàn)方案,基于上下文切換的重構機制,實現(xiàn)對可變塊算法的動態(tài)映射.動態(tài)重構機制主要核心分為指令重構和規(guī)模重構.主要用到指令下發(fā)網(wǎng)絡的指令廣播操作和指令下發(fā)操作.指令重構是將不同塊的代碼下發(fā)到相應簇中,實現(xiàn)PE功能單元的重構.規(guī)模重構是基于上下文切換的方式將指令預先存放在陣列結構中每個PE自帶的指令存儲器中,然后通過廣播操作同時開啟所需PE.規(guī)模重構有256個PE(16個PEG),64個PE(4個PEG)和16個PE(1個PEG),當執(zhí)行4×4至64×64塊大小時,PEG00-PEG33的本地同時存儲指令,其規(guī)模重構如圖5所示.若做64×64的塊大小,則通過指令廣播操作指令讓所有的簇(PEG00-PEG33)工作;若做32×32塊大小,則通過指令廣播操作指令讓所有的簇(PEG00-PEG11)工作;若做16×16塊大小,則通過指令廣播操作指令讓簇(PEG00-PEG01)工作;若做8×8塊大小,則通過指令廣播操作指令讓簇(PEG00)工作;若做4×4塊大小,則通過指令廣播操作指令讓簇(PEG01)工作.
圖5 4×4-64×64運動補償算法可重構功能圖Fig.5 4×4-64×64 motion compensation algorithmreconfigurable function diagram
下面以4×4塊大小切換8×8塊大小為例具體說明.在加載之前應針對不同分辨率的測試序列進行編碼塊首地址存放.首先將YUV測試序列通過Matlab軟件轉換成陣列結構能識別的二進制數(shù)值.并將該數(shù)據(jù)以陣列的格式分布在文檔中,存放到DIM中.當執(zhí)行4×4塊大小,通過廣播操作指令讓PEG00工作,當執(zhí)行完4×4塊大小之后,通過CALL調(diào)用指令切換到8×8塊大小,此時PEG01工作,其中簇內(nèi)具體映射方案如上圖4所示.4×4塊的映射方案和8×8映射方案相同,4×4塊大小每個PE計算一個像素,8×8塊大小每個PE計算4個像素.
為了驗證運動補償算法可重構實現(xiàn)的可行性,本文基于動態(tài)可重構陣列結構進行驗證.方法如下:通過修改測試模型HM10.0的配置文件,獲取測試數(shù)據(jù)和塊劃分信息,存入片外存儲,然后通過QuestaSim將可重構方案映射到動態(tài)可重構陣列結構上進行仿真驗證.圖6為不同陣列規(guī)模下處理不同塊大小所需的時間,其中串行處理時間為單PE處理結果,相比于串行執(zhí)行,并行處理縮短了約93%處理時間.在不同的陣列規(guī)模下,當執(zhí)行4×4切換到8×8塊大小時,執(zhí)行4個4×4既可切換到8×8;當執(zhí)行8×8切換到16×16塊大小時,執(zhí)行4個8×8塊大小即可切換到16×16塊;當執(zhí)行16×16切換到32×32塊大小時,執(zhí)行4個16×16塊大小即可切換到32×32塊;同理,執(zhí)行32×32塊切換到64×64塊大小時,執(zhí)行4個32×32塊大小即可切換到64×64.
圖6 不同塊大小運動補償算法計算時間統(tǒng)計Fig.6 Calculation of time statistics for different block sizemotion compensation algorithms
采用CMOS90nm工藝對可重構視頻陣列處理器進行綜合,再通過BEE4平臺上的FPGA LX6V550T對設計進行綜合,如表2所示為8×8編碼塊綜合結果,從頻率、資源占用率以及并行度分別進行比較.根據(jù)能同時處理像素的多少,可以得出16個PE規(guī)模的陣列結構并行度為16.文獻[6]設計了可重構的濾波器,其頻率遠遠低于本文,而且設計的像素處理并行度也是其2倍.文獻[10]僅用于處理8×8編碼塊,雖然資源占用比本文低,但是工作頻率遠遠低于本文,并行度也僅為本文的一半.文獻[13]提出的高度并行的流水線設計,可同時處理32個像素,頻率雖然略高,但是資源占用卻是本文的2倍之多.文獻[14]在頻率和本文相當?shù)那闆r下,硬件資源是本文設計的4倍還要多.文獻[15]在頻率上略高于本文,但是其硬件資源卻差不多是本文設計的4倍.
表2 運算性能比較
Table 2 Comparison of computing performance
本文文獻[6]文獻[10]文獻[13]文獻[14]文獻[15]FPGAZynq 7045///65nmFPGAZynq 7045ASIC90nm90nm65nm40nm//工作頻率ISE綜合156MHz///150MHz180MHzDC綜合300MHz171 MHz34.2MHz342 MHz//LUT38.345k///126k74200ALM?+341DSP+113KGate137.425k32.49K64.8K297.3K//并行度168832//
本文基于可重構視頻陣列處理器結構,針對可變塊的運動補償算法,提出了一種新的高并行度的可重構方案.該方案能夠通過動態(tài)調(diào)整視頻陣列處理器規(guī)模,來實現(xiàn)不同塊大小的運動補償算法.該設計能夠靈活的切換塊大小并且最大限度地利用可重構陣列處理器.實驗結果表明:所提出的可重構實現(xiàn)方式相比于串行單PE處理時間節(jié)省了約93%,該結構在具有較高的執(zhí)行效率的同時也具有較好的靈活性.