新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于 DSP 的視頻算法系統(tǒng)優(yōu)化若干策略

基于 DSP 的視頻算法系統(tǒng)優(yōu)化若干策略

作者: 時(shí)間:2011-11-01 來(lái)源:網(wǎng)絡(luò) 收藏

數(shù)字視頻產(chǎn)品需求近些年出現(xiàn)猛增。主流應(yīng)用包括視頻通信、視頻監(jiān)控與工業(yè)自動(dòng)化,而最熱門的要算娛樂(lè)應(yīng)用,如 DVD、HDTV、衛(wèi)星電視、標(biāo)清(SD)或高清 (HD) 機(jī)頂盒、數(shù)碼相機(jī)與 HD 攝像機(jī)、高端顯示器(LCD、等離子顯示器、DLP)以及個(gè)人攝像機(jī)等。這些應(yīng)用都向高質(zhì)量的視頻編解碼算法及其標(biāo)準(zhǔn)提出巨大需求,目前主流壓縮標(biāo)準(zhǔn)主要有MPEG2、MPEG4和H.264/AVC,而針對(duì)這些編解碼標(biāo)準(zhǔn)有各種各樣的實(shí)現(xiàn)方案。本文主要探討基于TI 的C64系列的視頻解碼算法標(biāo)準(zhǔn)系統(tǒng)優(yōu)化過(guò)程中需要考慮的若干因素。

TI的C64系列以其強(qiáng)大的處理能力被廣泛用于視頻處理領(lǐng)域,然而由于大家對(duì)C64系列的結(jié)構(gòu)、指令、的理解程度不一樣,造成算法實(shí)現(xiàn)時(shí)的效果有許多的差異。具體體現(xiàn)在實(shí)現(xiàn)算法時(shí)所使用的CPU的資源上。如實(shí)現(xiàn)H.264 MP@D1解碼時(shí)所占用CPU的資源上,會(huì)有所差異,或者是所包含的算法工具子集上,如實(shí)現(xiàn)H.264 MP@D1解碼時(shí)使用CAVLC而不使用CABAC。造成這些差異,主要原因有如下因素:

算法關(guān)鍵模塊的優(yōu)化
算法系統(tǒng)集成時(shí)Memory的管理
算法系統(tǒng)集成時(shí)的EDMA的資源分配管理
本文從這三方面逐步探討算法優(yōu)化集成中需要考慮的若干因素。

算法關(guān)鍵模塊的優(yōu)化

一般而言,對(duì)于目前主流視頻解壓縮標(biāo)準(zhǔn)都有類似的很消耗DSP CPU的模塊,如H.264/AVC、MPEG4、AVS等編碼中運(yùn)動(dòng)矢量搜索很占用資源,而且這些模塊在整個(gè)系統(tǒng)實(shí)現(xiàn)過(guò)程中調(diào)用相當(dāng)頻繁,因此我們首先找出這些模塊,這點(diǎn)TI的CCS提供了工程剖析工具(Profile),可以很快找到整個(gè)工程中占用DSP CPU資源最多的模塊;然后對(duì)這些模塊進(jìn)行優(yōu)化。

