国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C6000 DSP的H.264算法的SIMD優(yōu)化

2012-06-29 01:37:46黃海云
電視技術(shù) 2012年2期
關(guān)鍵詞:語句指令濾波

廖 諍,黃海云,賈 楊

(國家知識產(chǎn)權(quán)局專利局 專利審查協(xié)作北京中心,北京 100190)

在C6000系列DSP芯片中實現(xiàn)H.264算法進(jìn)行視頻壓縮編碼,已廣泛應(yīng)用于多媒體、數(shù)字電視、圖像處理、視頻監(jiān)控、可視電話、視頻桌面系統(tǒng)等視頻信號處理領(lǐng)域,應(yīng)用單指令多數(shù)據(jù)流(Single Instruction Multiple Data,SIMD)技術(shù)對H.264算法進(jìn)行代碼級優(yōu)化,可在無PSNR(峰值信噪比)損失的情況下,有效提高程序運行速度,滿足視頻領(lǐng)域?qū)崟r信號處理的要求。

1 優(yōu)化方法概述

DSP端代碼的優(yōu)化主要分為三個層次:項目級優(yōu)化、算法級優(yōu)化和代碼級優(yōu)化[1]。代碼級優(yōu)化的優(yōu)點是,加入優(yōu)化函數(shù)模塊前后,程序運行結(jié)果不變,沒有PSNR(峰值信噪比)損失,且程序運行速度得到提高。

在進(jìn)行代碼優(yōu)化的過程中,主要采用了SIMD技術(shù)。類似于Intel公司的MMX/SSE/SSE2指令集所采用的奔騰單指令多數(shù)據(jù)(Single Instruction Multiple Data,SIMD)技術(shù),C6000 DSP中也提供了自己的單指令多數(shù)據(jù)流(SIMD)指令集,雖然沒有MMX指令集中的指令及寄存器資源豐富,但其仍可以通過對成組數(shù)據(jù)并行操作最大限度地提高運行速度。

進(jìn)行代碼級優(yōu)化的目標(biāo)主要是程序中耗時比較大和調(diào)用比較頻繁的運算模塊。對代碼進(jìn)行分析及查閱文獻(xiàn)的結(jié)果顯示,DCT、IDCT、量化、SAD、去方塊濾波、運動估計(1/2,1/4像素插值)和運動補(bǔ)償運算量占程序總運算量的比重很大[2-7],因此這部分函數(shù)是程序優(yōu)化的重點。下面分別對這幾個函數(shù)模塊的優(yōu)化方法及優(yōu)化結(jié)果進(jìn)行介紹。

2 主要優(yōu)化模塊

2.1 DCT函數(shù)的優(yōu)化

對函數(shù)add4x4_idct,主要利用C64X提供的帶飽和的打包指令_spacku4進(jìn)行算法改進(jìn)。對函數(shù)dct4x4dc,優(yōu)化時打開函數(shù)中循環(huán),并采用SIMD技術(shù),一次對2個16 bit數(shù)據(jù)進(jìn)行操作。

2.2 量化、反量化函數(shù)的優(yōu)化

對待優(yōu)化函數(shù)quant_4x4進(jìn)行分析,看出量化系數(shù)的范圍在16 bit之內(nèi),沒有必要采用int型的量化系數(shù)矩陣,因此將量化系數(shù)矩陣的數(shù)據(jù)格式改為short型。由于函數(shù)中存在判斷語句,考慮通過將判斷條件作為標(biāo)志量flag,使其參加運算,而不進(jìn)行條件判斷,但經(jīng)過實驗證明,該方法并沒有提高程序的運行速度。又考慮到判斷語句和運算同時存在于循環(huán)中,優(yōu)化編譯器無法對循環(huán)中的運算進(jìn)行流水,影響了運算整體的運行速度,因此,將循環(huán)中的判斷語句與運算分別放入兩個不同的循環(huán)中進(jìn)行,這樣編譯器會對含有運算的循環(huán)進(jìn)行優(yōu)化,從而提高程序速度。

