• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      李青華 ,于峰崎

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

      1 引言

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

      2 DM642硬件介紹

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

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

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

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

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

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

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

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

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

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

      示例中,除了數(shù)據(jù)搬移中必需的數(shù)據(jù)存放源地址和目的地址之外,還定義了變量 Ping_Pong和DAT_ID。其中Ping_Pong是一個標志變量,用來表示當前存放搬移數(shù)據(jù)的目的存儲區(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立即進行對本次搬移數(shù)據(jù)的處理。以后的操作類似,直至所有的宏塊都完成編碼,結(jié)束循環(huán)體。

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

      在X264視頻編碼器中,循環(huán)體出現(xiàn)的頻率比較高,而且往往循環(huán)體是在整個編碼器中比較占用時間的部分。尤其是當出現(xiàn)循環(huán)體嵌套,或者循環(huán)體內(nèi)部存在邏輯判斷語句或者函數(shù)調(diào)用時,編譯器一般不會對該循環(huán)進行優(yōu)化。針對這些問題,比較常用的方法有嵌套循環(huán)體內(nèi)部循環(huán)展開,用條件操作符代替邏輯判斷語句,使用內(nèi)聯(lián)函數(shù)[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(缺省情況下將全部數(shù)據(jù)和函數(shù)作為far型)。

      3.5 DSP匯編優(yōu)化

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

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

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

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

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

      4 小結(jié)

      筆者首先分析了從PC平臺移植到DSP平臺后的X264編碼工程,其編碼速率低,滿足不了視頻壓縮實時性要求。接著從提高編碼器的編碼速度角度出發(fā),對編碼工程進行了優(yōu)化,介紹了在實際中用到的幾種DSP平臺優(yōu)化方法:算法與程序系統(tǒng)結(jié)構(gòu)的優(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左右,速度得到明顯提升,基本能夠?qū)崿F(xiàn)實時編碼。?

      [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視頻存儲關(guān)鍵技術(shù)研究及實現(xiàn)[J].電視技術(shù),2009,33(6):30-32.

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

      猜你喜歡
      編譯器外設寄存器
      Lite寄存器模型的設計與實現(xiàn)
      計算機應用(2020年5期)2020-06-07 07:06:44
      基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設計
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      通用NC代碼編譯器的設計與實現(xiàn)
      Microchip推出具備雙ADC外設的全新器件,擴展其低成本8位PIC?單片機產(chǎn)品線
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應用
      一種可重構(gòu)線性反饋移位寄存器設計
      編譯器無關(guān)性編碼在微控制器中的優(yōu)勢
      貼身呵護 必不可少的PSP外設
      外設天地行情
      宁国市| 项城市| 金阳县| 霞浦县| 普宁市| 通化市| 嵊泗县| 衡山县| 漾濞| 修文县| 洛隆县| 宽城| 五河县| 浦城县| 闸北区| 长泰县| 青田县| 丰县| 海淀区| 秦安县| 札达县| 交城县| 兰坪| 平度市| 松原市| 广灵县| 普格县| 额尔古纳市| 白山市| 耒阳市| 东山县| 绥阳县| 苗栗县| 武胜县| 康保县| 铜梁县| 海口市| 梁山县| 凤台县| 北流市| 宁海县|