高速率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.mzph.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…