對函數(shù)dequant_4x4,優(yōu)化時首先分析待優(yōu)化函數(shù)的數(shù)據(jù)范圍,將反量化矩陣的數(shù)據(jù)類型由(int)型改為(short)型,同時在兩個16 bit數(shù)據(jù)相乘時,根據(jù)其數(shù)據(jù)范圍判斷其乘積不會超過16 bit[8],因此進(jìn)行了直接截取,采用SIMD技術(shù),一次對2個16 bit數(shù)據(jù)進(jìn)行操作的方法,減少循環(huán)次數(shù)。

2.3 去方塊濾波函數(shù)的優(yōu)化

對deblock_v_luma_c函數(shù),優(yōu)化時考慮到函數(shù)中存在較多的判斷語句,比較耗時,因此主要采用了將函數(shù)中判斷語句簡化為標(biāo)志量的方法進(jìn)行優(yōu)化。在采用簡化函數(shù)中判斷語句的方法進(jìn)行優(yōu)化前,曾考慮采用SIMD方法進(jìn)行優(yōu)化,但存在2個比較主要的問題:一是DSP中SIMD指令相對MMX指令要少,很多相應(yīng)操作沒有找到合適的SIMD指令;二是在進(jìn)行horizon方向的濾波時,如果要進(jìn)行SIMD的優(yōu)化,首先要對輸入數(shù)據(jù)做比較復(fù)雜的打包處理,影響優(yōu)化效果。由于上述2個原因,對去方塊濾波函數(shù)沒有采用SIMD方法進(jìn)行優(yōu)化。

對deblock_h_luma_c,deblock_v_luma_intra_c及deblock_h_luma_intra_c函數(shù),優(yōu)化時均采用了與函數(shù)deblock_v_luma_c類似的優(yōu)化方法。

2.4 插值函數(shù)的優(yōu)化

對mc_hh函數(shù),優(yōu)化函數(shù)主要通過調(diào)用x264_tapfilter1_opt4in1函數(shù),代替了原函數(shù)中調(diào)用的x264_tapfilter1及 x264_mc_clip1。x264_tapfilter1_opt4in1函數(shù)根據(jù)數(shù)據(jù)結(jié)構(gòu)的特點進(jìn)行了編排,由于x264_tapfilter1實際為6抽頭濾波器,因此在x264_tapfilter1_opt4in1函數(shù)中6次調(diào)用_mem4函數(shù),每次取出X方向上連續(xù)的4個unsigned char數(shù)據(jù),采用SIMD的內(nèi)聯(lián)函數(shù)指令,這樣進(jìn)行一次6抽頭的濾波操作,可同時完成對4組數(shù)據(jù)的6抽頭濾波,其數(shù)據(jù)處理的結(jié)構(gòu)如圖1所示。

在x264_tapfilter1_opt4in1函數(shù)中,還根據(jù)數(shù)據(jù)的范圍將 unsigned char通過_mpyu4(src[j],0x01010101)指令進(jìn)行無符號的擴(kuò)展,成為16 bit數(shù)據(jù),以進(jìn)行進(jìn)一步計算;通過_spacku4指令進(jìn)行數(shù)據(jù)鉗位操作[9]。

對函數(shù)mc_hv,優(yōu)化函數(shù)主要通過調(diào)用x264_tapfilter_opt4in1函數(shù),代替了原函數(shù)中調(diào)用的x264_tapfilter及x264_mc_clip1。x264_tapfilter_opt4in1函數(shù)根據(jù)數(shù)據(jù)結(jié)構(gòu)的特點進(jìn)行了編排,由于x264_tapfilter實際為6抽頭濾波器,因此在x264_tapfilter_opt4in1函數(shù)中6次調(diào)用_mem4函數(shù),每次取出X方向上連續(xù)的4個unsigned char數(shù)據(jù),采用SIMD的內(nèi)聯(lián)函數(shù)指令,這樣進(jìn)行一次6抽頭的濾波操作,可同時完成對4組數(shù)據(jù)的6抽頭濾波,其數(shù)據(jù)處理的結(jié)構(gòu)如圖2所示。

