亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        廖 諍,黃海云,賈 楊

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        對(duì)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)的特點(diǎn)進(jìn)行了編排,由于x264_tapfilter1實(shí)際為6抽頭濾波器,因此在x264_tapfilter1_opt4in1函數(shù)中6次調(diào)用_mem4函數(shù),每次取出X方向上連續(xù)的4個(gè)unsigned char數(shù)據(jù),采用SIMD的內(nèi)聯(lián)函數(shù)指令,這樣進(jìn)行一次6抽頭的濾波操作,可同時(shí)完成對(duì)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)行無符號(hào)的擴(kuò)展,成為16 bit數(shù)據(jù),以進(jìn)行進(jìn)一步計(jì)算;通過_spacku4指令進(jìn)行數(shù)據(jù)鉗位操作[9]。

        對(duì)函數(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)的特點(diǎn)進(jìn)行了編排,由于x264_tapfilter實(shí)際為6抽頭濾波器,因此在x264_tapfilter_opt4in1函數(shù)中6次調(diào)用_mem4函數(shù),每次取出X方向上連續(xù)的4個(gè)unsigned char數(shù)據(jù),采用SIMD的內(nèi)聯(lián)函數(shù)指令,這樣進(jìn)行一次6抽頭的濾波操作,可同時(shí)完成對(duì)4組數(shù)據(jù)的6抽頭濾波,其數(shù)據(jù)處理的結(jié)構(gòu)如圖2所示。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        [3]林冰,馮艷,李學(xué)明.基于Trimedia DSP的H.264解碼算法優(yōu)化[J].計(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ì)算機(jī)應(yīng)用,2005,25(12):2798-2799.

        [7]鹿寶生,陳啟美.H.264高性能視頻編碼器的DSP實(shí)現(xiàn)[J].計(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ù)
        重點(diǎn):語句銜接
        ARINC661顯控指令快速驗(yàn)證方法
        LED照明產(chǎn)品歐盟ErP指令要求解讀
        精彩語句
        RTS平滑濾波在事后姿態(tài)確定中的應(yīng)用
        基于線性正則變換的 LMS 自適應(yīng)濾波
        如何搞定語句銜接題
        坐標(biāo)系旋轉(zhuǎn)指令數(shù)控編程應(yīng)用
        基于隨機(jī)加權(quán)估計(jì)的Sage自適應(yīng)濾波及其在導(dǎo)航中的應(yīng)用
        99精品国产一区二区三区不卡| 国产精品乱一区二区三区| 欧美日韩一区二区三区视频在线观看 | 精品久久日产国产一区| 日本熟女精品一区二区三区| 天天爽夜夜爽人人爽一区二区| 国产一区二区三区美女| 少妇高潮惨叫久久久久电影| 白白白色视频在线观看播放| 日韩人妻中文字幕高清在线| 久久综合九色综合97欧美| av片在线观看免费| 一区二区三区日本大片| 在线观看国产自拍视频| 中文在线中文a| 亚洲美免无码中文字幕在线| 国产成年无码aⅴ片在线观看| 少妇熟女天堂网av天堂| 领导边摸边吃奶边做爽在线观看 | 欧美肥婆性猛交xxxx| 女人大荫蒂毛茸茸视频| 男女高潮免费观看无遮挡| 日本高清一区在线你懂得| 色翁荡息又大又硬又粗视频| 男女啪啪免费体验区| 国产欧美日韩图片一区二区| 少妇精品揄拍高潮少妇桃花岛| av国产传媒精品免费| 精品国产sm捆绑最大网免费站| 91亚洲国产三上悠亚在线播放| 男女性生活视频免费网站| 无码无套少妇毛多18p| 亚洲中文字幕无码专区| 91精品国产综合久久青草| 国产麻豆久久av入口| 伊人久久大香线蕉综合网站| 国产精品国产三级国产专区5o| 国产二区中文字幕在线观看| 午夜精品久久久久久久99热| 欧美人与动人物姣配xxxx| 亚洲AV毛片无码成人区httP|