對(duì)這些關(guān)鍵算法模塊的優(yōu)化我們分可以分三步進(jìn)行,如圖2所示,先認(rèn)真分析這部分代碼,并進(jìn)行相應(yīng)的調(diào)整,如盡量減少有判斷跳轉(zhuǎn)的代碼,特別是for循環(huán)中,判斷跳轉(zhuǎn)會(huì)打斷軟件流水。使用的方法,可是使用查表或者使用_cmpgtu4、_cmpeq4等Intrinsics來(lái)代替比較判斷指令,從而巧妙替代判斷跳轉(zhuǎn)語(yǔ)句。同時(shí)使用TI的CCS中所提供的#pragma提供編譯器盡量多的信息,這些信息包括for循環(huán)的次數(shù)信息、數(shù)據(jù)對(duì)齊信息等。如果經(jīng)過(guò)這部分優(yōu)化無(wú)法滿足系統(tǒng)要求,則對(duì)這部分模塊使用線性匯編實(shí)現(xiàn),線性匯編是介于C和匯編之間的一種語(yǔ)言實(shí)現(xiàn)形式,可以控制指令的使用,而不必特別關(guān)心寄存器、功能單元(S、D、M、L)的分配和使用,使用線性匯編一般會(huì)比使用C語(yǔ)言具有更高的執(zhí)行效率。如果線性匯編還無(wú)法滿足要求,則使用匯編實(shí)現(xiàn),要編寫出高并行、深軟件流水的匯編需要經(jīng)過(guò)畫相關(guān)圖,創(chuàng)建時(shí)序表(Scheduling table)等步驟,由于篇幅所限,這里就不熬述。


表1


優(yōu)化選項(xiàng):-pm, -o3,基于C64plus內(nèi)核,C+Instrinsics 是指在C中使用Instrinsics。

表1是運(yùn)動(dòng)搜索中所需要的計(jì)算16×16宏塊SAD值時(shí),不同方式下所消耗的DSP CPU的周期數(shù)。由此可見(jiàn),匯編實(shí)現(xiàn)所消耗的CPU的周期數(shù)最少,但前提是需要充分了解DSP CPU的結(jié)構(gòu)、指令以及算法模塊的結(jié)構(gòu),從而能夠編寫出高并行、深軟件流水的匯編,否則有可能所寫出的匯編還沒(méi)有線性匯編或者C效率更高。為此一個(gè)行之有效的方法是,充分利用TI所提供的算法庫(kù)中的函數(shù),因?yàn)樗惴◣?kù)中的函數(shù)都是已經(jīng)充分優(yōu)化過(guò)的算法模塊,而且大都提供對(duì)對(duì)應(yīng)的C、線性匯編和匯編源代碼,并有文檔進(jìn)行API介紹。

算法系統(tǒng)集成時(shí)Memory的管理

由于在基于DSP的嵌入式系統(tǒng)開(kāi)發(fā)中,存儲(chǔ)資源特別是片內(nèi)高速存儲(chǔ)資源有限,在算法系統(tǒng)集成時(shí)Memory的管理對(duì)于提高整個(gè)系統(tǒng)的優(yōu)化是非常重要的,這一方面影響數(shù)據(jù)的讀取、搬移速度;另一方面還影響Cache的命中率,下面分程序和數(shù)據(jù)兩方面分析。

程序區(qū):最大原則是將經(jīng)常調(diào)度使用的算法模塊放片內(nèi)。為做到這點(diǎn),TI的CCS中提供了#pragma CODE_SECTION,可以把需要單獨(dú)控制存放的函數(shù)段從.text段中獨(dú)立出來(lái),從而在.cmd文件中對(duì)這些函數(shù)段進(jìn)行單獨(dú)物理地址映射。還可以使用程序動(dòng)態(tài)的方式,將需要運(yùn)行的代碼段先調(diào)度進(jìn)片內(nèi)memory,如H.264/AVC中CAVLC和CABAC兩個(gè)算法模塊具有互斥性,因此可以將這兩個(gè)算法模塊放在片外而且對(duì)應(yīng)于片內(nèi)同一塊運(yùn)行區(qū),在運(yùn)行其中某一個(gè)算法模塊之前,先將其調(diào)入片內(nèi),從而充分利用片內(nèi)有限的高速存儲(chǔ)區(qū)。程序區(qū)的管理考慮到一級(jí)程序Cache(L1 P)的命中率,最好將具有先后執(zhí)行順序的函數(shù)按地址先后順序配置在

程序空間中,同時(shí)對(duì)代碼比較大的處理函數(shù)將其拆分成小函數(shù)。

