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

1 引言

AVS標準Ⅲ采用的8x8整數變換在獲得較H.264更高的壓縮率和主觀圖像質量的同時,增加了算法的實現復雜性和時間開銷。本文重點研究AVS編解碼器的整數變換模塊,針對不同的算法實現模式,在原有Visual C++6.0整數變換模塊基礎上,分別應用MMX,SSE2和加強了乘法操作的SSE2內聯匯編指令技術,優化整數變換的關鍵算法,實驗結果表明,性能最優的SSE優化算法將單次整數變換的平均時延減少到0.5。ms以內,其編碼速度比Visual C++6.0整數變換模塊提高了6.3倍,實現了高速率的AVS整數變換,具有較大的實用價值。

2 AVS整數變換及蝶形算法

由于AVS正變換、反變換的基本原理近似,本文僅以正變換的分析與優化為例來詳細說明。AVS對殘差矩陣X的二維整數正變換定義為

式中:T8為變換矩陣,如圖1所示。AVS整數變換的變換系數存在對稱性,僅用加法和移位就可實現,消除了逆變換的不匹配,容易使用基8蝶形算法快速實現。圖2所示為水平變換XT8的一維8點快速蝶形算法。顯然,采用兩個近似的C語言代碼段就可實現由X到H的變換過程。依此設計的Visual C++6.O整數變換模塊的算法清晰簡單,容易更改數據長度,代碼冗余少,但由于C程序不針對硬件編程,其較低的編解碼速度不能滿足HDTV實時性要求。


3 整數變換的優化設計

3.1 AVS整數變換的算法模式

利用矩陣乘法的結合律,公式(1)可以改寫為

從而AVS整數變換的算法模式可分為4類:


1)水平變換一垂直變換:先水平變換H′=XT8再垂直變換

2)水平變換一轉置一水平變換一轉置:計算次序為

3)垂直變換一水平變換:計算次序為

4)垂直變換一轉置一垂直變換一轉置:計算次序為

無論采用上述哪種算法模式,為獲得高質量主觀圖像效果并避免數據溢出,第一次變換前殘差塊X的每個元素均要由8位整型數據擴展為16位,第二次變換結果H的每個元素均要擴展為32位。為兼顧較高的圖像壓縮效率,最終輸出結果需緊縮為16位的整型數據。

整數變換是典型的以計算為主的編碼過程[2-3],為改進數字視頻系統的實時性,需在Visual C++6.0基礎上使用內聯匯編,采用:Intel單指令多數據并行加速技術(SIMD)作面向硬件的程序流程和代碼級優化[4]。

3.2基于MMX的優化

根據上面的分析,垂直變換比水平變換的匯編實現復雜很多,且轉置過程中要并行處理多列數據,此時MMx指令集使用的64位寄存器遇到每次只能并行處理4個16位元素和2個32位元素的性能瓶頸,適合選擇"水平變換一垂直變換"的算法模式:

1)水平變換H′=XT8:各矩陣元素均為16位,每次循環分兩步處理殘差矩陣X的一行元素,組合運算后得到矩陣H′相應行的元素,8次循環后計算得到矩陣H′。

2)垂直變換:每次取矩陣H′的兩列向量的前兩個元素,擴展為32位數據后作組合運算,再將結果緊縮為16位數據;此過程分4次循環計算得到矩陣H。

圖3為基于MMX的整數變換匯編優化的算法流程。程序中多次使用混排指令pshufw,節省了大量movq和punpckhdq指令的時間開銷。

3.3基于SSE2的優化

SSE2是基于128位寄存器的指令集,并行處理能力強大,水平變換和矩陣轉置比基于MMX的優化更易實現,采用"水平變換一轉置一水平變換一轉置"模式能僅以兩次轉置過程的延時為代價減少垂直變換的代碼和時間開銷。具體實現步驟:

1)第一次水平變換H′=XT8:各矩陣元素占一個字,每次變換一個行向量;

2)第一次矩陣轉置得到H′;

3)第二次水平變換J=H′TT8:矩陣各元素占一個雙字,每次取矩陣H′各列的前4個元素并擴展為32位數據,作一系列組合運算即每次對4個行向量水平變換,變換后結果緊縮為16位數據,只需2次循環就能變換完H′T的全部元素得到矩陣J;

4)第二次矩陣轉置:采用與第一次矩陣轉置相同的代碼段得到H=JT。

