基于DSP的視頻算法系統(tǒng)優(yōu)化若干策略
發(fā)布時間:2008/8/22 0:00:00 訪問次數(shù):532
數(shù)字視頻產(chǎn)品需求近些年出現(xiàn)猛增。主流應(yīng)用包括視頻通信、視頻監(jiān)控與工業(yè)自動化,而最熱門的要算娛樂應(yīng)用,如 dvd、hdtv、衛(wèi)星電視、標(biāo)清(sd)或高清 (hd) 機(jī)頂盒、數(shù)碼相機(jī)與 hd 攝像機(jī)、高端顯示器(lcd、等離子顯示器、dlp)以及個人攝像機(jī)等。這些應(yīng)用都向高質(zhì)量的視頻編解碼算法及其標(biāo)準(zhǔn)提出巨大需求,目前主流壓縮標(biāo)準(zhǔn)主要有mpeg2、mpeg4和h.264/avc,而針對這些編解碼標(biāo)準(zhǔn)有各種各樣的實(shí)現(xiàn)方案。本文主要探討基于ti 的c64系列dsp的視頻解碼算法標(biāo)準(zhǔn)系統(tǒng)優(yōu)化過程中需要考慮的若干因素。
ti的c64系列dsp以其強(qiáng)大的處理能力被廣泛用于視頻處理領(lǐng)域,然而由于大家對c64系列dsp的結(jié)構(gòu)、指令、的理解程度不一樣,造成算法實(shí)現(xiàn)時的效果有許多的差異。具體體現(xiàn)在實(shí)現(xiàn)算法時所使用的cpu的資源上。如實(shí)現(xiàn)h.264 mp@d1解碼時所占用cpu的資源上,會有所差異,或者是所包含的算法工具子集上,如實(shí)現(xiàn)h.264 mp@d1解碼時使用cavlc而不使用cabac。造成這些差異,主要原因有如下因素:
- 算法關(guān)鍵模塊的優(yōu)化
- 算法系統(tǒng)集成時memory的管理
- 算法系統(tǒng)集成時的edma的資源分配管理
本文從這三方面逐步探討算法優(yōu)化集成中需要考慮的若干因素。
算法關(guān)鍵模塊的優(yōu)化
一般而言,對于目前主流視頻解壓縮標(biāo)準(zhǔn)都有類似的很消耗dsp cpu的模塊,如h.264/avc、mpeg4、avs等編碼中運(yùn)動矢量搜索很占用資源,而且這些模塊在整個系統(tǒng)實(shí)現(xiàn)過程中調(diào)用相當(dāng)頻繁,因此我們首先找出這些模塊,這點(diǎn)ti的ccs提供了工程剖析工具(profile),可以很快找到整個工程中占用dsp cpu資源最多的模塊;然后對這些模塊進(jìn)行優(yōu)化。
對這些關(guān)鍵算法模塊的優(yōu)化我們分可以分三步進(jìn)行,如圖2所示,先認(rèn)真分析這部分代碼,并進(jìn)行相應(yīng)的調(diào)整,如盡量減少有判斷跳轉(zhuǎn)的代碼,特別是for循環(huán)中,判斷跳轉(zhuǎn)會打斷軟件流水。使用的方法,可是使用查表或者使用_cmpgtu4、_cmpeq4等intrinsics來代替比較判斷指令,從而巧妙替代判斷跳轉(zhuǎn)語句。同時使用ti的ccs中所提供的#pragma提供編譯器盡量多的信息,這些信息包括for循環(huán)的次數(shù)信息、數(shù)據(jù)對齊信息等。如果經(jīng)過這部分優(yōu)化無法滿足系統(tǒng)要求,則對這部分模塊使用線性匯編實(shí)現(xiàn),線性匯編是介于c和匯編之間的一種語言實(shí)現(xiàn)形式,可以控制指令的使用,而不必特別關(guān)心寄存器、功能單元(s、d、m、l)的分配和使用,使用線性匯編一般會比使用c語言具有更高的執(zhí)行效率。如果線性匯編還無法滿足要求,則使用匯編實(shí)現(xiàn),要編寫出高并行、深軟件流水的匯編需要經(jīng)過畫相關(guān)圖,創(chuàng)建時序表(scheduling table)等步驟,由于篇幅所限,這里就不熬述。
表1
使用方式 | 周期數(shù) |
c+intrinsics | 83 |
線性匯編 | 74 |
匯編 | 57 |
優(yōu)化選項(xiàng):-pm, -o3,基于c64plus內(nèi)核,c+instrinsics 是指在c中使用instrinsics。
表1是運(yùn)動搜索中所需要的計(jì)算16×16宏塊sad值時,不同方式下所消耗的dsp cpu的周期數(shù)。由此可見,匯編實(shí)現(xiàn)所消耗的cpu的周期數(shù)最少,但前提是需要充分了解dsp cpu的結(jié)構(gòu)、指令以及算法模塊的結(jié)構(gòu),從而能夠編寫出高并行、深軟件流水的匯編,否則有可能所寫出的匯編還沒有線性匯編或者c效率更高。為此一個行之有效的方法是,充分利用ti所提供的算法庫中的函數(shù),因?yàn)樗惴◣熘械暮瘮?shù)都是已經(jīng)充分優(yōu)化過的算法模塊,而且大都提供對對應(yīng)的c、線性匯編和匯編源代碼,并有文檔進(jìn)行api介紹。
算法系統(tǒng)集成時memory的管理
由于在基于dsp的嵌入式系統(tǒng)開發(fā)中,存儲資源特別是片內(nèi)高速存儲資源有限,在算法系統(tǒng)集成時memory的管理對于提高整個系統(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ú)立出來,從而在.cmd文件中對這些函數(shù)段進(jìn)行單獨(dú)物理地址映射。還可以使用程序動態(tài)的方式,將需要運(yùn)行的代碼段先調(diào)度進(jìn)片內(nèi)memory,如h.264/avc中cavlc和cabac兩個算法模塊具有互斥性,因此可以將這兩個算法模塊放在片外而且對應(yīng)于片內(nèi)同一塊運(yùn)行區(qū),在運(yùn)行其中某一個算法模塊之前,先將其調(diào)入片內(nèi),從而充分利用片內(nèi)有限的高速存儲區(qū)。程序區(qū)的管理考慮到一級程序cache(l1 p)的命中率,最好將具有先后執(zhí)行順序的函數(shù)按地址先后順序配置在程序空間中,
數(shù)字視頻產(chǎn)品需求近些年出現(xiàn)猛增。主流應(yīng)用包括視頻通信、視頻監(jiān)控與工業(yè)自動化,而最熱門的要算娛樂應(yīng)用,如 dvd、hdtv、衛(wèi)星電視、標(biāo)清(sd)或高清 (hd) 機(jī)頂盒、數(shù)碼相機(jī)與 hd 攝像機(jī)、高端顯示器(lcd、等離子顯示器、dlp)以及個人攝像機(jī)等。這些應(yīng)用都向高質(zhì)量的視頻編解碼算法及其標(biāo)準(zhǔn)提出巨大需求,目前主流壓縮標(biāo)準(zhǔn)主要有mpeg2、mpeg4和h.264/avc,而針對這些編解碼標(biāo)準(zhǔn)有各種各樣的實(shí)現(xiàn)方案。本文主要探討基于ti 的c64系列dsp的視頻解碼算法標(biāo)準(zhǔn)系統(tǒng)優(yōu)化過程中需要考慮的若干因素。
ti的c64系列dsp以其強(qiáng)大的處理能力被廣泛用于視頻處理領(lǐng)域,然而由于大家對c64系列dsp的結(jié)構(gòu)、指令、的理解程度不一樣,造成算法實(shí)現(xiàn)時的效果有許多的差異。具體體現(xiàn)在實(shí)現(xiàn)算法時所使用的cpu的資源上。如實(shí)現(xiàn)h.264 mp@d1解碼時所占用cpu的資源上,會有所差異,或者是所包含的算法工具子集上,如實(shí)現(xiàn)h.264 mp@d1解碼時使用cavlc而不使用cabac。造成這些差異,主要原因有如下因素:
- 算法關(guān)鍵模塊的優(yōu)化
- 算法系統(tǒng)集成時memory的管理
- 算法系統(tǒng)集成時的edma的資源分配管理
本文從這三方面逐步探討算法優(yōu)化集成中需要考慮的若干因素。
算法關(guān)鍵模塊的優(yōu)化
一般而言,對于目前主流視頻解壓縮標(biāo)準(zhǔn)都有類似的很消耗dsp cpu的模塊,如h.264/avc、mpeg4、avs等編碼中運(yùn)動矢量搜索很占用資源,而且這些模塊在整個系統(tǒng)實(shí)現(xiàn)過程中調(diào)用相當(dāng)頻繁,因此我們首先找出這些模塊,這點(diǎn)ti的ccs提供了工程剖析工具(profile),可以很快找到整個工程中占用dsp cpu資源最多的模塊;然后對這些模塊進(jìn)行優(yōu)化。
對這些關(guān)鍵算法模塊的優(yōu)化我們分可以分三步進(jìn)行,如圖2所示,先認(rèn)真分析這部分代碼,并進(jìn)行相應(yīng)的調(diào)整,如盡量減少有判斷跳轉(zhuǎn)的代碼,特別是for循環(huán)中,判斷跳轉(zhuǎn)會打斷軟件流水。使用的方法,可是使用查表或者使用_cmpgtu4、_cmpeq4等intrinsics來代替比較判斷指令,從而巧妙替代判斷跳轉(zhuǎn)語句。同時使用ti的ccs中所提供的#pragma提供編譯器盡量多的信息,這些信息包括for循環(huán)的次數(shù)信息、數(shù)據(jù)對齊信息等。如果經(jīng)過這部分優(yōu)化無法滿足系統(tǒng)要求,則對這部分模塊使用線性匯編實(shí)現(xiàn),線性匯編是介于c和匯編之間的一種語言實(shí)現(xiàn)形式,可以控制指令的使用,而不必特別關(guān)心寄存器、功能單元(s、d、m、l)的分配和使用,使用線性匯編一般會比使用c語言具有更高的執(zhí)行效率。如果線性匯編還無法滿足要求,則使用匯編實(shí)現(xiàn),要編寫出高并行、深軟件流水的匯編需要經(jīng)過畫相關(guān)圖,創(chuàng)建時序表(scheduling table)等步驟,由于篇幅所限,這里就不熬述。
表1
使用方式 | 周期數(shù) |
c+intrinsics | 83 |
線性匯編 | 74 |
匯編 | 57 |
優(yōu)化選項(xiàng):-pm, -o3,基于c64plus內(nèi)核,c+instrinsics 是指在c中使用instrinsics。
表1是運(yùn)動搜索中所需要的計(jì)算16×16宏塊sad值時,不同方式下所消耗的dsp cpu的周期數(shù)。由此可見,匯編實(shí)現(xiàn)所消耗的cpu的周期數(shù)最少,但前提是需要充分了解dsp cpu的結(jié)構(gòu)、指令以及算法模塊的結(jié)構(gòu),從而能夠編寫出高并行、深軟件流水的匯編,否則有可能所寫出的匯編還沒有線性匯編或者c效率更高。為此一個行之有效的方法是,充分利用ti所提供的算法庫中的函數(shù),因?yàn)樗惴◣熘械暮瘮?shù)都是已經(jīng)充分優(yōu)化過的算法模塊,而且大都提供對對應(yīng)的c、線性匯編和匯編源代碼,并有文檔進(jìn)行api介紹。
算法系統(tǒng)集成時memory的管理
由于在基于dsp的嵌入式系統(tǒng)開發(fā)中,存儲資源特別是片內(nèi)高速存儲資源有限,在算法系統(tǒng)集成時memory的管理對于提高整個系統(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ú)立出來,從而在.cmd文件中對這些函數(shù)段進(jìn)行單獨(dú)物理地址映射。還可以使用程序動態(tài)的方式,將需要運(yùn)行的代碼段先調(diào)度進(jìn)片內(nèi)memory,如h.264/avc中cavlc和cabac兩個算法模塊具有互斥性,因此可以將這兩個算法模塊放在片外而且對應(yīng)于片內(nèi)同一塊運(yùn)行區(qū),在運(yùn)行其中某一個算法模塊之前,先將其調(diào)入片內(nèi),從而充分利用片內(nèi)有限的高速存儲區(qū)。程序區(qū)的管理考慮到一級程序cache(l1 p)的命中率,最好將具有先后執(zhí)行順序的函數(shù)按地址先后順序配置在程序空間中,
上一篇:怎樣使用DSP的cache
上一篇:DSP入門必看
熱門點(diǎn)擊
- 怎樣使用DSP的cache
- DSP入門必看
- 中斷在TMS320C54x系列DSP中的應(yīng)用
- 調(diào)度器在DSP編程中的應(yīng)用
- TI推出可編程PLL時鐘合成器
- matlab濾波器設(shè)計(jì)-IIR濾波器的設(shè)計(jì)與
- 智安邦攜TI推出SMTK02智能視頻服務(wù)器產(chǎn)
- C代碼在TMS320C54X上的手工匯編優(yōu)化
- 雙TSC695F處理器在微小衛(wèi)星電子平臺中的
- 16位高速A/D轉(zhuǎn)換器在高速DSP中的應(yīng)用
推薦技術(shù)資料
- 業(yè)余條件下PCM2702
- PGM2702采用SSOP28封裝,引腳小而密,EP3... [詳細(xì)]
- 電磁與聲學(xué)結(jié)合混合濾波技術(shù)(H
- 超高性能芯片式電磁濾波技術(shù)(S
- 紫、藍(lán)、綠光激光二極管工藝封測
- SPICE模型ROHM Lev
- 高性能碳化硅(SiC)MOS功
- 新一代光纖通信的光收發(fā)器接收器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究