崔 遙,趙 鍇,崔慧娟,唐 昆
(清華信息科學與技術國家實驗室,北京 100084)
TMS320DM6437(簡稱DM6437)數字媒體處理器是一款高性能定點數字信號處理芯片,采用第三代高性能的超長字指令(VLIM)結構,主頻可達 400~700 MHz,峰值運算速率高達 3200~5600 MI/s(兆指令/秒)。DM6437芯片所特有的增強型直接內存存取(Enhanced Direct Memory Access,EDMA)數據搬移工具,可以采用乒乓緩存機制,通過配置芯片上的EDMA寄存器,實現CPU與數據搬移的并行操作,提高CPU的運行效率,而H.264/AVC[1]編碼器中大量的數據搬移,正好可以利用EDMA進行優化,提高編碼器的高速緩沖存儲器(cache)命中率和編碼速率。
EDMA在傳輸過程中完全不占用CPU資源,節省大量的時鐘周期,支持片內存儲區到片外,片內存儲區之間和片外存儲區之間的數據讀寫并且傳輸模式靈活,支持三維傳輸模式,可以對傳輸數據進行重排,大大增強代碼的靈活性。
EDMA主要由EDMA通道控制器 (EDMA Channel Controller)和EDMA傳輸控制器 (EDMA Transfer Controller)組成,如圖1所示。EDMA通道控制器主要完成數據傳輸前的準備工作,如申請傳輸通道,配置傳輸參數到參數寄存器(PaRAM)中,發送傳輸請求以及傳輸完成檢測等工作。EDMA傳輸控制器主要是對EDMA通道控制器發送過來的傳輸請求進行處理,然后按照預先的設置,進行數據傳輸,具體參數配置主要是在EDMA通道控制器中完成。

EDMA傳輸控制器主要包括傳輸事件和中斷處理寄存器、傳輸事件隊列、參數寄存器、傳輸請求發送寄存器和傳輸完成檢測寄存器以及完成中斷發送寄存器,結構如圖2所示。傳輸事件和中斷處理寄存器用于觸發傳輸,傳輸事件隊列會按照優先級對傳輸事件進行排序,參數寄存器用于存儲傳輸中需要設置的參數,如源地址、目的地址、數據格式等參數,傳輸完成檢測寄存器用于檢測傳輸是否完成,完成后是否進行鏈式傳輸,完成中斷發送寄存器用于在傳輸完成后向外設和CPU發送中斷信號。

EDMA傳輸模式主要有2種:A同步模式和AB同步模式。A同步模式在每次傳輸被觸發后,會傳輸一個array,然后會產生一個中斷信號,AB同步模式每次傳輸一個frame,傳輸效率高,本文采用AB同步模式。ACNT,BCNT和CCNT分別代表三維傳輸數據塊的尺寸大小,如圖3所示,每個array由ACNT個字節組成,每個frame由BCNT個array組成,每個block由CCNT個frame組成。BIDX和CIDX分別表示第二維和第三維傳輸的地址自增偏移量。根據程序需要,對這幾個參數進行合理的設置,可以在數據傳輸過程中實現數據的重排,優化數據存儲結構,提高cache命中率,從而最終提高代碼執行效率。

乒乓緩存機制是EDMA最重要的一種傳輸方式,如圖4所示。該方式可以實現EDMA與CPU的并行,本文兩處EDMA優化均使用該傳輸方式。其實現主要是將傳輸目的緩沖區設置為原來目的緩沖區的2倍,然后分別用pingbuffer和pongbuffer作為這2塊緩沖區的指針,當EDMA向pingbuffer存儲區傳輸數據時,編碼數據指針指向pongbuffer,當pongbuffer中的數據編碼完成后,pingbuffer存儲區數據傳輸完畢,然后分別交換EDMA傳輸目的地址和待編碼宏塊的指針,即將pongbuffer緩沖區賦值給待編碼宏塊指針,將pingbuffer緩沖區賦值給EDMA傳輸的地址指針。這樣2個數據通路,在一路利用EDMA傳輸數據的同時,另一路由CPU進行編碼的數據運算。如果傳輸時間小于編碼運算的時間,則EDMA完全獨立于CPU在后臺運行,不耗費一個時鐘周期,因此實現了數據傳輸和CPU并行,提高了代碼的運行效率。