對于函數(shù)mc_hc,優(yōu)化時首先分析待優(yōu)化函數(shù)的處理過程,如圖3所示,在一次計算中首先對X方向6行像素點分別進(jìn)行6抽頭濾波,然后對濾波結(jié)果tap[0]~tap[5]進(jìn)行6抽頭垂直濾波,故對6×6的像素點進(jìn)行處理,可產(chǎn)生一個*out結(jié)果數(shù)據(jù)。在下一次的垂直濾波中,僅需再進(jìn)行一次水平6抽頭濾波,就可與已經(jīng)計算出的tap[1]~tap[5]進(jìn)行垂直濾波,產(chǎn)生新的結(jié)果數(shù)據(jù)*(out+i_dst_stride)。

前面已經(jīng)在對函數(shù)mc_hh的優(yōu)化中,完成了一次進(jìn)行4組6抽頭水平濾波的優(yōu)化,在對函數(shù)mc_hv的優(yōu)化中,完成了一次進(jìn)行4組6抽頭垂直濾波的優(yōu)化,因此mc_hc的優(yōu)化過程如圖4所示。

優(yōu)化后函數(shù)每次對9×9個數(shù)據(jù)進(jìn)行處理,先調(diào)用x264_tapfilter1_opt4in1函數(shù)對水平方向上的9個數(shù)據(jù)[3],進(jìn)行水平方向的6抽頭濾波,產(chǎn)生了4個tap數(shù)據(jù),然后利用部分tap數(shù)據(jù)的重復(fù)性,進(jìn)行了4次垂直方向的6抽頭濾波,每次濾波產(chǎn)生4個結(jié)果數(shù)據(jù),因此一次處理可產(chǎn)生16個unsigned char結(jié)果數(shù)據(jù)。

然而,由于在未優(yōu)化函數(shù)中,水平濾波時的結(jié)果沒有進(jìn)行求均值(右移)操作,而將中間結(jié)果數(shù)據(jù)保存為int型,然后在對int型數(shù)據(jù)進(jìn)行垂直濾波后才統(tǒng)一進(jìn)行了求均值(〉〉10)的操作,最后將垂直濾波后的結(jié)果保留為(unsigned char)型。但依照上面所述的優(yōu)化過程,在進(jìn)行水平濾波時,就已經(jīng)進(jìn)行了平均,保存的中間結(jié)果即為(unsigned char)型,垂直濾波也是對(unsigned char)型進(jìn)行的,因此優(yōu)化后的結(jié)果與未優(yōu)化函數(shù)產(chǎn)生的結(jié)果有一定的差距,但該差距是有計算精度帶來的,并不是錯誤。

為滿足與原版本程序結(jié)果一致性的需求,還對原函數(shù)采用其它方法進(jìn)行了優(yōu)化,但僅利用了水平濾波結(jié)果tap的重復(fù)性,因此優(yōu)化效果不太理想。

2.5 運動補(bǔ)償函數(shù)的優(yōu)化

對于函數(shù)mc_luma,分析待優(yōu)化函數(shù),由于其存在條件判斷分支,但其中一個分支的運算比較復(fù)雜,一個僅是簡單的數(shù)據(jù)copy,并不適合采用類似去方塊中采用的標(biāo)志位方法,去掉條件判斷,因此僅對第一個分支中的pixel_avg函數(shù)采用SIMD方法進(jìn)行了優(yōu)化,優(yōu)化后該函數(shù)一次可對4個像素點進(jìn)行平均。

對于函數(shù)get_ref,優(yōu)化時采用了與函數(shù)mc_luma類似的優(yōu)化方法。

2.6 模塊優(yōu)化結(jié)果匯總

模塊優(yōu)化結(jié)果匯總在表1中。

表1 運動補(bǔ)償函數(shù)的優(yōu)化結(jié)果

3 優(yōu)化結(jié)果總結(jié)及前景展望

綜上所述,在對DCT、IDCT進(jìn)行優(yōu)化的過程中主要采用了SIMD技術(shù);在對量化、反量化進(jìn)行優(yōu)化的過程中,主要將量化及反量化系數(shù)矩陣的數(shù)據(jù)類型由int型改為了short型,并將判斷語句與計算語句分別進(jìn)行循環(huán);在對去方塊濾波函數(shù)進(jìn)行優(yōu)化的過程中,主要通過將標(biāo)志位加入運算式的方法,去除了循環(huán)中的判斷語句;在對插值函數(shù)進(jìn)行優(yōu)化的過程中,主要利用了數(shù)據(jù)結(jié)構(gòu)的重復(fù)性,并采用了SIMD技術(shù);在對運動補(bǔ)償函數(shù)進(jìn)行優(yōu)化的過程中,也主要采用了SIMD技術(shù)。

