亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于TMS320DM642的X264視頻編碼器的優(yōu)化*

        2010-04-17 03:34:16李青華于峰崎
        電視技術 2010年8期
        關鍵詞:編譯器外設寄存器

        李青華 ,于峰崎

        (1.中國科學院深圳先進技術研究院 香港中文大學 集成電子中心,廣東 深圳 518055;2.中國科學院微電子研究所,北京 100029)

        1 引言

        在數字視頻應用方案中,視頻編碼器是核心,其中編碼器的硬件運算能力是系統(tǒng)實時性的保證,而視頻壓縮標準的高壓縮比為編碼器適應各種傳輸帶寬信道提供了必要的保障。視頻編碼工程X264是一款開源的、按照H.264標準在PC平臺開發(fā)的視頻編碼器,如果直接移植到 TMS320DM642(以下簡稱 DM642)平臺[1-3],則實際的編碼速度一般低于視頻應用方案所需要的實時性要求。為了提高編碼工程的編碼速度,需要對移植到DM642平臺的X264進行優(yōu)化,整個優(yōu)化的流程如圖1所示。

        2 DM642硬件介紹

        DM642采用TI開發(fā)的第二代高性能先進VelociTI技術的VLIW架構VelociTI1.2,在主頻600 MHz下處理速度達到4 800 MI/s(兆指令/秒)。DM642 CPU核內部具有64個32位通用寄存器和8個獨立的32位運算單元(2個乘法器和6個算數邏輯單元),確保每個周期能夠提供4個16位介質訪問控制(Medium Access Control,MAC)。

        DM642使用兩級緩存L1和L2[4]。其中一級緩存L1包括一級程序緩存L1P和一級數據緩存L1D;二級緩存L2可配置為片內存儲器、高速緩存或兩者結合。外設包括[4-6]:3個可配置的視頻端口;1個10/100 Mbit/s的以太網控制器(EMAC);1個管理數據輸入輸出(MDIO);1 個 內 插 VCXO控制接口;1個 McASP0;1個 I2C 總線;2 個 McBSPs;3 個32位通用定時器;1個用戶配置的16位或32位主機接口(HPI16/HPI32);1個 PCI;1個 16引腳的通用輸入輸出口(GP0),具有可編程中斷/事件產生模式;1個64位IMI-FA,可以與同步和異步存儲器的外圍設備相連。

        圖1 優(yōu)化流程圖

        DM642與傳統(tǒng)的DSP一樣,采用哈佛結構[7-8],即把數據與程序分開存放于不同的存儲區(qū)內,保證在DSP的實際工作中,從程序存儲區(qū)取指令與從數據存儲區(qū)取運算數據是互相獨立的,另外在CPU內部設計了8個不同的處理單元,可使在運行過程中,CPU是按照流水線流程進行操作的。

        3 DM642平臺優(yōu)化方案介紹

        3.1 算法和系統(tǒng)程序結構的優(yōu)化

        系統(tǒng)結構優(yōu)化主要是合理安排程序中各個模塊在DSP的存儲區(qū)間中所放的位置,也就是解決存儲區(qū)間的映射問題;在數據處理方面,盡量減少待處理數據的無謂搬移。算法優(yōu)化主要體現在分析算法有沒有更好更簡單的替代方法,算法是否有某種對稱性,可否采用更合適的數據結構等。在X264的優(yōu)化中,首先考慮系統(tǒng)結構的合理安排,譬如程序到內存映射方面,首先利用CCS的CODE_SECTION[9]偽指令把X264中的9個大的模塊,依次映射到9個大的子區(qū)間里面,把頻繁使用到的DCT/IDCT模塊、QUANT/DEQUANT模塊、SAD/SATD模塊放到DM642的片內存儲區(qū)(L2 SRAM)中,把其他模塊映射到片外存儲區(qū)中。在數據訪問方面,考慮到X264編碼分別為編碼幀和幀間預測時的參考幀分配了存儲空間,在移植的過程中,存在著編碼幀和參考幀的存放位置問題。從訪問速度來看,片內存儲區(qū)的訪問速度要遠遠高于片外存儲區(qū)的速度,但片內存儲區(qū)的空間卻要遠遠小于片外存儲區(qū),這樣出現了訪問速度與有限空間之間矛盾??紤]到實際編碼流程中,編碼的基本單元是16×16的亮度宏塊加上2個8×8的色度模塊,這里用CCS的DATA_SECTION[9]偽指令在DM642的片內存儲區(qū)(L2 SRAM)中申請 2 個大小為(16×16+8×8+8×8)的存儲區(qū),來存放編碼像素值;用DATA_SECTION偽指令在片內存儲區(qū)內申請一些空間,臨時存儲編碼過程中編碼宏塊的幀內預測模式信息、幀間預測運動矢量信息以及離散余弦變換系數和量化系數;最后,為了運動估計和幀內預測參考,給參考宏塊分配一定存儲空間。而整個當前編碼幀和運動估計參考幀則放在DM642映射的片外存儲區(qū)。

        3.2 EDMA和乒乓緩存的優(yōu)化

        EDMA(Enhanced Direct Memory Access)是增強型直接內存訪問的英文縮寫。DMA技術指的是在嵌入式處理平臺或者大型計算平臺上,外設與外設之間、外設與存儲器之間、存儲器與存儲器之間可以在不需要CPU干預的情況下,進行數據搬移和訪問。這樣可以保證CPU在對一組數據進行運算時,存儲器把即將要處理的新的實驗數據準備好,減少CPU等待時間,特別是在一些需要進行大量數據搬移的情況下,能夠顯著提高系統(tǒng)的運算速度。DM642具備64個EDMA物理傳輸信道,能夠保證數據在極短時間內,在DM642外設的緩存區(qū)間和DM642存儲器之間進行搬移。DM642的EDMA[10]主要有3種啟動模式:CPU啟動,同步事件啟動,外部事件啟動。CPU啟動指的是CPU通過調用EDMA的應用程序接口(Application Programming Interface,API) 去啟動預先設置好的EDMA搬移任務。同步事件啟動一般指的是一個EDMA信道完成了搬移任務,會產生激發(fā)信號,從而激發(fā)其他的EDMA信道開始數據搬移。外部事件啟動一般指的是DSP的外設完成與外界的數據交換后,激發(fā)EDMA信道進行數據搬移。

        在對X264進行EDMA優(yōu)化中,采用雙buffer機制,也就是俗稱的乒乓緩存(ping-pong buffer)機制。具體操作代碼示例為:

        示例中,除了數據搬移中必需的數據存放源地址和目的地址之外,還定義了變量 Ping_Pong和DAT_ID。其中Ping_Pong是一個標志變量,用來表示當前存放搬移數據的目的存儲區(qū)是Ping存儲區(qū)還是Pong存儲區(qū),DAT_ID是正在進行的EDMA搬移的句柄變量。在進入正式的編碼循環(huán)體以前,EDMA會事先把一個要編碼的宏塊像素值搬移到Ping存儲區(qū)(假設Ping_Pong=0表示Ping存儲區(qū))。進入循環(huán)體以后,首先進行目標存儲區(qū)的交替(Ping_Pong=1-Ping_Pong,此時 Ping_Pong=1,表示 Pong存儲區(qū)),接著等待前一次搬移是否完成(DAT_wait(DAT_ID)),如果前一次搬移完成,就可以立即開始下一次搬移,同時CPU立即進行對本次搬移數據的處理。以后的操作類似,直至所有的宏塊都完成編碼,結束循環(huán)體。

        3.3 循環(huán)體的優(yōu)化

        在X264視頻編碼器中,循環(huán)體出現的頻率比較高,而且往往循環(huán)體是在整個編碼器中比較占用時間的部分。尤其是當出現循環(huán)體嵌套,或者循環(huán)體內部存在邏輯判斷語句或者函數調用時,編譯器一般不會對該循環(huán)進行優(yōu)化。針對這些問題,比較常用的方法有嵌套循環(huán)體內部循環(huán)展開,用條件操作符代替邏輯判斷語句,使用內聯函數[11-12],使用MUST_ITERATE偽指令操作符[11-12],將大循環(huán)體拆成幾個小循環(huán)體。筆者使用的循環(huán)體優(yōu)化的例子代碼為:

        在上面示例中,偽指令MUST_ITERATE主要是告訴編碼器,本次循環(huán)總共要執(zhí)行396次,這樣編譯器就可以進行軟件流水來優(yōu)化這個循環(huán)。

        3.4 編譯器優(yōu)化選項

        在完成上述的手工優(yōu)化后,接下來通過設置編譯器選項來使用編譯器優(yōu)化,本文采用的編譯器優(yōu)化選項[11-14]有:-pm(在程序級別進行優(yōu)化),-o3(對文件級別進行最強的優(yōu)化),-op3(速度最重要),-ml3(缺省情況下將全部數據和函數作為far型)。

        3.5 DSP匯編優(yōu)化

        假如使用上述優(yōu)化策略對編碼工程進行優(yōu)化后,編碼器的速度還不能達到應用要求,就需要編寫手工匯編程序。編寫手工匯編程序之前,首先要用CCS的profile工具對編碼工程進行剖析,找出比較耗時或頻繁調用的函數部分,把這些部分改寫成匯編函數。

        DSP采用的是哈佛體系結構,將數據和程序分開存放。大體上來說,編寫匯編語言函數主要步驟為:把操作數從內存中取出來放到CPU的寄存器中,然后在CPU內部用不同的運算單元對寄存器里的操作數進行運算,最后把運算的結果存到內存中。其中,函數參數傳遞、函數返回值寄存器、條件寄存器、棧指針寄存器的保存都必須按照規(guī)定使用相應的寄存器,否則會出現錯誤。

        在編寫匯編語言的過程中要考慮下方面:1)充分理解待編寫的函數的邏輯功能。只有真正理解了函數實現的功能和具體的數據流程圖,才能使匯編語言的構架比較高效;2)數據結構的選擇和安排。由于DM642允許數據打包處理,即一條指令可以同時對幾個字節(jié)進行操作,這對于圖像和視頻處理非常有益,所以能夠打包處理的就盡可能打包處理;3) 寄存器的分配和指令的先后順序。DM642的CPU有2套完全對稱的運算單元和寄存器。只要把操作數分別存、取到隸屬于不同套的寄存器里面,采用不同的運算單元,合理安排指令的先后順序,保證在資源不沖突的條件下盡量在一個周期內安排更多的指令,實現指令運行的高效性、并行性。

        下面舉一個SAD_4×4的例子來說明上述各項是如何實現的。SAD_4×4的C語言版本的代碼為:

        完成匯編指令的編寫后,進行匯編語言的調試。由于X264工程比較大,如果直接在工程中調試,難度較大,所以在調試過程中建立一個小工程,從文件中讀出一段數據來測試匯編語言功能的正確性。具體的步驟是:采用單步調試的同時,開啟調試器CCS里面的view memory和view core registers選項來觀察相應的memory和寄存器里面的值是否按照邏輯設計進行改變。如果結果不對,則考慮是否錯誤地使用了寄存器,或者是沒有等待足夠多的延時周期,或者是出于軟件流水的目的錯誤地安排了指令的順序,直到找出錯誤的地方。

        4 小結

        筆者首先分析了從PC平臺移植到DSP平臺后的X264編碼工程,其編碼速率低,滿足不了視頻壓縮實時性要求。接著從提高編碼器的編碼速度角度出發(fā),對編碼工程進行了優(yōu)化,介紹了在實際中用到的幾種DSP平臺優(yōu)化方法:算法與程序系統(tǒng)結構的優(yōu)化,EDMA與乒乓緩存優(yōu)化,循環(huán)體的優(yōu)化,編譯器優(yōu)化和DSP匯編。對CIF格式圖像采用BASE_LINE進行編碼,優(yōu)化前X264編碼速度約為 5~8 f/s(幀/秒),優(yōu)化后的編碼速度為 20 f/s左右,速度得到明顯提升,基本能夠實現實時編碼。?

        [1] TI Company.TMS320DM642 video/imaging fixed-point digital signal processor[EB/OL].(2002-08-05).[2010-03-20].http://focus.ti.com/lit/ds/sprs200m/sprs200m.pdf.

        [2] TI Company.TMS320C6000 technical brief (Rev.D)[EB/OL].(1999-04-08).[2010-03-20].http://focus.ti.com/docs/prod/folders/print/tms320dm642.html.

        [3] TI Company.TMS320DM642 technical overview[EB/OL].(2002-08-02).[2010-03-20].http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=spmu045.

        [4] TI Company.TMS320C64x DSP two-level internal memory reference guide[EB/OL].(2004-09-02).[2010-03-20].http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=spru609b.

        [5] TI Company.TMS320DM642 data sheet (Rev.G)[EB/OL].(2004-08-20).[2010-03-20].http://www.docin.com/p-13851805.html.

        [6] TI Company.TMS320C6000 peripherals reference guide[EB/OL].(2001-09-20).[2010-03-20].http://focus.ti.com/dsp/docs/litabsmultiplefilelist.tsp?sectionId=3&tabId=409&literatureNumber=spru190q&docCategoryId=6&familyId=132.

        [7] TI Company.TMS320C6000 CPU and instruction set reference guide[EB/OL].(2000-06-20).[2010-03-20].http://focus.ti.com/dsp/docs/litabsmultiplefilelist.tsp?sectionId=3&tabId=409&literatureNumber=spru189g&docCategoryId=6&familyId=132.

        [8] 張雄偉.DSP芯片的原理與開發(fā)應用[M].3版.北京:電子工業(yè)出版社,2003.

        [9]彭啟宗,管慶.DSP集成開發(fā)環(huán)境——CCS及DSP/BIOS的原理與應用[M].北京:電子工業(yè)出版社,2004.

        [10] TI Company.TMS320C6000 enhanced direct memory access controller reference guide[EB/OL].(2004-03-10).[2010-03-20].http://focus.ti.com/dsp/docs/litabsmultiplefilelist.tsp?sectionId=3&tabId=409&literatureNumber=spru234c&docCategoryId=6&familyId=132.

        [11] TI Company.TMS320C6000 programmer′s guide[EB/OL].(2003-06-02).[2010-03-20].http://focus.ti.com/lit/ug/spru198j/spru198j.pdf.

        [12] TI Company.TMS320C6000 optimizing C compiler tutorial[EB/OL].(2003-06-02).[2010-03-20].http://focus.ti.com/lit/ug/spru187q/spru187q.pdf.

        [13] 孫偉,郭寶龍,武曉玥,等.DSP視頻存儲關鍵技術研究及實現[J].電視技術,2009,33(6):30-32.

        [14] 梁偉偉,李玉山,劉洋.基于TMS320DM642的視頻編碼器的存儲存取優(yōu)化[J].電視技術,2009,33(6):33-35.

        猜你喜歡
        編譯器外設寄存器
        Lite寄存器模型的設計與實現
        計算機應用(2020年5期)2020-06-07 07:06:44
        基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設計
        分簇結構向量寄存器分配策略研究*
        通用NC代碼編譯器的設計與實現
        Microchip推出具備雙ADC外設的全新器件,擴展其低成本8位PIC?單片機產品線
        高速數模轉換器AD9779/AD9788的應用
        一種可重構線性反饋移位寄存器設計
        通信技術(2010年8期)2010-08-06 09:29:16
        編譯器無關性編碼在微控制器中的優(yōu)勢
        貼身呵護 必不可少的PSP外設
        外設天地行情
        現代計算機(2009年9期)2009-12-02 03:45:10
        无码AV高潮喷水无码专区线| 国产成人小视频| 国产无套内射久久久国产| 国产精品半夜| 精品一区二区三区人妻久久| 熟妇人妻精品一区二区视频免费的 | 国产在线AⅤ精品性色| 国产精品自拍午夜伦理福利| 国产播放隔着超薄丝袜进入| 99久久国产综合精品麻豆 | 国产精品爽黄69天堂a| 男女一级毛片免费视频看| 精品专区一区二区三区| 亚洲午夜狼人综合影院| 国产精品无码专区av在线播放| 91天堂素人精品系列全集亚洲 | 欧美人牲交| 2021国产视频不卡在线| 中文字幕中文一区中文字幕| 免费久久久一本精品久久区| 48沈阳熟女高潮嗷嗷叫| 亚洲av日韩av综合aⅴxxx| 视频一区二区免费在线观看| 欧洲美熟女乱av亚洲一区| 欧美第一黄网免费网站| 无码a级毛片免费视频内谢| 亚洲中文字幕第15页| 五月天国产成人av免费观看| 国产精品久久久久国产精品| 亚洲免费人成网站在线观看 | 岛国熟女精品一区二区三区| 日本人妻97中文字幕| 久久国产免费观看精品3| 亚洲在AV极品无码天堂手机版| 亚洲国产精品一区二区第一| 91伦理片视频国产精品久久久| 免费人成在线观看视频播放| 国产精品一区2区三区| 毛片精品一区二区二区三区| 97久久精品人妻人人搡人人玩 | 亚洲av中文无码乱人伦在线播放|