AVS 帧内预测模式的汇编优化
生活随笔
收集整理的這篇文章主要介紹了
AVS 帧内预测模式的汇编优化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
王瑞*
基金項目:本課題得到國家自然科學(xué)基金資助項目基金(項目編號:60772101)的資助。
作者簡介:王瑞(1986—), 男, 山東萊蕪人, 碩士, 主要從事視頻壓縮方面的研究. E-mail:wangruityut@163.com(太原理工大學(xué) 信息工程學(xué)院,太原 030024)
摘要:幀內(nèi)預(yù)測是AVS 編碼器中十分耗時的模塊,因此,合理的優(yōu)化這一模塊對AVS 編碼器的實時實現(xiàn)具有十分重要的意義。本文根據(jù)每種幀內(nèi)預(yù)測模式的特點將其分為三大類,并在TMS320CDM####46 上如何用匯編實現(xiàn)做了詳細分析,重新 設(shè)計了程序結(jié)構(gòu),優(yōu)化后的數(shù)據(jù)顯示,在不影響圖像質(zhì)量的前提下,匯編代碼在時鐘周期上效率大幅提高,耗時僅為C 代碼的30%,優(yōu)化效果相當明顯。
關(guān)鍵詞: TMS320CDM####46;幀內(nèi)預(yù)測;AVS 實時編碼
中圖分類號:TN624Optimize Intra Predicition of AVS by assembly languageWANG Rui(College of Information Engineering,Taiyuan University of Technology Taiyuan, Taiyuan 030024)
Abstract: Intra prediction is one of the most time-consuming model in AVS encoder, therefore,optimizing this module reasonably is very significant to realize the real-time AVS encoding.This divide all intra prediction modes into three categories according to the characteristics of each mode,and do a detailed analysis about various mode of intra prediction model with assembly language onTMS320CDM####46, and redesign the program structure, It demonstrates that the assembly code has anotable increase of the clock cycle efficiency.Under the premise of not affecting the image quality, theassembly code‘s time-consuming is only 30% of C code and the optimization is obvious.
Key words: TMS320CDM####46;Intra Predicition;AVS real time encoding
0 引言
AVS(Audio Video coding Standard)標準是我國具備自主知識產(chǎn)權(quán)的第二代信源編碼標準[1]。它的編碼效率與MPEG-4/H.2#### 相當,但是計算復(fù)雜度與 專利費用低,因此在DSP 上實時實現(xiàn)高分辨率視頻編碼實例是業(yè)界努力攻克的目標。本文以TMS320DM####46 為 開發(fā)平臺,重點分析了AVS 的幀內(nèi)預(yù)測編碼模塊,并使用匯編 語言對其進行優(yōu)化,對實時性的實現(xiàn)十分有利。
1 TMS320CDM6000 系列DSP 特點及匯編介紹
TMS320C6000 DSP 具有最高800MIPS 的運算性能和高效的C 編譯器。其內(nèi)核CPU 由兩個寄存器組A 和B 組成,每組包含32 個寄存器;內(nèi)部有8 個功能單元包括2 個乘法器和
6 個算術(shù)邏輯單元。C####x+ DSP 具有高級的VLIW(Very Long Instruction Word)體系結(jié)構(gòu)。
VLIW 描述了一種指令集思想[2]。在這種指令集中,編譯器把許多簡單、獨立的指令組合到一條指令字中。當這些指令字從Cache 或內(nèi)存中取出放到處理器中時,它們被容易地分解成幾條簡單的指令。這些簡單的指令被分派到一些獨立的執(zhí)行單元去執(zhí)行。C####x+ CPU 一般情況下能將8 條指令組合到一條指令字中,如圖2-1 所示:圖1 取指包的基本形式Figure1 Basic Format of a Fetch Packet取指包里的八條指令的執(zhí)行由最低比特位p 控制。p 的值決定兩條指令是否并行執(zhí)行。在C####x+ DSP 中,p 比特的掃描過程遵循從左到右的原則,也就是從低地址位到高地址位的順序,如圖3-2 中,順序為從指令A(yù) 到指令H。如果第i 條指令的p=1,則代表該指令與第i+1 條指令是并行執(zhí)行的,否則,如果第i 條指令的p=0,則代表該指令與第i+1 條指令不是并行的。一個取指包里所有能夠并行執(zhí)行的指令組成一個執(zhí)行包。每個執(zhí)行包里的指令使用的功能單元是互不相同的。一般情況下,通過編寫線性匯編代碼,然后再通過匯編優(yōu)化器進行優(yōu)化,也能達到一個滿意的程度。但是對實時性要求比較高的地方,這個優(yōu)化程度還是遠遠不夠的。因此,需要進一步考慮代碼的特點,充分利用C####x+ DSP 的資源安排并行指令,合理安排流水結(jié)構(gòu),才能最大限度的優(yōu)化需要的匯編代碼。線性匯編與匯編的主要區(qū)別是:匯編需要指定并行指令;匯編需要考慮寄存器的使用;匯編需要考慮指令的延時周期;匯編需要考慮功能單元的使用情況;匯編需要自己安排流水線[3]。因此,匯編代碼的編寫主要有以下優(yōu)化策略:配合功能單元,利用SIMD、VLIW 思想盡量寫并行代碼,使得8 個功能單元的利用率都很高;A、B 通道并行,合理使用交叉通路;實現(xiàn)同樣操作盡量用數(shù)據(jù)相關(guān)性小易于形成 軟件流水的指令,盡量用最少周期的指令,盡量用特殊指令(一般效率比較高)例如:循環(huán)體實現(xiàn)一個操作 val = is<0? -val : val,可以用比較和跳轉(zhuǎn)指令實現(xiàn)但破壞軟件流水效率低,可以通過比較擴展求或操作得到一個-1 或1 的數(shù),再用乘運算實現(xiàn)這個操作,雖然周期長了一些,但能形成軟件流水,實際提高了效率。
2 AVS 幀內(nèi)預(yù)測及其匯編優(yōu)化
AVS 幀內(nèi)預(yù)測是基于空間域的預(yù)測,即利用周圍已編碼塊的重建像素值濾波得到當前塊的像素預(yù)測值。AVS 編碼標準在傳統(tǒng)的幀內(nèi)編碼技術(shù)的基礎(chǔ)上,充分利用了圖像在局部空間上的高度相關(guān)性來去除圖像的空間冗余性,然后再對預(yù)測殘差圖像進行變換編碼,有效提高了圖像幀內(nèi)編碼的效率。AVS 的亮度和色度都使用8×8 的預(yù)測塊,且亮度和色度預(yù)測模式分別為5 種和4 種,但是根據(jù)宏塊周圍塊的存在情況,在AVS 中實際上亮度預(yù)測模式有8 種不同的算法,而在色度中7 種不同的算法。但是總體上可以大致分為以下幾類:1)賦值運算 亮度和色度模式0,模式DC_Top 為垂直賦值;亮度和色度的模式1,DC_Left 為水平賦值;亮度和色度模式DC_128 為常數(shù)賦值。這一類總體思路一樣,都采用STDW 指令,一次可以完成一行的賦值。色度DC_Top 和DC_Left 的所需賦的值需要由加權(quán)平均運算指令DOTPUS4 求得,其他與亮度相同。如給整個8×8 塊賦值128 的運算的匯編代碼如下,一次加載8 個數(shù)。MVKL 0x80808080,r0MVKH 0x80808080,r0MV r0 , r1STDW r1:r0, *dst++2)要求平均值或加權(quán)平均的運算 亮度模式DC_All 和色度模式DC_All,模式3。對亮度模式DC_All,將top 和left 用LDDW 指令分別一次讀進來,并把讀進來的left 值解包,并把解包的每個值再分別打包,共八個值left[0] 到left[7],將這八個值分別與top 相加并移位,用指令A(yù)VGU4,這樣可能會存在大1 的誤差。解決誤差的方法是用SUBABS4 將top值都減1 后再用指令A(yù)VGU4 與left 操作得到DST,這樣的話僅top 值為0 時可能存在誤差。圖2 僅top=0 時可能含有誤差的算法Figure2 the algorithm only top= 0 may contain error然后采用比較法消除0 值誤差,即先用top 值與0 值比較,用指令CMPGTU4,得到CMP1,再用XPND4 將其展開并用NOT 取反,將此值與01010101H 相與,得到CMP1,最后用DST 減去CMP1 就消除了誤差得到最終結(jié)果。色度與亮度模式DC_All 的主要區(qū)別就是所需要的值要由臨近top 和left 的值用DOTPUS4 指令加權(quán)平均求出。對于色度模式3,主要思路就是用DOTPUS4 指令求得a,b,c 的值,對于中間過程則采用16 位運算指令SADDSUB2,SHR2 等,最后通過SPACKU4 指令把結(jié)果飽和為8 位。3)要進行移位運算。如亮度中的模式3 和模式4,采用的是左上和左下的預(yù)測方式,即45°角方向的賦值是一樣的。對于亮度模式3 ,所需賦的值是top 和left 的均值,所以本文首先兩次利用取雙字指令LDDW 一次性將我們需要的值全部取出后,采用模式2 中所用的方法求得所需賦的值,然后利用移位指令,不斷地組合出下一行的數(shù)進行賦值,利用存雙字指令STDW 一次存進內(nèi)存中。亮度模式4 所需賦的值可以直接取出,然后用移位組合出下一行的數(shù)。這樣的做法明顯提高了數(shù)據(jù)的利用率,減小了算法的復(fù)雜性。
3 實驗結(jié)果分析
表1 幀內(nèi)預(yù)測實驗結(jié)果Table1 Intra Predicition Experiment Result幀內(nèi)預(yù)測模式 優(yōu)化的C(CPU 數(shù))匯編(CPU 數(shù))模式0(vetical) 32 13模式1(horizontal) 43 18DC_128 22 11DC_Top 32 13DC_Left 43 18模式2(DC)DC_All 93 31模式3(Down_Left) 88 25亮度模式4 (Down_Right) 73 15模式0(vetical) 32 13模式1(horizontal) 43 18DC_128 22 11DC_Top 96 27DC_Left 78 25模式2(DC)DC_All 139 46色度模式3(Plane) 1#### 48從表1 的實驗結(jié)果可以看出,通過匯編優(yōu)化后,各個模式全部有很大程度的降低,與優(yōu)化過的C 相比降低幅度均在50%以上,相比于線性匯編優(yōu)化結(jié)果其CPU 周期數(shù)也有很大程度的下降,降低幅度大部分在30%到50%之間。因此,對實時性要求比較高的編碼器而言,匯編能極大地提高運算速度,縮短計算時間。
4 結(jié)論
本文用匯編實現(xiàn)了幀內(nèi)預(yù)測的各種模式,在不影響圖像質(zhì)量的情況下有效的提高了編碼速率。本實驗證明,利用DSP 匯編指令實現(xiàn)AVS 耗時模塊可極大節(jié)省計算時間,為AVS在TMS320DM####46 上實時實現(xiàn)提供了更大的保障。
[參考文獻] (References)
[1]《AVS 視頻(報批最終稿)》(標準號GB/T 200090.2-2006) 信息技術(shù)先進音視頻編碼第2 部分:視頻[S].
[2] TMS320C####x/C####x+ DSP CPU and Instruction Set Reference Guide. Literature Number: SPRU732A June2005
[3] TMS320C6000 Optimizing Compiler v 6.1 User‘s Guide. Literature Number: SPRU187O May 2008
中國論文中心http://www.wenlun.com 警告:未經(jīng)本站許可不得采集本站論文內(nèi)容作為自己網(wǎng)站的資源!(如需要轉(zhuǎn)載請說明出自:http://www.wenlun.com/lwcs/so_article.asp?id=11050680156) 如果本文不完整,請點擊這里查看AVS 幀內(nèi)預(yù)測模式的匯編優(yōu)化的其它內(nèi)容?
基金項目:本課題得到國家自然科學(xué)基金資助項目基金(項目編號:60772101)的資助。
作者簡介:王瑞(1986—), 男, 山東萊蕪人, 碩士, 主要從事視頻壓縮方面的研究. E-mail:wangruityut@163.com(太原理工大學(xué) 信息工程學(xué)院,太原 030024)
摘要:幀內(nèi)預(yù)測是AVS 編碼器中十分耗時的模塊,因此,合理的優(yōu)化這一模塊對AVS 編碼器的實時實現(xiàn)具有十分重要的意義。本文根據(jù)每種幀內(nèi)預(yù)測模式的特點將其分為三大類,并在TMS320CDM####46 上如何用匯編實現(xiàn)做了詳細分析,重新 設(shè)計了程序結(jié)構(gòu),優(yōu)化后的數(shù)據(jù)顯示,在不影響圖像質(zhì)量的前提下,匯編代碼在時鐘周期上效率大幅提高,耗時僅為C 代碼的30%,優(yōu)化效果相當明顯。
關(guān)鍵詞: TMS320CDM####46;幀內(nèi)預(yù)測;AVS 實時編碼
中圖分類號:TN624Optimize Intra Predicition of AVS by assembly languageWANG Rui(College of Information Engineering,Taiyuan University of Technology Taiyuan, Taiyuan 030024)
Abstract: Intra prediction is one of the most time-consuming model in AVS encoder, therefore,optimizing this module reasonably is very significant to realize the real-time AVS encoding.This divide all intra prediction modes into three categories according to the characteristics of each mode,and do a detailed analysis about various mode of intra prediction model with assembly language onTMS320CDM####46, and redesign the program structure, It demonstrates that the assembly code has anotable increase of the clock cycle efficiency.Under the premise of not affecting the image quality, theassembly code‘s time-consuming is only 30% of C code and the optimization is obvious.
Key words: TMS320CDM####46;Intra Predicition;AVS real time encoding
0 引言
AVS(Audio Video coding Standard)標準是我國具備自主知識產(chǎn)權(quán)的第二代信源編碼標準[1]。它的編碼效率與MPEG-4/H.2#### 相當,但是計算復(fù)雜度與 專利費用低,因此在DSP 上實時實現(xiàn)高分辨率視頻編碼實例是業(yè)界努力攻克的目標。本文以TMS320DM####46 為 開發(fā)平臺,重點分析了AVS 的幀內(nèi)預(yù)測編碼模塊,并使用匯編 語言對其進行優(yōu)化,對實時性的實現(xiàn)十分有利。
1 TMS320CDM6000 系列DSP 特點及匯編介紹
TMS320C6000 DSP 具有最高800MIPS 的運算性能和高效的C 編譯器。其內(nèi)核CPU 由兩個寄存器組A 和B 組成,每組包含32 個寄存器;內(nèi)部有8 個功能單元包括2 個乘法器和
6 個算術(shù)邏輯單元。C####x+ DSP 具有高級的VLIW(Very Long Instruction Word)體系結(jié)構(gòu)。
VLIW 描述了一種指令集思想[2]。在這種指令集中,編譯器把許多簡單、獨立的指令組合到一條指令字中。當這些指令字從Cache 或內(nèi)存中取出放到處理器中時,它們被容易地分解成幾條簡單的指令。這些簡單的指令被分派到一些獨立的執(zhí)行單元去執(zhí)行。C####x+ CPU 一般情況下能將8 條指令組合到一條指令字中,如圖2-1 所示:圖1 取指包的基本形式Figure1 Basic Format of a Fetch Packet取指包里的八條指令的執(zhí)行由最低比特位p 控制。p 的值決定兩條指令是否并行執(zhí)行。在C####x+ DSP 中,p 比特的掃描過程遵循從左到右的原則,也就是從低地址位到高地址位的順序,如圖3-2 中,順序為從指令A(yù) 到指令H。如果第i 條指令的p=1,則代表該指令與第i+1 條指令是并行執(zhí)行的,否則,如果第i 條指令的p=0,則代表該指令與第i+1 條指令不是并行的。一個取指包里所有能夠并行執(zhí)行的指令組成一個執(zhí)行包。每個執(zhí)行包里的指令使用的功能單元是互不相同的。一般情況下,通過編寫線性匯編代碼,然后再通過匯編優(yōu)化器進行優(yōu)化,也能達到一個滿意的程度。但是對實時性要求比較高的地方,這個優(yōu)化程度還是遠遠不夠的。因此,需要進一步考慮代碼的特點,充分利用C####x+ DSP 的資源安排并行指令,合理安排流水結(jié)構(gòu),才能最大限度的優(yōu)化需要的匯編代碼。線性匯編與匯編的主要區(qū)別是:匯編需要指定并行指令;匯編需要考慮寄存器的使用;匯編需要考慮指令的延時周期;匯編需要考慮功能單元的使用情況;匯編需要自己安排流水線[3]。因此,匯編代碼的編寫主要有以下優(yōu)化策略:配合功能單元,利用SIMD、VLIW 思想盡量寫并行代碼,使得8 個功能單元的利用率都很高;A、B 通道并行,合理使用交叉通路;實現(xiàn)同樣操作盡量用數(shù)據(jù)相關(guān)性小易于形成 軟件流水的指令,盡量用最少周期的指令,盡量用特殊指令(一般效率比較高)例如:循環(huán)體實現(xiàn)一個操作 val = is<0? -val : val,可以用比較和跳轉(zhuǎn)指令實現(xiàn)但破壞軟件流水效率低,可以通過比較擴展求或操作得到一個-1 或1 的數(shù),再用乘運算實現(xiàn)這個操作,雖然周期長了一些,但能形成軟件流水,實際提高了效率。
2 AVS 幀內(nèi)預(yù)測及其匯編優(yōu)化
AVS 幀內(nèi)預(yù)測是基于空間域的預(yù)測,即利用周圍已編碼塊的重建像素值濾波得到當前塊的像素預(yù)測值。AVS 編碼標準在傳統(tǒng)的幀內(nèi)編碼技術(shù)的基礎(chǔ)上,充分利用了圖像在局部空間上的高度相關(guān)性來去除圖像的空間冗余性,然后再對預(yù)測殘差圖像進行變換編碼,有效提高了圖像幀內(nèi)編碼的效率。AVS 的亮度和色度都使用8×8 的預(yù)測塊,且亮度和色度預(yù)測模式分別為5 種和4 種,但是根據(jù)宏塊周圍塊的存在情況,在AVS 中實際上亮度預(yù)測模式有8 種不同的算法,而在色度中7 種不同的算法。但是總體上可以大致分為以下幾類:1)賦值運算 亮度和色度模式0,模式DC_Top 為垂直賦值;亮度和色度的模式1,DC_Left 為水平賦值;亮度和色度模式DC_128 為常數(shù)賦值。這一類總體思路一樣,都采用STDW 指令,一次可以完成一行的賦值。色度DC_Top 和DC_Left 的所需賦的值需要由加權(quán)平均運算指令DOTPUS4 求得,其他與亮度相同。如給整個8×8 塊賦值128 的運算的匯編代碼如下,一次加載8 個數(shù)。MVKL 0x80808080,r0MVKH 0x80808080,r0MV r0 , r1STDW r1:r0, *dst++2)要求平均值或加權(quán)平均的運算 亮度模式DC_All 和色度模式DC_All,模式3。對亮度模式DC_All,將top 和left 用LDDW 指令分別一次讀進來,并把讀進來的left 值解包,并把解包的每個值再分別打包,共八個值left[0] 到left[7],將這八個值分別與top 相加并移位,用指令A(yù)VGU4,這樣可能會存在大1 的誤差。解決誤差的方法是用SUBABS4 將top值都減1 后再用指令A(yù)VGU4 與left 操作得到DST,這樣的話僅top 值為0 時可能存在誤差。圖2 僅top=0 時可能含有誤差的算法Figure2 the algorithm only top= 0 may contain error然后采用比較法消除0 值誤差,即先用top 值與0 值比較,用指令CMPGTU4,得到CMP1,再用XPND4 將其展開并用NOT 取反,將此值與01010101H 相與,得到CMP1,最后用DST 減去CMP1 就消除了誤差得到最終結(jié)果。色度與亮度模式DC_All 的主要區(qū)別就是所需要的值要由臨近top 和left 的值用DOTPUS4 指令加權(quán)平均求出。對于色度模式3,主要思路就是用DOTPUS4 指令求得a,b,c 的值,對于中間過程則采用16 位運算指令SADDSUB2,SHR2 等,最后通過SPACKU4 指令把結(jié)果飽和為8 位。3)要進行移位運算。如亮度中的模式3 和模式4,采用的是左上和左下的預(yù)測方式,即45°角方向的賦值是一樣的。對于亮度模式3 ,所需賦的值是top 和left 的均值,所以本文首先兩次利用取雙字指令LDDW 一次性將我們需要的值全部取出后,采用模式2 中所用的方法求得所需賦的值,然后利用移位指令,不斷地組合出下一行的數(shù)進行賦值,利用存雙字指令STDW 一次存進內(nèi)存中。亮度模式4 所需賦的值可以直接取出,然后用移位組合出下一行的數(shù)。這樣的做法明顯提高了數(shù)據(jù)的利用率,減小了算法的復(fù)雜性。
3 實驗結(jié)果分析
表1 幀內(nèi)預(yù)測實驗結(jié)果Table1 Intra Predicition Experiment Result幀內(nèi)預(yù)測模式 優(yōu)化的C(CPU 數(shù))匯編(CPU 數(shù))模式0(vetical) 32 13模式1(horizontal) 43 18DC_128 22 11DC_Top 32 13DC_Left 43 18模式2(DC)DC_All 93 31模式3(Down_Left) 88 25亮度模式4 (Down_Right) 73 15模式0(vetical) 32 13模式1(horizontal) 43 18DC_128 22 11DC_Top 96 27DC_Left 78 25模式2(DC)DC_All 139 46色度模式3(Plane) 1#### 48從表1 的實驗結(jié)果可以看出,通過匯編優(yōu)化后,各個模式全部有很大程度的降低,與優(yōu)化過的C 相比降低幅度均在50%以上,相比于線性匯編優(yōu)化結(jié)果其CPU 周期數(shù)也有很大程度的下降,降低幅度大部分在30%到50%之間。因此,對實時性要求比較高的編碼器而言,匯編能極大地提高運算速度,縮短計算時間。
4 結(jié)論
本文用匯編實現(xiàn)了幀內(nèi)預(yù)測的各種模式,在不影響圖像質(zhì)量的情況下有效的提高了編碼速率。本實驗證明,利用DSP 匯編指令實現(xiàn)AVS 耗時模塊可極大節(jié)省計算時間,為AVS在TMS320DM####46 上實時實現(xiàn)提供了更大的保障。
[參考文獻] (References)
[1]《AVS 視頻(報批最終稿)》(標準號GB/T 200090.2-2006) 信息技術(shù)先進音視頻編碼第2 部分:視頻[S].
[2] TMS320C####x/C####x+ DSP CPU and Instruction Set Reference Guide. Literature Number: SPRU732A June2005
[3] TMS320C6000 Optimizing Compiler v 6.1 User‘s Guide. Literature Number: SPRU187O May 2008
中國論文中心http://www.wenlun.com 警告:未經(jīng)本站許可不得采集本站論文內(nèi)容作為自己網(wǎng)站的資源!(如需要轉(zhuǎn)載請說明出自:http://www.wenlun.com/lwcs/so_article.asp?id=11050680156) 如果本文不完整,請點擊這里查看AVS 幀內(nèi)預(yù)測模式的匯編優(yōu)化的其它內(nèi)容?
總結(jié)
以上是生活随笔為你收集整理的AVS 帧内预测模式的汇编优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 世上最伟大的十个公式,质能方程排名第五
- 下一篇: H264学习方法历程资料