基于SIMD的AVS整數反變換算法設計與優化

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

碼D1 格式的視頻流,速率大約提高了8fps。因為只是對程序進行了代碼級的優化,解碼器

的性噪比不會下降,圖像質量不會受到影響。
?5 結論
165 本文對AVS 整數反變換算法的實現進行了設計,并利用SIMD 指令對其進行了優化,
解決了直接變換的匯編代碼和時間開銷代價大的問題。在保證解碼質量的前提下,提高了解
碼速率,對AVS 解碼器在軟件平臺上的實時實現是十分必要的。測試實驗表明本文所選算
法的可行性。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454455.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454455.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454455.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Word -- 列表重新編號

Word -- 列表重新編號office一言:我小心翼翼地灌溉,一日復一日地期待,那么費力,植成參天的喬木,豈愿見你終有一日從容赴死?問題 word 文檔早就想解決的一個問題,這次遇到了就上網找解決掉了&…

非持久連接和持久連接

非持久連接和持久連接 HTTP既可以使用非持久連接(nonpersistent connection),也可以使用持久連接(persistent connection)。HTTP/1.0使用非持久連接,HTTP/1.1默認使用持久連接。 非持久連接 讓我們查看一下非持久連接情況下從服務器到客戶傳送一個Web頁面…

計算機開機鍵鼠無法識別,我得電腦一開機就檢測不到鍵盤和鼠標

2005-10-18 16:06:131、開機后當出現dos界面時,按一下pause鍵(這個鍵在四個方向鍵的上邊,仔細找就能找到),如果計算機啟動停止,說明你的鍵盤起作用,主板在開機時就已經檢測到了鼠標鍵盤。啟動后不能使用鼠標鍵盤&#…

vs2003 局部友元訪問私有不可訪問_C++ 類:重載運算符與友元

18.類中重載運算符與友元上次節中學習了如何在類中重新定義賦值()運算符,實際上在一個自定義類中除了賦值()運算符外,類的對象是不可以直接使用運算符的,比如你在main函數中寫這樣的代碼會報錯:如果想解決這些報錯問題&#xff0c…

oracle sqlldr (一) 最基本語法

-- Create table create table DEPT2 (DEPTNO NUMBER(2) not null,DNAME VARCHAR2(14),LOC VARCHAR2(1000) ); alter table DEPT2add constraint DEPT_PK primary key (DEPTNO);------demo.ctl LOAD DATA INFILE * --數據在控制文件中 INTO TABLE DEPT2 INSERT ---默認加…

Django REST framework 視圖

上一部分代碼在序列化部分 類繼承順序 ############### mixins.py ################ # 類中調用的方法均在 GenericAPIView 類中實現,所以下列類需要結合 GenericAPIView 使用 class ListModelMixin(object) # 查看繼承類def list(self, reque…

AVS軟件解碼器的優化

AVS軟件解碼器的優化 董斌 , 姜昱明 (西安 電子科技大學計算機學院,陜西 西安,710071)) 摘 要: 主要研究了AVS標準的視頻壓縮部分,指出了影響解碼速度的瓶頸并提出了一種優化方案.使用從程序結構入手結合使用SIMD指令集的方案來優化AVS軟件解碼器.實驗結果表明優化方案可行并且…

IOS7.1.1真的像網上流傳的那么好?沒有任何問題么??

IOS7.1.1推送更新之后到處看到網上說711好的~~ 那么IOS7.1.1真的像網上現在流傳的那么好么? 其實不然,IOS7.1.1目前眾多網友反映說升級ios7.1.1之后APPstore連接不上了,提示無法連接到APPstore。 這個問題也不難解決~還是之前的老辦法~ 那么今…

三校生計算機對口本科有哪些學校,寶山三校生五月對口高考報名

多次復習生活不可能像你想象得那么好,但也不會像你想象得那么糟。我覺得人的脆弱和堅強都超乎自己的想象。多種方式結合起來復習單一的復習方法,易產生消極情緒和疲勞,如果采用交談復習法、討論復習法、自我檢查復習法多樣化的復習方法&#…

