王瑞*
基金項目:本課題得到國家自然科學基金資助項目基金(項目編號:60772101)的資助。
作者簡介:王瑞(1986—), 男, 山東萊蕪人, 碩士, 主要從事視頻壓縮方面的研究. E-mail:wangruityut@163.com(太原理工大學 信息工程學院,太原 030024)
摘要:幀內預測是AVS 編碼器中十分耗時的模塊,因此,合理的優化這一模塊對AVS 編碼器的實時實現具有十分重要的意義。本文根據每種幀內預測模式的特點將其分為三大類,并在TMS320CDM####46 上如何用匯編實現做了詳細分析,重新 設計了程序結構,優化后的數據顯示,在不影響圖像質量的前提下,匯編代碼在時鐘周期上效率大幅提高,耗時僅為C 代碼的30%,優化效果相當明顯。
關鍵詞: TMS320CDM####46;幀內預測;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)標準是我國具備自主知識產權的第二代信源編碼標準[1]。它的編碼效率與MPEG-4/H.2#### 相當,但是計算復雜度與 專利費用低,因此在DSP 上實時實現高分辨率視頻編碼實例是業界努力攻克的目標。本文以TMS320DM####46 為 開發平臺,重點分析了AVS 的幀內預測編碼模塊,并使用匯編 語言對其進行優化,對實時性的實現十分有利。
1 TMS320CDM6000 系列DSP 特點及匯編介紹
TMS320C6000 DSP 具有最高800MIPS 的運算性能和高效的C 編譯器。其內核CPU 由兩個寄存器組A 和B 組成,每組包含32 個寄存器;內部有8 個功能單元包括2 個乘法器和
6 個算術邏輯單元。C####x+ DSP 具有高級的VLIW(Very Long Instruction Word)體系結構。
VLIW 描述了一種指令集思想[2]。在這種指令集中,編譯器把許多簡單、獨立的指令組合到一條指令字中。當這些指令字從Cache 或內存中取出放到處理器中時,它們被容易地分解成幾條簡單的指令。這些簡單的指令被分派到一些獨立的執行單元去執行。C####x+ CPU 一般情況下能將8 條指令組合到一條指令字中,如圖2-1 所示:圖1 取指包的基本形式Figure1 Basic Format of a Fetch Packet取指包里的八條指令的執行由最低比特位p 控制。p 的值決定兩條指令是否并行執行。在C####x+ DSP 中,p 比特的掃描過程遵循從左到右的原則,也就是從低地址位到高地址位的順序,如圖3-2 中,順序為從指令A 到指令H。如果第i 條指令的p=1,則代表該指令與第i+1 條指令是并行執行的,否則,如果第i 條指令的p=0,則代表該指令與第i+1 條指令不是并行的。一個取指包里所有能夠并行執行的指令組成一個執行包。每個執行包里的指令使用的功能單元是互不相同的。一般情況下,通過編寫線性匯編代碼,然后再通過匯編優化器進行優化,也能達到一個滿意的程度。但是對實時性要求比較高的地方,這個優化程度還是遠遠不夠的。因此,需要進一步考慮代碼的特點,充分利用C####x+ DSP 的資源安排并行指令,合理安排流水結構,才能最大限度的優化需要的匯編代碼。線性匯編與匯編的主要區別是:匯編需要指定并行指令;匯編需要考慮寄存器的使用;匯編需要考慮指令的延時周期;匯編需要考慮功能單元的使用情況;匯編需要自己安排流水線[3]。因此,匯編代碼的編寫主要有以下優化策略:配合功能單元,利用SIMD、VLIW 思想盡量寫并行代碼,使得8 個功能單元的利用率都很高;A、B 通道并行,合理使用交叉通路;實現同樣操作盡量用數據相關性小易于形成 軟件流水的指令,盡量用最少周期的指令,盡量用特殊指令(一般效率比較高)例如:循環體實現一個操作 val = is<0? -val : val,可以用比較和跳轉指令實現但破壞軟件流水效率低,可以通過比較擴展求或操作得到一個-1 或1 的數,再用乘運算實現這個操作,雖然周期長了一些,但能形成軟件流水,實際提高了效率。
2 AVS 幀內預測及其匯編優化
AVS 幀內預測是基于空間域的預測,即利用周圍已編碼塊的重建像素值濾波得到當前塊的像素預測值。AVS 編碼標準在傳統的幀內編碼技術的基礎上,充分利用了圖像在局部空間上的高度相關性來去除圖像的空間冗余性,然后再對預測殘差圖像進行變換編碼,有效提高了圖像幀內編碼的效率。AVS 的亮度和色度都使用8×8 的預測塊,且亮度和色度預測模式分別為5 種和4 種,但是根據宏塊周圍塊的存在情況,在AVS 中實際上亮度預測模式有8 種不同的算法,而在色度中7 種不同的算法。但是總體上可以大致分為以下幾類:1)賦值運算 亮度和色度模式0,模式DC_Top 為垂直賦值;亮度和色度的模式1,DC_Left 為水平賦值;亮度和色度模式DC_128 為常數賦值。這一類總體思路一樣,都采用STDW 指令,一次可以完成一行的賦值。色度DC_Top 和DC_Left 的所需賦的值需要由加權平均運算指令DOTPUS4 求得,其他與亮度相同。如給整個8×8 塊賦值128 的運算的匯編代碼如下,一次加載8 個數。MVKL 0x80808080,r0MVKH 0x80808080,r0MV r0 , r1STDW r1:r0, *dst++2)要求平均值或加權平均的運算 亮度模式DC_All 和色度模式DC_All,模式3。對亮度模式DC_All,將top 和left 用LDDW 指令分別一次讀進來,并把讀進來的left 值解包,并把解包的每個值再分別打包,共八個值left[0] 到left[7],將這八個值分別與top 相加并移位,用指令AVGU4,這樣可能會存在大1 的誤差。解決誤差的方法是用SUBABS4 將top值都減1 后再用指令AVGU4 與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 就消除了誤差得到最終結果。色度與亮度模式DC_All 的主要區別就是所需要的值要由臨近top 和left 的值用DOTPUS4 指令加權平均求出。對于色度模式3,主要思路就是用DOTPUS4 指令求得a,b,c 的值,對于中間過程則采用16 位運算指令SADDSUB2,SHR2 等,最后通過SPACKU4 指令把結果飽和為8 位。3)要進行移位運算。如亮度中的模式3 和模式4,采用的是左上和左下的預測方式,即45°角方向的賦值是一樣的。對于亮度模式3 ,所需賦的值是top 和left 的均值,所以本文首先兩次利用取雙字指令LDDW 一次性將我們需要的值全部取出后,采用模式2 中所用的方法求得所需賦的值,然后利用移位指令,不斷地組合出下一行的數進行賦值,利用存雙字指令STDW 一次存進內存中。亮度模式4 所需賦的值可以直接取出,然后用移位組合出下一行的數。這樣的做法明顯提高了數據的利用率,減小了算法的復雜性。
3 實驗結果分析
表1 幀內預測實驗結果Table1 Intra Predicition Experiment Result幀內預測模式 優化的C(CPU 數)匯編(CPU 數)模式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 的實驗結果可以看出,通過匯編優化后,各個模式全部有很大程度的降低,與優化過的C 相比降低幅度均在50%以上,相比于線性匯編優化結果其CPU 周期數也有很大程度的下降,降低幅度大部分在30%到50%之間。因此,對實時性要求比較高的編碼器而言,匯編能極大地提高運算速度,縮短計算時間。
4 結論
本文用匯編實現了幀內預測的各種模式,在不影響圖像質量的情況下有效的提高了編碼速率。本實驗證明,利用DSP 匯編指令實現AVS 耗時模塊可極大節省計算時間,為AVS在TMS320DM####46 上實時實現提供了更大的保障。
[參考文獻] (References)
[1]《AVS 視頻(報批最終稿)》(標準號GB/T 200090.2-2006) 信息技術先進音視頻編碼第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 警告:未經本站許可不得采集本站論文內容作為自己網站的資源!(如需要轉載請說明出自:http://www.wenlun.com/lwcs/so_article.asp?id=11050680156)
基金項目:本課題得到國家自然科學基金資助項目基金(項目編號:60772101)的資助。
作者簡介:王瑞(1986—), 男, 山東萊蕪人, 碩士, 主要從事視頻壓縮方面的研究. E-mail:wangruityut@163.com(太原理工大學 信息工程學院,太原 030024)
摘要:幀內預測是AVS 編碼器中十分耗時的模塊,因此,合理的優化這一模塊對AVS 編碼器的實時實現具有十分重要的意義。本文根據每種幀內預測模式的特點將其分為三大類,并在TMS320CDM####46 上如何用匯編實現做了詳細分析,重新 設計了程序結構,優化后的數據顯示,在不影響圖像質量的前提下,匯編代碼在時鐘周期上效率大幅提高,耗時僅為C 代碼的30%,優化效果相當明顯。
關鍵詞: TMS320CDM####46;幀內預測;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)標準是我國具備自主知識產權的第二代信源編碼標準[1]。它的編碼效率與MPEG-4/H.2#### 相當,但是計算復雜度與 專利費用低,因此在DSP 上實時實現高分辨率視頻編碼實例是業界努力攻克的目標。本文以TMS320DM####46 為 開發平臺,重點分析了AVS 的幀內預測編碼模塊,并使用匯編 語言對其進行優化,對實時性的實現十分有利。
1 TMS320CDM6000 系列DSP 特點及匯編介紹
TMS320C6000 DSP 具有最高800MIPS 的運算性能和高效的C 編譯器。其內核CPU 由兩個寄存器組A 和B 組成,每組包含32 個寄存器;內部有8 個功能單元包括2 個乘法器和
6 個算術邏輯單元。C####x+ DSP 具有高級的VLIW(Very Long Instruction Word)體系結構。
VLIW 描述了一種指令集思想[2]。在這種指令集中,編譯器把許多簡單、獨立的指令組合到一條指令字中。當這些指令字從Cache 或內存中取出放到處理器中時,它們被容易地分解成幾條簡單的指令。這些簡單的指令被分派到一些獨立的執行單元去執行。C####x+ CPU 一般情況下能將8 條指令組合到一條指令字中,如圖2-1 所示:圖1 取指包的基本形式Figure1 Basic Format of a Fetch Packet取指包里的八條指令的執行由最低比特位p 控制。p 的值決定兩條指令是否并行執行。在C####x+ DSP 中,p 比特的掃描過程遵循從左到右的原則,也就是從低地址位到高地址位的順序,如圖3-2 中,順序為從指令A 到指令H。如果第i 條指令的p=1,則代表該指令與第i+1 條指令是并行執行的,否則,如果第i 條指令的p=0,則代表該指令與第i+1 條指令不是并行的。一個取指包里所有能夠并行執行的指令組成一個執行包。每個執行包里的指令使用的功能單元是互不相同的。一般情況下,通過編寫線性匯編代碼,然后再通過匯編優化器進行優化,也能達到一個滿意的程度。但是對實時性要求比較高的地方,這個優化程度還是遠遠不夠的。因此,需要進一步考慮代碼的特點,充分利用C####x+ DSP 的資源安排并行指令,合理安排流水結構,才能最大限度的優化需要的匯編代碼。線性匯編與匯編的主要區別是:匯編需要指定并行指令;匯編需要考慮寄存器的使用;匯編需要考慮指令的延時周期;匯編需要考慮功能單元的使用情況;匯編需要自己安排流水線[3]。因此,匯編代碼的編寫主要有以下優化策略:配合功能單元,利用SIMD、VLIW 思想盡量寫并行代碼,使得8 個功能單元的利用率都很高;A、B 通道并行,合理使用交叉通路;實現同樣操作盡量用數據相關性小易于形成 軟件流水的指令,盡量用最少周期的指令,盡量用特殊指令(一般效率比較高)例如:循環體實現一個操作 val = is<0? -val : val,可以用比較和跳轉指令實現但破壞軟件流水效率低,可以通過比較擴展求或操作得到一個-1 或1 的數,再用乘運算實現這個操作,雖然周期長了一些,但能形成軟件流水,實際提高了效率。
2 AVS 幀內預測及其匯編優化
AVS 幀內預測是基于空間域的預測,即利用周圍已編碼塊的重建像素值濾波得到當前塊的像素預測值。AVS 編碼標準在傳統的幀內編碼技術的基礎上,充分利用了圖像在局部空間上的高度相關性來去除圖像的空間冗余性,然后再對預測殘差圖像進行變換編碼,有效提高了圖像幀內編碼的效率。AVS 的亮度和色度都使用8×8 的預測塊,且亮度和色度預測模式分別為5 種和4 種,但是根據宏塊周圍塊的存在情況,在AVS 中實際上亮度預測模式有8 種不同的算法,而在色度中7 種不同的算法。但是總體上可以大致分為以下幾類:1)賦值運算 亮度和色度模式0,模式DC_Top 為垂直賦值;亮度和色度的模式1,DC_Left 為水平賦值;亮度和色度模式DC_128 為常數賦值。這一類總體思路一樣,都采用STDW 指令,一次可以完成一行的賦值。色度DC_Top 和DC_Left 的所需賦的值需要由加權平均運算指令DOTPUS4 求得,其他與亮度相同。如給整個8×8 塊賦值128 的運算的匯編代碼如下,一次加載8 個數。MVKL 0x80808080,r0MVKH 0x80808080,r0MV r0 , r1STDW r1:r0, *dst++2)要求平均值或加權平均的運算 亮度模式DC_All 和色度模式DC_All,模式3。對亮度模式DC_All,將top 和left 用LDDW 指令分別一次讀進來,并把讀進來的left 值解包,并把解包的每個值再分別打包,共八個值left[0] 到left[7],將這八個值分別與top 相加并移位,用指令AVGU4,這樣可能會存在大1 的誤差。解決誤差的方法是用SUBABS4 將top值都減1 后再用指令AVGU4 與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 就消除了誤差得到最終結果。色度與亮度模式DC_All 的主要區別就是所需要的值要由臨近top 和left 的值用DOTPUS4 指令加權平均求出。對于色度模式3,主要思路就是用DOTPUS4 指令求得a,b,c 的值,對于中間過程則采用16 位運算指令SADDSUB2,SHR2 等,最后通過SPACKU4 指令把結果飽和為8 位。3)要進行移位運算。如亮度中的模式3 和模式4,采用的是左上和左下的預測方式,即45°角方向的賦值是一樣的。對于亮度模式3 ,所需賦的值是top 和left 的均值,所以本文首先兩次利用取雙字指令LDDW 一次性將我們需要的值全部取出后,采用模式2 中所用的方法求得所需賦的值,然后利用移位指令,不斷地組合出下一行的數進行賦值,利用存雙字指令STDW 一次存進內存中。亮度模式4 所需賦的值可以直接取出,然后用移位組合出下一行的數。這樣的做法明顯提高了數據的利用率,減小了算法的復雜性。
3 實驗結果分析
表1 幀內預測實驗結果Table1 Intra Predicition Experiment Result幀內預測模式 優化的C(CPU 數)匯編(CPU 數)模式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 的實驗結果可以看出,通過匯編優化后,各個模式全部有很大程度的降低,與優化過的C 相比降低幅度均在50%以上,相比于線性匯編優化結果其CPU 周期數也有很大程度的下降,降低幅度大部分在30%到50%之間。因此,對實時性要求比較高的編碼器而言,匯編能極大地提高運算速度,縮短計算時間。
4 結論
本文用匯編實現了幀內預測的各種模式,在不影響圖像質量的情況下有效的提高了編碼速率。本實驗證明,利用DSP 匯編指令實現AVS 耗時模塊可極大節省計算時間,為AVS在TMS320DM####46 上實時實現提供了更大的保障。
[參考文獻] (References)
[1]《AVS 視頻(報批最終稿)》(標準號GB/T 200090.2-2006) 信息技術先進音視頻編碼第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 警告:未經本站許可不得采集本站論文內容作為自己網站的資源!(如需要轉載請說明出自:http://www.wenlun.com/lwcs/so_article.asp?id=11050680156)
如果本文不完整,請點擊這里查看AVS 幀內預測模式的匯編優化的其它內容?