999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于TMS320DM642的X264視頻編碼器的優化*

2010-04-17 03:34:16李青華于峰崎
電視技術 2010年8期
關鍵詞:指令優化

李青華 ,于峰崎

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

1 引言

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

2 DM642硬件介紹

DM642采用TI開發的第二代高性能先進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 優化流程圖

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

3 DM642平臺優化方案介紹

3.1 算法和系統程序結構的優化

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

3.2 EDMA和乒乓緩存的優化

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

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

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

3.3 循環體的優化

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

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

3.4 編譯器優化選項

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

3.5 DSP匯編優化

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

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

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

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

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

4 小結

筆者首先分析了從PC平臺移植到DSP平臺后的X264編碼工程,其編碼速率低,滿足不了視頻壓縮實時性要求。接著從提高編碼器的編碼速度角度出發,對編碼工程進行了優化,介紹了在實際中用到的幾種DSP平臺優化方法:算法與程序系統結構的優化,EDMA與乒乓緩存優化,循環體的優化,編譯器優化和DSP匯編。對CIF格式圖像采用BASE_LINE進行編碼,優化前X264編碼速度約為 5~8 f/s(幀/秒),優化后的編碼速度為 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芯片的原理與開發應用[M].3版.北京:電子工業出版社,2003.

[9]彭啟宗,管慶.DSP集成開發環境——CCS及DSP/BIOS的原理與應用[M].北京:電子工業出版社,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的視頻編碼器的存儲存取優化[J].電視技術,2009,33(6):33-35.

猜你喜歡
指令優化
聽我指令:大催眠術
超限高層建筑結構設計與優化思考
房地產導刊(2022年5期)2022-06-01 06:20:14
民用建筑防煙排煙設計優化探討
關于優化消防安全告知承諾的一些思考
一道優化題的幾何解法
由“形”啟“數”優化運算——以2021年解析幾何高考題為例
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
殺毒軟件中指令虛擬機的脆弱性分析
電信科學(2016年10期)2016-11-23 05:11:56
基于低碳物流的公路運輸優化
現代企業(2015年2期)2015-02-28 18:45:09
主站蜘蛛池模板: 久久伊人久久亚洲综合| 日本91在线| 亚洲天堂免费在线视频| 国产美女精品人人做人人爽| 精品99在线观看| 67194在线午夜亚洲| 國產尤物AV尤物在線觀看| 久久香蕉国产线看观| 成年人视频一区二区| 亚洲欧美在线看片AI| 91精品情国产情侣高潮对白蜜| 久久久久青草线综合超碰| 在线免费观看AV| 午夜老司机永久免费看片| 亚洲色欲色欲www网| 重口调教一区二区视频| 丝袜高跟美脚国产1区| 亚洲精品少妇熟女| 91人妻在线视频| 欧美 亚洲 日韩 国产| 97视频免费在线观看| 国产精品区视频中文字幕| 一级片免费网站| 中文字幕在线观| 亚洲综合专区| 日韩精品免费一线在线观看| 国产成在线观看免费视频| 免费看a级毛片| 女人18毛片水真多国产| 国产一区二区在线视频观看| 最新无码专区超级碰碰碰| 亚洲精品视频网| 最新无码专区超级碰碰碰| 99成人在线观看| 亚洲视频一区在线| 国产精品极品美女自在线看免费一区二区 | 日本91视频| 欧美午夜性视频| 四虎综合网| 国产精品亚洲一区二区三区在线观看| 强奷白丝美女在线观看| 国产男人天堂| 国产9191精品免费观看| 无码专区国产精品一区| 国产网站一区二区三区| 自慰网址在线观看| 婷婷六月综合网| 欧美一区福利| 亚洲天堂色色人体| 成人在线亚洲| 国产美女免费| 正在播放久久| 女人爽到高潮免费视频大全| 国产亚洲精久久久久久无码AV| 亚洲综合色吧| 亚洲国产亚洲综合在线尤物| 91视频青青草| 无码福利日韩神码福利片| 国产美女在线观看| 中文字幕av一区二区三区欲色| 一区二区在线视频免费观看| 亚洲精品国产综合99| 在线国产毛片手机小视频| 97亚洲色综久久精品| 国产高清毛片| 国产鲁鲁视频在线观看| 97超爽成人免费视频在线播放| 国产99免费视频| 久久精品人人做人人爽97| 免费A级毛片无码无遮挡| 国产aⅴ无码专区亚洲av综合网| 青青国产在线| 欧美日韩综合网| 嫩草在线视频| 色成人亚洲| 嫩草国产在线| 香蕉精品在线| 亚洲无码视频喷水| 内射人妻无码色AV天堂| 欧美日韩国产成人高清视频| 久久香蕉国产线看观看式| 99久久国产综合精品2020|