將上述優(yōu)化后的函數(shù)模塊替換原函數(shù),其運行結(jié)果不變,運行時間如表2所示。

表2 加入優(yōu)化函數(shù)模塊前后單幀運行時間統(tǒng)計表

在今后的工作中還可對采用SIMD技術(shù)進(jìn)行代碼級優(yōu)化進(jìn)行進(jìn)一步研究,對圖像壓縮編碼程序中效率較低或之前優(yōu)化效果不理想的模塊進(jìn)行進(jìn)一步優(yōu)化。同時,也可將該方法應(yīng)用于除H.264算法以外的DSP程序中,提高嵌入式系統(tǒng)的運行效率,滿足用戶日益增長的對信號進(jìn)行實時處理的需求。

[1]張旭東,魏振宇,史鹍.H.264編解碼器在C6416 DSP上的實現(xiàn)與優(yōu)化[J].電子產(chǎn)品世界,2005(5):71-74.

[2]安向陽,沈庭芝.基于DSP TMS320DM642的H.264視頻編碼的實現(xiàn)和優(yōu)化[J].微計算機(jī)信息,2005(20):128-130.

[3]林冰,馮艷,李學(xué)明.基于Trimedia DSP的H.264解碼算法優(yōu)化[J].計算機(jī)工程與應(yīng)用,2005,41(31):41-45.

[4]陳維安,李典,余松煜,等.H.264軟件解碼器的優(yōu)化[J].數(shù)據(jù)采集與處理,2005,20(4):493-498.

[5]朱冬冬,丁嶸,尹亞光,等.H.264軟件解碼器的優(yōu)化[J].電視技術(shù),2003,27(12):4-6.

[6]朱林,馮燕.基于單指令多數(shù)據(jù)技術(shù)的H.264編碼優(yōu)化[J].計算機(jī)應(yīng)用,2005,25(12):2798-2799.

[7]鹿寶生,陳啟美.H.264高性能視頻編碼器的DSP實現(xiàn)[J].計算機(jī)應(yīng)用,2005,25(12):2824-2827.

[8]張琦,萬楓丹,段柯,等.基于MMX/SSE/SSE2的H.264解碼器關(guān)鍵算法優(yōu)化[J].信息與電子工程,2006,4(1):14-17.

[9]陳梅芳.基于TMS320DM642的H.264解碼器優(yōu)化[J].現(xiàn)代電子技術(shù),2006,29(3):112-115.

猜你喜歡
語句指令濾波
聽我指令:大催眠術(shù)
重點:語句銜接
ARINC661顯控指令快速驗證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
精彩語句
RTS平滑濾波在事后姿態(tài)確定中的應(yīng)用
基于線性正則變換的 LMS 自適應(yīng)濾波
遙測遙控(2015年2期)2015-04-23 08:15:18
如何搞定語句銜接題
語文知識(2014年4期)2014-02-28 21:59:52
坐標(biāo)系旋轉(zhuǎn)指令數(shù)控編程應(yīng)用
基于隨機(jī)加權(quán)估計的Sage自適應(yīng)濾波及其在導(dǎo)航中的應(yīng)用
靖边县| 景东| 萨迦县| 龙泉市| 曲沃县| 民丰县| 兴安县| 淳化县| 彰武县| 双牌县| 霸州市| 连州市| 柯坪县| 张家口市| 新泰市| 璧山县| 白河县| 山阴县| 河曲县| 寿阳县| 紫阳县| 罗江县| 灵宝市| 安丘市| 郑州市| 宁乡县| 肥城市| 苗栗市| 封丘县| 呼图壁县| 醴陵市| 连山| 普定县| 桑植县| 临城县| 什邡市| 吴桥县| 锡林郭勒盟| 长泰县| 新泰市| 通州市|