根據圖4所示的算法流程,編寫的優化程序可使用大量相同的代碼段實現第一次水平變換,而第二次水平變換僅用2次循環實現,2次轉置由相同的混排程序實現,可見整個優化程序減少了循環調用和運算復雜度。



3.4側重使用SSE2乘法指令的優化

研究表明,垂直變換是匯編代碼開銷最高、時間消耗最大的環節。根據增強乘法功能SSE2指令集能在多媒體處理中大量減少乘加運算的特點,圖2和基于MMx的整數變換匯編程序中大量不可替換的乘加步驟可由側重使用SSE2乘法指令進行優化。

假定矩陣

直接計算垂直變換 得到

觀察公式(4)容易發現,一個元素hij需由H′的行向量與TT8的列向量共2個向量、16個元素計算得出,求H的任意一個行向量都須要8次重復調用H'的同一個行向量且分別調用矩陣TT8的8個列向量各一次。顯然,乘加運算太多和寄存器資源有限使得這樣的直接垂直變換編碼的代碼和冗余和時間開銷代價非常大。

如果利用寄存器特性,公式(4)對日的行向量計算可由圖5所示快速算法求出。圖中每個方框代表一個128位的寄存器空間,每個寄存器存儲8個16位數據,左右兩邊每對寄存器相同位置的數據對應相乘后結果相加,即得到所求矩陣H的行向量。這一算法大大減少了求和次數,而且乘積與求和可以循環運算,提高了寄存器的利用率。

4 優化效果

筆者分別使用MMx,SSE2并側重使用SSE2乘法指令內聯匯編,按照上文提出的優化算法在P4,1.8 GHz。512 Mbyte內存環境下進行了實驗仿真,結果如表1所示。

仿真實驗數據說明,基于SSE2的優化算法其單次AVS整數變換平均延時最短,降低到了0.5 ms以內,其編碼速度是C程序的6.3倍和基于MMX優化算法編碼速度的1.7倍,適合高端硬件實現并獲得較高的性價比;基于MMX的優化算法延時稍長,但適于低端硬件實現獲得較高的性價比;側重使用SSE2乘法指令的優化算法的編碼速度較基于MMX的優化算法優勢不大,這是因為大量乘法指令的執行產生了超出算法分析的計算延時。

5 小結

AVS整數變換的延時對數字電視系統的實時性有著重要的影響。筆者針對AVS整數變換的不同實現模式進行了研究,結合MMX,SSE2和側重使用乘法的SSE2等指令集的特性,在Visual C++6.0實現整數變換模塊的基礎上使用內聯匯編,對整數變換模塊進行了優化。實驗結果表明,基于SSE2的整數變換優化算法的性能最優,單次變換的平均時延減至0.5 ms以內,實現了高速率的AVS整數變換,適合高端硬件實現并獲得較高的性價比;基于MMX的優化算法適合低端硬件實現獲得較高的性價比,而側重使用SSE2乘法指令的優化算法也具有進一步研究的價值。

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

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

相關文章

計算機與廣播電視論文,淺談廣播電視中計算機技術的作用論文.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;是指數字內容中以數字視頻形態為主的文化創意和傳播…

ap計算機科學a買什么書,準備AP*計算機科學A考試-第1部分

你將學到什么Identify the use and proper use of Variables, Conditionals, Objects and primitives, control structures, booleans, lists and arrays, and Exceptions.Implement problem descriptions in well designed code.Identify and begin to design algorithms to s…

python 打包exe_python如何封裝為exe

1、首先進入python安裝路徑D:\Python27\Scripts下&#xff0c;查看pip或easy_install是否安裝。2、確保安裝了pip或者easy_install&#xff0c;在cmd命令行下輸入“easy_install”&#xff0c;沒有提示“xxx不是內部或外部命令……”&#xff0c;就說明easy install工具安裝成功…

CentOS7安裝Hadoop2.7完整步驟

總體思路&#xff0c;準備主從服務器&#xff0c;配置主服務器可以無密碼SSH登錄從服務器&#xff0c;解壓安裝JDK&#xff0c;解壓安裝Hadoop&#xff0c;配置hdfs、mapreduce等主從關系。 1、環境&#xff0c;3臺CentOS7&#xff0c;64位&#xff0c;Hadoop2.7需要64位Linux&…

Django REST framework 解析器和渲染器