數(shù)據(jù)區(qū):在視頻標(biāo)準(zhǔn)編解碼中,由于數(shù)據(jù)塊都很大,如一幀D1 4:2:0的圖像有622k大小,而且在編解碼中都需要開(kāi)3~5幀甚至更多的緩沖幀,因此數(shù)據(jù)基本上無(wú)法在片內(nèi)存放。為此在系統(tǒng)的Memory優(yōu)化管理中,需要開(kāi)C64系列DSP的二級(jí)Cache(對(duì)于TMS320DM642用于視頻編解碼中二級(jí)Cache開(kāi)64k的情況比較多)。同時(shí)最好將放片外的被Cache所映射的視頻緩沖區(qū)的數(shù)據(jù)以128 byte對(duì)齊,這是因?yàn)镃64系列的DSP的二級(jí)Cache的每行大小為128 byte,以128 byte對(duì)齊有利于Cache的刷新和一致性維護(hù)。

算法系統(tǒng)集成時(shí)的EDMA的資源分配管理

由于在視頻處理中,會(huì)經(jīng)常有塊數(shù)據(jù)的搬移,而且C64系列DSP提供了EDMA,邏輯上有64個(gè)通道,因此對(duì)EDMA的配置使用對(duì)優(yōu)化系統(tǒng)是非常重要的。為此可以使用下述步驟進(jìn)行充分配置系統(tǒng)的EDMA資源。

1. 統(tǒng)計(jì)系統(tǒng)中各種需要使用EDMA的情況及其大概需要占用的EDMA物理總線的時(shí)間,如表2所示:

注意:該表針對(duì)視頻通過(guò)視頻端口(Video Port)(720*480,4:2:0,30Frame/s),音頻通過(guò)McBSP(采樣率為44k)進(jìn)入DSP,壓縮好的數(shù)據(jù)數(shù)率在2Mbps左右,數(shù)據(jù)通過(guò)PCI每488uS輸出一個(gè)128byte的包(PCI口工作頻率為33MHz),外掛SDRAM的時(shí)鐘頻率為133MHz,只做一個(gè)參考應(yīng)用例子。

2. 統(tǒng)計(jì)好這些信息后,需要依據(jù)系統(tǒng)對(duì)各種碼流實(shí)時(shí)性、及其傳輸數(shù)據(jù)塊大小對(duì)各個(gè)被使用的EDMA通道進(jìn)行優(yōu)先級(jí)分配。一般而言,由于音頻流傳輸塊小,因此占用EDMA總線的時(shí)間短,而視頻傳輸塊比較大,占用EDMA總線的時(shí)間較長(zhǎng),因此將輸入音頻所對(duì)應(yīng)的EDMA通道的優(yōu)先級(jí)設(shè)定為Q0(urgent),視頻的優(yōu)先級(jí)設(shè)定為Q2(medium),輸出碼流所對(duì)應(yīng)的EDMA通道的優(yōu)先級(jí)設(shè)定為Q1(high),音處理中所調(diào)度的QDMA的優(yōu)先級(jí)設(shè)定為Q3(low)。當(dāng)然這些設(shè)定在真正系統(tǒng)應(yīng)用中可能還需要調(diào)整的。

實(shí)際的基于TI DSP優(yōu)化集成過(guò)程,會(huì)是基于圖1所示的步驟,先初步配置Memory,并選擇相應(yīng)編譯優(yōu)化選項(xiàng),如果編譯的結(jié)果已經(jīng)可以達(dá)到實(shí)時(shí)性要求之后就結(jié)束后面的優(yōu)化;否則開(kāi)始優(yōu)化Memory和EDMA的配置,從而提高對(duì)Cache和內(nèi)部總線的利用率;如果還無(wú)法達(dá)到要求則通過(guò)剖析整個(gè)工程確定消耗CPU資源最高的代碼段或者函數(shù),對(duì)這些關(guān)鍵模塊進(jìn)行優(yōu)化,采用線性匯編、甚至匯編直到整個(gè)系統(tǒng)可以滿足要求為止。



關(guān)鍵詞: 視頻算法 DSP

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