学术文化网:本站代理期刊可作为职称及学位评审依据;并代写(职称、本科、硕士、博士)论文,代写代发论文一条龙服务;保证原创,保证质量,100%通过,保密服务

学术文化网

重点推荐省级国家级期刊、北大中文核心、CSSCI、EI、SCI发表,稳妥操作,速度快,包发表。有意向联系客服咨询。
论文代写:十年专业服务品质,全部由期刊编辑、硕士、博士撰写;保证原创、版权归您;保证通过、否则全额退款。代写论文申请表
论文发表:与百家优秀期刊合作,代理审核组稿,论文发表涵盖所有专业领域,全部正刊,保证出刊,否则全额退款。代写代发论文申请表
业务合作:因业务发展需要,诚招优秀写手合作,要求硕士以上学历,不限专业,另诚征优秀期刊代理合作,具体详谈。QQ:415835425 代写论文写手申请表
当前位置: 主页 > 工科论文

基于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。因为只是对程序进行了代码级的优化,解码器
学术论文网Tag:代写论文 论文发表 代发论文 职称论文发表 通信论文代写

本站郑重声明:
  1、我们与数十所知名高校博士强强联手,保持常年稳定合作关系,论文质量更有保证;;
  2、写作领域涉及所有专业,实力操作,出稿更快,质量更高,通过率100%;
  3、所有代写文章,全部原创,包检测,保证质量,后续免费修改,保证通过;
  4、信誉实力服务,专业代写毕业论文,职称论文,硕博士论文,留学生论文,成熟操作;
------分隔线----------------------------
栏目列表
联系我们
服务承诺
推荐内容