H.264/AVC編碼器編碼步驟如下:1)編碼數據及輔助信息拷貝,主要包括兩部分數據,一是待編碼宏塊數據從片外傳輸到片內,另一部分是周圍重建宏塊的數據信息(用于幀內預測)和編碼信息(用于MV預測和熵編碼等)。2)宏塊分析,即根據率失真優化得到該宏塊的最佳編碼模式。3)宏塊編碼,根據分析出來的最佳編碼模式,進行幀內和幀間預測,得到殘差信息。4)重建編碼宏塊,并將當前編碼宏塊的輔助信息(預測模式、MV信息等)寫入緩沖區(為編碼臨近宏塊使用)。5)宏塊熵編碼,根據宏塊編碼模式和殘差數據進行進一步的數據壓縮。通過以上分析,在幀數據讀入后進行邊界擴展和編碼前宏塊拆分階段,都涉及到了大數據量的搬移,因此對這兩部分進行EDMA優化。
編碼器在編碼前,首先會讀入一幀數據到片外存儲區Pic_in,為提高壓縮效率,支持越界搜索,對這一幀數據進行邊界擴展后存儲到片外存儲區Fenc,如圖5所示。而對幀數據進行邊界擴展,需要對整幀數據進行搬移,如果采用數據拷貝指令,占用了CPU的資源,費時費力,并且由于只有一塊存儲區,編碼器每次必須等數據傳輸完成后,才能進行下面的操作,由于數據量大,等待時間較長,因此這里可以使用EDMA乒乓緩存機制進行優化。
為了更好地發揮EDMA在大數據量搬移上的優勢,首先對程序進行修改。修改前,編碼器從片外整幀數據中讀入一個宏塊的數據到片內,然后進行編碼,但是一個宏塊的數據量較小,EDMA的優勢難以得到發揮,因此對程序進行調整,編碼器每次讀入若干宏塊,如圖6所示,宏塊的個數通過ParamNum來控制,增加了每次傳輸的數據量。因此,進行調整后的編碼器,在這里也可以使用EDMA進行優化。


幀級和宏塊級EDMA優化的具體參數配置如表1所示。

表1 EDMA優化配置參數
測試平臺使用DM6437開發板,采用典型測試序列Foreman(),對匯編優化[2]過的x264[3]編碼器 cache命中率和編碼速度進行測試。根據DM6437上片內存儲資源,對cache和內部RAM配置如下:L1P存儲空間全部配置為cache,大小為32 kbyte;L1D存儲空間64 kbyte配置為內部數據存儲存儲空間,16 kbyte配置為數據cache;L2存儲空間128 kbyte全部配置為cache(程序cache或者數據cache)。經過多次測試,編碼器編碼前讀入的宏塊數目為11時,cache命中率得到顯著提高。具體的測試結果如表2所示。

表2 cache命中率影響對比
而采用EDMA優化后,編碼速度也得到了改善,提高了大約3~4幀,并且一次讀入11個宏塊與一次讀入1個宏塊相比,前者采用EDMA優化的效果更為明顯,如表3所示。

表3 編碼速率影響對比 f/s
通過對H.264/AVC編碼器進行分析和結構調整,采用EDMA乒乓緩存機制,對編碼器進行了優化,提高了cache命中率和編碼速度,證明在處理大數據量的數據傳輸時,EDMA有其特有的優勢。下一步將分析H.264解碼器的存儲結構和程序流程,思考如何利用EDMA進行解碼器的優化,以完成實時視頻通信的目標。
[1]WIEGAND T,SULLIVAN G J,BJONTEGAARD G,et al.Overview of the H.264/AVC video coding standard[J].IEEE Trans.Circuits and Systems for Video Technology,2003,13(7):560-576.
[2]彭燁.H.264/AVC編解碼器在TMS320C6400上的優化實現[J].電視技術,2008,32(9):21-23.
[3]X264 Codec[EB/OL].[2010-06-01].http://www.videolan.org/developers/x264.html.