localhost 已拒絕連接_【Python】MongoDB數據庫的連接和操作

安裝Python 要連接 MongoDB 需要 MongoDB 驅動。pip安裝:python3 -m pip3 install pymongo創建數據庫import pymongo myclient pymongo.MongoClient("mongodb://localhost:27017/")mydb myclient["loaderman"]注意: 在 MongoDB 中&#xff0c…

checkbox已設置為checked--true-但不勾選問題解決方法(只第一次勾選有效)

一、出現的問題及解決方法: 今天在寫一個table相關插件的時候無意中發現了這樣一個問題,記得以前在寫這種控制checkbox選中與非選中的代碼時并沒有這種bug,當時也是用的checked屬性,而現在卻行不通了。 于是乎做了以下測試&#x…

Python 錯誤和異常小結[轉]

原文鏈接 http://blog.csdn.net/sinchb/article/details/8392827 事先說明哦,這不是一篇關于Python異常的全面介紹的文章,這只是在學習Python異常后的一篇筆記式的記錄和小結性質的文章。什么?你還不知道什么是異常,額... 1.Py…

Django REST framework 認證、權限和頻率組件

認證與權限頻率組件 身份驗證是將傳入請求與一組標識憑據(例如請求來自的用戶或其簽名的令牌)相關聯的機制。然后 權限 和 限制 組件決定是否拒絕這個請求。 簡單來說就是: 認證確定了你是誰權限確定你能不能訪問某個接口限制確定你訪問某…

高速率AVS整數變換的匯編實現與優化

1 引言 AVS標準Ⅲ采用的8x8整數變換在獲得較H.264更高的壓縮率和主觀圖像質量的同時,增加了算法的實現復雜性和時間開銷。本文重點研究AVS編解碼器的整數變換模塊,針對不同的算法實現模式,在原有Visual C6.0整數變換模…

計算機與廣播電視論文,淺談廣播電視中計算機技術的作用論文.pdf

1、計算機技術在廣播電視的媒體內容中有重要應用在以往的廣播電視中, 媒體內容主要分為音頻和視頻兩種信號, 在傳輸的過程中使用的是模擬信號, 但模擬信號受到的外界干擾因素較為明顯, 因此廣播電視傳播的媒體內容受到影響&#x…

opencv安裝教程python3.7_Mac下安裝使用Python-OpenCV,解決opencv3安裝完成無法使用的問題 - pytorch中文網...

OpenCV是一個跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。 Mac安裝OpenCV 在我們的深度學習的過程中,對于圖像&#…

NodeJS在CentOs7下安裝

node下載地址:https://nodejs.org/en/download/ 1.安裝gcc $ yum install gcc-c 2.解壓最新版本 $ mkdir /usr/local/node$ tar zxvf node-v6.11.4.tar.gz $ cd node-v6.11.4$ ./configure --prefix/usr/local/node# 在當前目錄下編譯安裝Node$ make$ make install 3.驗證安裝 …

Python功能之反射

有如下文件: index.py 1<span style"font-family:宋體, SimSun;">#!/usr/bin/env python<br data-filtered"filtered"># -*- coding:utf-8 -*-<br data-filtered"filtered">__author__ ryan<br data-filtered"filter…

Django REST framework 分頁

分頁模式 rest framework中提供了三種分頁模式&#xff1a; from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination 全局配置 REST_FRAMEWORK {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.LimitOffsetPaginat…

解析H.264視頻編解碼DSP實現與優化

引言 基于互聯網的數字視頻產業前景看好&#xff0c;而3G的規模部署&#xff0c;也會推動移動視頻通信成為現實。但數字化后的視頻圖像具有數據海量性&#xff0c;給圖像的存儲和傳輸造成較大的困難。數字視頻產業&#xff0c;是指數字內容中以數字視頻形態為主的文化創意和傳播…