解析器的作用 解析器的作用就是服務端接收客戶端傳過來的數據&#xff0c;把數據解析成自己可以處理的數據。本質就是對請求體中的數據進行解析。 在了解解析器之前&#xff0c;我們要先知道Accept以及ContentType請求頭。 Accept是告訴對方我能解析什么樣的數據&#xff0c…

MyBatis的學習之路(二)

上篇文章介紹了MyBatis的配置文件&#xff0c;現在來介紹實體映射文件Mapper.xml。 說道實體映射文件&#xff0c;就不得不說一下實體與表之間的映射關系&#xff1a;單表映射和多表映射。 a. 單表映射 1 public class Admin{ 2 private String id; 3 private String n…

計算機一級實驗素材題目,計算機一級EXCEL操作題整理素材(12頁)-原創力文檔...

素材摘錄&#xff0c;文檔可編輯分享PAGE 頁碼頁碼/NUMPAGES 總頁數總頁數單元格合并首先選中你要合并的單元格&#xff0c;然后找到EXCEL上的開始分區里的這種圖標或者是含有“合并”兩字的位置如圖1-1&#xff0c;如果題目要求的是要你合并單元格并讓內容居中&#xff0c;你就…

python爬取toefl_spark學習進度6-Python爬取數據的四個簡單實例

今天本來想把昨天安裝的intellij配置好&#xff0c;但是一直顯示沒有網絡&#xff0c;網上查了相關資料也沒有查出來解決辦法。然后暫停了intellij的配置&#xff0c;開始做了幾個Python爬取簡單數據的實例&#xff0c;先做了幾個最簡單的&#xff0c;以后再加大難度&#xff0…

Django REST framework 版本

API 版本控制允許我們在不同的客戶端之間更改行為&#xff08;同一個接口的不同版本會返回不同的數據&#xff09;。 DRF提供了許多不同的版本控制方案。 可能會有一些客戶端因為某些原因不再維護了&#xff0c;但是我們后端的接口還要不斷的更新迭代&#xff0c;這個時候通過…

AngularJS中的過濾器(filter)

AngularJS中的過濾器是用于對數據的格式化&#xff0c;或者篩選的函數&#xff0c;可以直接通過以下語法使用&#xff1a; {{expression|filter}} {{expression|filter1|filter2}} {{expression|filter1:param1,param2,...|filter2} 過濾器的種類有number&#xff0c;currency&…

計算機考試上傳照片教程,電腦照片傳到iPhone手機的詳細步驟【圖文】

蘋果自帶的iOS系統是不可以隨便和電腦進行數據交換的&#xff0c;必須使用iTunes軟件。許多用戶為此問題困擾&#xff0c;我們有什么可以把電腦照片傳到iPhone手機&#xff1f;下面我們就一起來看看把電腦照片傳到iphone設備的詳細步驟。具體方法如下&#xff1a;1&#xff0c;…

javaweb 導出文件名亂碼的問題解決方案

fileName new String(fileName.getBytes("ISO8859-1"), "UTF-8"); 或者 String finalFileName null; if(StringUtils.contains(userAgent, "MSIE")){//IE瀏覽器 finalFileName URLEncoder.encode(fileName,"UTF8"); }else if(Str…

AVS 分像素運動估計優化算法

—249—AVS 分像素運動估計優化算法楊涵悅 1&#xff0c;張兆楊1&#xff0c;滕國偉2(1. 上海大學通信學院&#xff0c;上海 200072&#xff1b;2. 上海廣電(集團)有限公司中央研究院&#xff0c;上海 200233)摘要&#xff1a;針對AVS 分像素運動估計的問題&#xff0c;提出一種…

計算機系統結構sw指令集,自考02325計算機系統結構復習資料六

自考生網為考生收集整理了“自考02325計算機系統結構復習資料六“以供考生們在考試前用復習資料鞏固所學到的知識&#xff0c;得到更好地復習效果。注&#xff1a;由于各省教材每年都有更新、變動&#xff0c;自考復習資料并不一定出于同一自考教材版本&#xff0c;但考生們仍可…

Django REST framework 源碼中提供的默認配置

DEFAULTS 是默認配置&#xff0c;IMPORT_STRINGS 是要相對應導入的類 鍵 大寫大寫大寫 ########################### settings.py ########################## DEFAULTS {# Base API policiesDEFAULT_RENDERER_CLASSES: (rest_framework.renderers.JSONRenderer,rest_framew…