基于SIMD的AVS整数反变换算法设计与优化
生活随笔
收集整理的這篇文章主要介紹了
基于SIMD的AVS整数反变换算法设计与优化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
基于SIMD 的AVS 整數(shù)反變換算法設(shè)計與
優(yōu)化
王玲娟,張剛**
作者簡介:王玲娟,(1987-),女,在讀碩士,主要研究方向:視頻解碼算法
通信聯(lián)系人:張剛,(1953-),男,教授,主要研究方向:語音編碼、視頻編碼、嵌入式系統(tǒng). E-mail:
princessjuan520@163.com
5 (太原理工大學(xué)信息工程學(xué)院,太原 030024)
摘要:AVS 整數(shù)反變換是典型的以計算為主的解碼過程。為提高解碼速率,本文通過改進反
變換算法并用SIMD 技術(shù)對其中計算量最大、耗時最長的部分代碼進行了優(yōu)化。在此之前先
進行全零塊處理以減少不必要的計算。實驗結(jié)果表明該優(yōu)化方案可行并且解碼器的運算速度
得到顯著提高。
10 關(guān)鍵詞:AVS;反變換;SIMD
中圖分類號:TN919.8
?25 0 引言
AVS 作為中國具有自主知識產(chǎn)權(quán)的新一代音視頻編解碼標(biāo)準(zhǔn),在高清數(shù)字視頻及網(wǎng)絡(luò)
多媒體應(yīng)用方面表現(xiàn)出好的性能和低的復(fù)雜度[1]。在同等畫面質(zhì)量的前提下,AVS 標(biāo)準(zhǔn)的數(shù)
據(jù)壓縮率比傳統(tǒng)的MPEG-2 效率提高了2 到3 倍,與MPEG-4AVC/H.264 標(biāo)準(zhǔn)壓縮效率相
當(dāng),但比H.264 降低30%到50%的計算資源,大大節(jié)省了軟硬件成本,發(fā)展前景巨大[2]。而
30 目前AVS 官方提供的解碼參考軟件對于大部分視頻圖像不能進行實時解碼,不利于AVS
產(chǎn)業(yè)化的推廣,有待于不斷地進行改進和優(yōu)化以達到對基本的CIF、D1 等格式圖像的實時
解碼要求。
本文正是基于上面的應(yīng)用需求,對AVS 解碼標(biāo)準(zhǔn)進行了研究。依據(jù)AVS 整數(shù)反變換算
法的特點,對算法的實現(xiàn)進行結(jié)構(gòu)上的設(shè)計,并在vc 下利用SIMD 技術(shù)對其進行優(yōu)化。在
35 保證解碼質(zhì)量的前提下,提高了解碼軟件的運行速度,具有實際的意義。
1 SIMD 指令介紹
SIMD 指令能在一個指令周期中完成多組數(shù)據(jù)并行操作計算,是當(dāng)前多媒體信息處理實
時實現(xiàn)中一個重要的技術(shù)[3]。目前, IA-32 的SIMD 指令包括MMX、SSE、SSE2、SSE3 等
幾級,它們都是在原來的處理器指令集的基礎(chǔ)上添加的擴展指令集, 都是SIMD 指令。
?40 (1)MMX 簡介
在通用處理器中, Intel 為了提高其多媒體處理能力, 在PentiumⅡ中引入了MMX 指令,
MMX 中定義了57 條新指令、8 個64 位的寄存器和4 種新的數(shù)據(jù)類型,新指令包括算術(shù)、
比較、轉(zhuǎn)換、邏輯、移位、數(shù)據(jù)傳輸指令和狀態(tài)清空7 類,只能處理整數(shù)類型數(shù)據(jù)。
(2)SSE 簡介
45 由于MMX 的寄存器只有64 位,在處理浮點運算時就力不從心了,容易出現(xiàn)overflow
的現(xiàn)象,所以在PentiumⅢ中又加入了SSE(String SIMD Extension) 指令集。SSE 指令增加
了單精度浮點數(shù)的SIMD 支持,并且SSE 定義了8 個全新的128 位寄存器,每個寄存器可以
存放128 位的整數(shù)或浮點數(shù)。
(3)SSE2 簡介
50 在PentiumⅣ中擴充了SSE 指令集形成了SSE2 指令集。SSE2 在SSE 基礎(chǔ)上增加了對
雙精度浮點數(shù)的支持和一些新指令。SSE2 共有144 個SIMD 指令,能處理128 位整數(shù)和雙
精度浮點數(shù)運算。SSE2 由兩個不同的部分組成: SSE 部分和MMX 部分。前者主要負責(zé)處理
浮點數(shù), 后者則專門計算整數(shù)。在指令處理速度保持不變的情況下,通過SSE2 優(yōu)化后的應(yīng)用
軟件運行速度將提高2 倍。由于SSE2 指令集與MMX 相兼容, 因此將被MMX 優(yōu)化過的程
55 序再進行一次SSE2 的優(yōu)化, 則優(yōu)化的程度會更加徹底。
2 全零塊處理
AVS 使用的是預(yù)測編碼,進行反變換的矩陣存放的是殘差數(shù)據(jù),而殘差數(shù)據(jù)很明顯的
特點是:殘差值都很小,并且很多整個8*8 塊的殘差數(shù)據(jù)都為零。統(tǒng)計三個典型標(biāo)清測試視
頻的全零殘差塊的比例,如表1。
60
表1 全零塊比例統(tǒng)計
Tab.1 All-zero block ratio statistics
QP
測試
序列
(720x480)
22
28
36
football 15.9% 40.5% 65.0%
bus 21.9% 47.4% 72.9%
tempete 24.4% 49.4% 76.5%
由表1 可以看出,殘差值全為零的塊在整個視頻幀中占很大比例,特別是量化系數(shù)QP
65 較大時。利用這個特性,本文在解碼端進行一些特殊處理:解碼當(dāng)前宏塊CBP 值后對四個
亮度塊和兩個色度塊進行全零檢測標(biāo)志,如式(2-1)所示。
?若當(dāng)前解碼8*8 塊對應(yīng)coeff 系數(shù)為0,即為全零塊。根據(jù)全零的矩陣反變換后仍為零[4],
省去對該塊的反變換操作,則該塊的預(yù)測值即為像素值。這樣利用宏塊系數(shù)特征就極大的減
70 少了運算量。而不全為零的塊則需反變換后加上預(yù)測值才能得到像素值,如圖1 所示。
?圖1 全零塊的優(yōu)化示意圖
Fig.1 Optimization of all-zero block diagram
75 3 反變換模塊的算法分析
AVS 采用基于8×8 塊的整數(shù)IDCT 算法。二維整數(shù)IDCT 算法可以轉(zhuǎn)換為水平和垂直方
向的一維IDCT 算法的組合。反變換計算公式為:
H T C T T 8 8 = × × (3-1)
其中,H 表示反變換后的8×8矩陣,C 是8×8變換系數(shù)矩陣, 8 T 是8×8 反變換矩陣
(圖2),T T 8 是8 80 T 的轉(zhuǎn)置矩陣。
?圖2 AVS 中的整數(shù)變換矩陣
Fig.2 Integral Transformation Matrix of AVS
85 AVS 整數(shù)反變換的變換系數(shù)存在對稱性,僅用加法、減法和移位就可實現(xiàn),容易使用
基8 蝶形算法快速實現(xiàn)[5]。
?圖3 一維反變換蝶形算法
Fig.3 One-dimensional Inverse Transform Butterfly Algorithm
90
圖3 為水平反變換的一維8 點快速蝶形算法原理。顯然,采用兩個近似的C 語言代碼
段就可實現(xiàn)由X 到H 的變換過程。依此設(shè)計的Visual C++6.0 整數(shù)變換模塊的算法清晰簡單,
容易更改數(shù)據(jù)長度,代碼冗余少,但由于C 程序不針對硬件編程,其較低的編解碼速度不
能滿足實時性要求,因此需要利用單指令多數(shù)據(jù)技術(shù)對AVS 整數(shù)IDCT 模塊進行優(yōu)化。
95 4 反變換算法的設(shè)計與優(yōu)化
4.1 反變換算法的計算次序分析
利用矩陣乘法的結(jié)合律,公式(3-1)可以改寫為:
H = T ×C ×T T = T × (C ×T T )=(T ×C)×T T = [(C ×T T )T ×T T ]T =[T ×(T ×C)T]T 8 8 8 8 8 8 8 8 8 8
從而AVS 整數(shù)反變換算法的計算次序可分為4 類:
1) 垂直反變換-水平反變換:計算次序為H (T C) T T 8 8 100 = × × ,即先垂直反變換
H = T ×C 8
' 再水平反變換H H T T 8
= ' × ;
2) 水平反變換-垂直反變換:計算次序為H T (C T T ) 8 8 = × × ;
3) 水平反變換-轉(zhuǎn)置-水平反變換-轉(zhuǎn)置:計算次序為[( ) ]T
H C T T T T T 8 8 = × × ;
4) 垂直反變換-轉(zhuǎn)置-垂直反變換-轉(zhuǎn)置:計算次序為H = [T ×(T ×C)T ]T 8 8 。
105 無論采用上述哪種計算次序,為獲得高質(zhì)量主觀圖像效果并避免數(shù)據(jù)溢出,第一次反變
換前C 的每一個元素都要由8 位整型數(shù)據(jù)擴展為16 位,第二次反變換結(jié)果H 的每個元素都
要擴展為32 位。為兼顧較高的圖像壓縮效率,最終輸出結(jié)果需要緊縮為16 位的整型數(shù)據(jù)。
4.2 基于SSE2 的反變換算法設(shè)計
考慮到算法精度要求和寄存器有限的情況,若采用MMX 指令進行優(yōu)化,則需要多次的
110 數(shù)據(jù)讀取,而內(nèi)存單元的訪問速度也制約了多媒體指令的優(yōu)化[6]。因此本文最終決定采用
SSE2 指令集實現(xiàn)反變換模塊。SSE2 是基于128 位寄存器的指令集,其指令功能與MMX 類
似,但是并行處理能力更強大,反變換和矩陣轉(zhuǎn)置比基于MMX 的優(yōu)化更易實現(xiàn)。
?采用:“垂直反變換-轉(zhuǎn)置-垂直反變換-轉(zhuǎn)置”計算次序能僅以兩次轉(zhuǎn)置過程的延時為代價
減少水平反變換的代碼和時間開銷。具體實現(xiàn)步驟:
1) 第一次垂直反變換H = T ×C 8
115 ' :各矩陣元素為16 位,每次變換一個行向量,8
次循環(huán)后計算得到矩陣H ' ;
2) 第一次矩陣轉(zhuǎn)置得到
T H ' ;
3) 第二次垂直反變換
T H T H '
8
'' = × :每次取矩陣
T H ' 各列的前4 個元素,擴展為
32 位數(shù)據(jù)后作組合運算,每次變換4 個行向量,變換后結(jié)果緊縮為16 位數(shù)據(jù),2
120 次循環(huán)后計算得到矩陣H '' ;
4) 第二次矩陣轉(zhuǎn)置得到
T H = H '' :采用與第一次矩陣轉(zhuǎn)置相同的代碼段得到H 。
4.3 基于SSE2 的反變換算法優(yōu)化
4.3.1 PMADDWD 指令介紹
125 圖4 PMADDWD 指令
Fig.4 PMADDWD instruction
圖4 中寄存器是128 位的,上面兩個寄存器分別存儲8 個16 位數(shù)據(jù)。圖中顯示了緊縮
字乘、積相加PMADDWD 指令的執(zhí)行:將兩個寄存器相同位置的字組數(shù)據(jù)對應(yīng)相乘,然后
130 將32 位結(jié)果逐對相加并作為雙字存于寄存器中。該指令用于以下矩陣乘法。
4.3.2 矩陣乘法的高效實現(xiàn)
以4*4 矩陣為例,設(shè)計一種高效的矩陣乘法的方法。
?圖5 4*4矩陣乘法
135 Fig.5 4*4matrix multiplications
圖5 中顯示了一個典型的4*4 矩陣乘法[7]。如果簡單的存儲X 的行向量和Y 的列向量
分別到兩個寄存器后使用PMADDWD 指令,顯然,乘法運算太多和寄存器資源有限使得這
樣直接變換的匯編代碼和時間開銷代價非常大。為避免這種問題,下面顯示了一個高效的矩
140 陣乘法的方法。
?圖6 高效的4*4 矩陣乘法的實現(xiàn)
Fig.6 Efficient 4*4 matrix multiplication implementation
145 圖6 中顯示了計算結(jié)果矩陣的第一行的例子。矩陣X 和Y 以特定的形式存儲到寄存器
中,在這些寄存器對上執(zhí)行PMADDWD 指令,使每對寄存器相同位置的數(shù)據(jù)對應(yīng)相乘后結(jié)
果相加。用類似的方法計算矩陣的后三行,在這種情況下,不需要重載矩陣Y,而每行最后
的結(jié)果是完全一致的,不需要任何額外的操作重新安排他們的順序。
這種以特定形式加載過程的算法將乘積與求和循環(huán)運算,可用SIMD 指令的組合高效實
150 現(xiàn),提高了寄存器的利用率。這種方法可應(yīng)用于多個4*4 矩陣乘法運算,也可以通過修改適
應(yīng)其他大小的矩陣乘法。
4.4 優(yōu)化結(jié)果分析
本文設(shè)計的AVS 解碼器的開發(fā)平臺為Windows7 操作系統(tǒng),編譯與調(diào)試環(huán)境為Visual
Studio2008。對反變換模塊優(yōu)化前后的解碼速率進行了測試。測試用了兩個視頻序列:(1)
155 幀數(shù)為300 幀的Foreman(CIF 352x288)格式序列,由xAVS 編碼器編碼foreman.yuv 標(biāo)準(zhǔn)序
列獲得;(2)幀數(shù)為2380 幀的Rili(D1 720x576)序列。測試結(jié)果如表2 所示。
表2 測試序列數(shù)據(jù)
Tab.2 Test Sequences Result
解碼速度(fps) 測試序列 分辨率 幀數(shù)
優(yōu)化前 優(yōu)化后
Foreman CIF 300 60.53 90.62
Rili D1 2380 14.65 22.43
160
從以上測試結(jié)果可以看出,對于解碼cif 格式的視頻流,速率大約提高了30fps;對于解
優(yōu)化
王玲娟,張剛**
作者簡介:王玲娟,(1987-),女,在讀碩士,主要研究方向:視頻解碼算法
通信聯(lián)系人:張剛,(1953-),男,教授,主要研究方向:語音編碼、視頻編碼、嵌入式系統(tǒng). E-mail:
princessjuan520@163.com
5 (太原理工大學(xué)信息工程學(xué)院,太原 030024)
摘要:AVS 整數(shù)反變換是典型的以計算為主的解碼過程。為提高解碼速率,本文通過改進反
變換算法并用SIMD 技術(shù)對其中計算量最大、耗時最長的部分代碼進行了優(yōu)化。在此之前先
進行全零塊處理以減少不必要的計算。實驗結(jié)果表明該優(yōu)化方案可行并且解碼器的運算速度
得到顯著提高。
10 關(guān)鍵詞:AVS;反變換;SIMD
中圖分類號:TN919.8
?25 0 引言
AVS 作為中國具有自主知識產(chǎn)權(quán)的新一代音視頻編解碼標(biāo)準(zhǔn),在高清數(shù)字視頻及網(wǎng)絡(luò)
多媒體應(yīng)用方面表現(xiàn)出好的性能和低的復(fù)雜度[1]。在同等畫面質(zhì)量的前提下,AVS 標(biāo)準(zhǔn)的數(shù)
據(jù)壓縮率比傳統(tǒng)的MPEG-2 效率提高了2 到3 倍,與MPEG-4AVC/H.264 標(biāo)準(zhǔn)壓縮效率相
當(dāng),但比H.264 降低30%到50%的計算資源,大大節(jié)省了軟硬件成本,發(fā)展前景巨大[2]。而
30 目前AVS 官方提供的解碼參考軟件對于大部分視頻圖像不能進行實時解碼,不利于AVS
產(chǎn)業(yè)化的推廣,有待于不斷地進行改進和優(yōu)化以達到對基本的CIF、D1 等格式圖像的實時
解碼要求。
本文正是基于上面的應(yīng)用需求,對AVS 解碼標(biāo)準(zhǔn)進行了研究。依據(jù)AVS 整數(shù)反變換算
法的特點,對算法的實現(xiàn)進行結(jié)構(gòu)上的設(shè)計,并在vc 下利用SIMD 技術(shù)對其進行優(yōu)化。在
35 保證解碼質(zhì)量的前提下,提高了解碼軟件的運行速度,具有實際的意義。
1 SIMD 指令介紹
SIMD 指令能在一個指令周期中完成多組數(shù)據(jù)并行操作計算,是當(dāng)前多媒體信息處理實
時實現(xiàn)中一個重要的技術(shù)[3]。目前, IA-32 的SIMD 指令包括MMX、SSE、SSE2、SSE3 等
幾級,它們都是在原來的處理器指令集的基礎(chǔ)上添加的擴展指令集, 都是SIMD 指令。
?40 (1)MMX 簡介
在通用處理器中, Intel 為了提高其多媒體處理能力, 在PentiumⅡ中引入了MMX 指令,
MMX 中定義了57 條新指令、8 個64 位的寄存器和4 種新的數(shù)據(jù)類型,新指令包括算術(shù)、
比較、轉(zhuǎn)換、邏輯、移位、數(shù)據(jù)傳輸指令和狀態(tài)清空7 類,只能處理整數(shù)類型數(shù)據(jù)。
(2)SSE 簡介
45 由于MMX 的寄存器只有64 位,在處理浮點運算時就力不從心了,容易出現(xiàn)overflow
的現(xiàn)象,所以在PentiumⅢ中又加入了SSE(String SIMD Extension) 指令集。SSE 指令增加
了單精度浮點數(shù)的SIMD 支持,并且SSE 定義了8 個全新的128 位寄存器,每個寄存器可以
存放128 位的整數(shù)或浮點數(shù)。
(3)SSE2 簡介
50 在PentiumⅣ中擴充了SSE 指令集形成了SSE2 指令集。SSE2 在SSE 基礎(chǔ)上增加了對
雙精度浮點數(shù)的支持和一些新指令。SSE2 共有144 個SIMD 指令,能處理128 位整數(shù)和雙
精度浮點數(shù)運算。SSE2 由兩個不同的部分組成: SSE 部分和MMX 部分。前者主要負責(zé)處理
浮點數(shù), 后者則專門計算整數(shù)。在指令處理速度保持不變的情況下,通過SSE2 優(yōu)化后的應(yīng)用
軟件運行速度將提高2 倍。由于SSE2 指令集與MMX 相兼容, 因此將被MMX 優(yōu)化過的程
55 序再進行一次SSE2 的優(yōu)化, 則優(yōu)化的程度會更加徹底。
2 全零塊處理
AVS 使用的是預(yù)測編碼,進行反變換的矩陣存放的是殘差數(shù)據(jù),而殘差數(shù)據(jù)很明顯的
特點是:殘差值都很小,并且很多整個8*8 塊的殘差數(shù)據(jù)都為零。統(tǒng)計三個典型標(biāo)清測試視
頻的全零殘差塊的比例,如表1。
60
表1 全零塊比例統(tǒng)計
Tab.1 All-zero block ratio statistics
QP
測試
序列
(720x480)
22
28
36
football 15.9% 40.5% 65.0%
bus 21.9% 47.4% 72.9%
tempete 24.4% 49.4% 76.5%
由表1 可以看出,殘差值全為零的塊在整個視頻幀中占很大比例,特別是量化系數(shù)QP
65 較大時。利用這個特性,本文在解碼端進行一些特殊處理:解碼當(dāng)前宏塊CBP 值后對四個
亮度塊和兩個色度塊進行全零檢測標(biāo)志,如式(2-1)所示。
?若當(dāng)前解碼8*8 塊對應(yīng)coeff 系數(shù)為0,即為全零塊。根據(jù)全零的矩陣反變換后仍為零[4],
省去對該塊的反變換操作,則該塊的預(yù)測值即為像素值。這樣利用宏塊系數(shù)特征就極大的減
70 少了運算量。而不全為零的塊則需反變換后加上預(yù)測值才能得到像素值,如圖1 所示。
?圖1 全零塊的優(yōu)化示意圖
Fig.1 Optimization of all-zero block diagram
75 3 反變換模塊的算法分析
AVS 采用基于8×8 塊的整數(shù)IDCT 算法。二維整數(shù)IDCT 算法可以轉(zhuǎn)換為水平和垂直方
向的一維IDCT 算法的組合。反變換計算公式為:
H T C T T 8 8 = × × (3-1)
其中,H 表示反變換后的8×8矩陣,C 是8×8變換系數(shù)矩陣, 8 T 是8×8 反變換矩陣
(圖2),T T 8 是8 80 T 的轉(zhuǎn)置矩陣。
?圖2 AVS 中的整數(shù)變換矩陣
Fig.2 Integral Transformation Matrix of AVS
85 AVS 整數(shù)反變換的變換系數(shù)存在對稱性,僅用加法、減法和移位就可實現(xiàn),容易使用
基8 蝶形算法快速實現(xiàn)[5]。
?圖3 一維反變換蝶形算法
Fig.3 One-dimensional Inverse Transform Butterfly Algorithm
90
圖3 為水平反變換的一維8 點快速蝶形算法原理。顯然,采用兩個近似的C 語言代碼
段就可實現(xiàn)由X 到H 的變換過程。依此設(shè)計的Visual C++6.0 整數(shù)變換模塊的算法清晰簡單,
容易更改數(shù)據(jù)長度,代碼冗余少,但由于C 程序不針對硬件編程,其較低的編解碼速度不
能滿足實時性要求,因此需要利用單指令多數(shù)據(jù)技術(shù)對AVS 整數(shù)IDCT 模塊進行優(yōu)化。
95 4 反變換算法的設(shè)計與優(yōu)化
4.1 反變換算法的計算次序分析
利用矩陣乘法的結(jié)合律,公式(3-1)可以改寫為:
H = T ×C ×T T = T × (C ×T T )=(T ×C)×T T = [(C ×T T )T ×T T ]T =[T ×(T ×C)T]T 8 8 8 8 8 8 8 8 8 8
從而AVS 整數(shù)反變換算法的計算次序可分為4 類:
1) 垂直反變換-水平反變換:計算次序為H (T C) T T 8 8 100 = × × ,即先垂直反變換
H = T ×C 8
' 再水平反變換H H T T 8
= ' × ;
2) 水平反變換-垂直反變換:計算次序為H T (C T T ) 8 8 = × × ;
3) 水平反變換-轉(zhuǎn)置-水平反變換-轉(zhuǎn)置:計算次序為[( ) ]T
H C T T T T T 8 8 = × × ;
4) 垂直反變換-轉(zhuǎn)置-垂直反變換-轉(zhuǎn)置:計算次序為H = [T ×(T ×C)T ]T 8 8 。
105 無論采用上述哪種計算次序,為獲得高質(zhì)量主觀圖像效果并避免數(shù)據(jù)溢出,第一次反變
換前C 的每一個元素都要由8 位整型數(shù)據(jù)擴展為16 位,第二次反變換結(jié)果H 的每個元素都
要擴展為32 位。為兼顧較高的圖像壓縮效率,最終輸出結(jié)果需要緊縮為16 位的整型數(shù)據(jù)。
4.2 基于SSE2 的反變換算法設(shè)計
考慮到算法精度要求和寄存器有限的情況,若采用MMX 指令進行優(yōu)化,則需要多次的
110 數(shù)據(jù)讀取,而內(nèi)存單元的訪問速度也制約了多媒體指令的優(yōu)化[6]。因此本文最終決定采用
SSE2 指令集實現(xiàn)反變換模塊。SSE2 是基于128 位寄存器的指令集,其指令功能與MMX 類
似,但是并行處理能力更強大,反變換和矩陣轉(zhuǎn)置比基于MMX 的優(yōu)化更易實現(xiàn)。
?采用:“垂直反變換-轉(zhuǎn)置-垂直反變換-轉(zhuǎn)置”計算次序能僅以兩次轉(zhuǎn)置過程的延時為代價
減少水平反變換的代碼和時間開銷。具體實現(xiàn)步驟:
1) 第一次垂直反變換H = T ×C 8
115 ' :各矩陣元素為16 位,每次變換一個行向量,8
次循環(huán)后計算得到矩陣H ' ;
2) 第一次矩陣轉(zhuǎn)置得到
T H ' ;
3) 第二次垂直反變換
T H T H '
8
'' = × :每次取矩陣
T H ' 各列的前4 個元素,擴展為
32 位數(shù)據(jù)后作組合運算,每次變換4 個行向量,變換后結(jié)果緊縮為16 位數(shù)據(jù),2
120 次循環(huán)后計算得到矩陣H '' ;
4) 第二次矩陣轉(zhuǎn)置得到
T H = H '' :采用與第一次矩陣轉(zhuǎn)置相同的代碼段得到H 。
4.3 基于SSE2 的反變換算法優(yōu)化
4.3.1 PMADDWD 指令介紹
125 圖4 PMADDWD 指令
Fig.4 PMADDWD instruction
圖4 中寄存器是128 位的,上面兩個寄存器分別存儲8 個16 位數(shù)據(jù)。圖中顯示了緊縮
字乘、積相加PMADDWD 指令的執(zhí)行:將兩個寄存器相同位置的字組數(shù)據(jù)對應(yīng)相乘,然后
130 將32 位結(jié)果逐對相加并作為雙字存于寄存器中。該指令用于以下矩陣乘法。
4.3.2 矩陣乘法的高效實現(xiàn)
以4*4 矩陣為例,設(shè)計一種高效的矩陣乘法的方法。
?圖5 4*4矩陣乘法
135 Fig.5 4*4matrix multiplications
圖5 中顯示了一個典型的4*4 矩陣乘法[7]。如果簡單的存儲X 的行向量和Y 的列向量
分別到兩個寄存器后使用PMADDWD 指令,顯然,乘法運算太多和寄存器資源有限使得這
樣直接變換的匯編代碼和時間開銷代價非常大。為避免這種問題,下面顯示了一個高效的矩
140 陣乘法的方法。
?圖6 高效的4*4 矩陣乘法的實現(xiàn)
Fig.6 Efficient 4*4 matrix multiplication implementation
145 圖6 中顯示了計算結(jié)果矩陣的第一行的例子。矩陣X 和Y 以特定的形式存儲到寄存器
中,在這些寄存器對上執(zhí)行PMADDWD 指令,使每對寄存器相同位置的數(shù)據(jù)對應(yīng)相乘后結(jié)
果相加。用類似的方法計算矩陣的后三行,在這種情況下,不需要重載矩陣Y,而每行最后
的結(jié)果是完全一致的,不需要任何額外的操作重新安排他們的順序。
這種以特定形式加載過程的算法將乘積與求和循環(huán)運算,可用SIMD 指令的組合高效實
150 現(xiàn),提高了寄存器的利用率。這種方法可應(yīng)用于多個4*4 矩陣乘法運算,也可以通過修改適
應(yīng)其他大小的矩陣乘法。
4.4 優(yōu)化結(jié)果分析
本文設(shè)計的AVS 解碼器的開發(fā)平臺為Windows7 操作系統(tǒng),編譯與調(diào)試環(huán)境為Visual
Studio2008。對反變換模塊優(yōu)化前后的解碼速率進行了測試。測試用了兩個視頻序列:(1)
155 幀數(shù)為300 幀的Foreman(CIF 352x288)格式序列,由xAVS 編碼器編碼foreman.yuv 標(biāo)準(zhǔn)序
列獲得;(2)幀數(shù)為2380 幀的Rili(D1 720x576)序列。測試結(jié)果如表2 所示。
表2 測試序列數(shù)據(jù)
Tab.2 Test Sequences Result
解碼速度(fps) 測試序列 分辨率 幀數(shù)
優(yōu)化前 優(yōu)化后
Foreman CIF 300 60.53 90.62
Rili D1 2380 14.65 22.43
160
從以上測試結(jié)果可以看出,對于解碼cif 格式的視頻流,速率大約提高了30fps;對于解
碼D1 格式的視頻流,速率大約提高了8fps。因為只是對程序進行了代碼級的優(yōu)化,解碼器
的性噪比不會下降,圖像質(zhì)量不會受到影響。
?5 結(jié)論
165 本文對AVS 整數(shù)反變換算法的實現(xiàn)進行了設(shè)計,并利用SIMD 指令對其進行了優(yōu)化,
解決了直接變換的匯編代碼和時間開銷代價大的問題。在保證解碼質(zhì)量的前提下,提高了解
碼速率,對AVS 解碼器在軟件平臺上的實時實現(xiàn)是十分必要的。測試實驗表明本文所選算
法的可行性。
總結(jié)
以上是生活随笔為你收集整理的基于SIMD的AVS整数反变换算法设计与优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: avs 中国音视频标准DRA 中音频标准
- 下一篇: C#获取容器窗体中控件Location问