基于龙芯3B的H.264解码器的向量化

发布者:MysticMoon最新更新时间:2010-12-18 来源: 现代电子技术 关键字:H.264  ffmpeg  解码器  Godson3B  向量化 手机看文章 扫描二维码
随时随地手机看文章

0 引言

  当今社会已经步入信息时代,传统的信息载体和通信方式已经无法满足人们对信息的需求。而实验表明:相比较语音和抽象数据,人类接受的信息更多是以图片和视频方式为载体的。其中视频信息具有直观、具体和高效的特点,这也就决定了视频通信技术将成为信息时代的重要技术之一。

  由于视频的数据量巨大,而存储视频的资源通常是非常有限的,因而对视频进行压缩编码,以减少存储资源的消耗,非常必要。然而,通常情况下,使用的压缩算法的复杂度越高,压缩比率越高,视频播放时的解码速度就会越低。因而在提高编码压缩率的同时,也需要对解码器进行相应的优化,以提高视频解码器在目标平台上的性能。本文就实现了ffmpeg解码器在龙芯3B上的移植与向量化,提高了该解码器在龙芯3B上的性能。

1 视频编/解码与龙芯3B

  1.1 视频编/解码

  目前,成熟的压缩编/解码方法有很多。其中H.261、MPEG-1、MPEG-3和H.263采用了第一代压缩编码方法,如预测编码、变换编码、熵编码以及运动补偿;而MPEG-4和H.264采用了第二代的压缩编码方法,如分段编码和基于模型或对象的编码等。

  视频压缩编码的主要目的是减少存储视频所占用的资源,而解码技术的目标则是提高解码的速度,从而提高视频播放的流畅性。常见的基于H.264编码方法的软解码器包括CoreAVC、ffmpeg和JM等。其中JM是H.264官方网站提供的编/解码器,集合了各种编/解码算法,而且代码的结构清晰,很适合应用于对视频编/解码技术的研究。而CoreAVC解码器则主要用于商用,其解码速率比ffmpeg快50%以上。ffmpeg是开源的解码器,而且性能相对较好,很多开源项目都直接或间接地使用了ffmpeg,如mplayer播放器等。通过对性能以及开源特性的综合考虑,本文选择ffmlpeg作为移植和向量化对象。

  1.2 龙芯3B体系结构

  龙芯3B处理器在兼容了MIPS64指令集的同时,实现了针对多媒体应用的向量扩展指令,这对视频编/解码应用性能的提升有很大的帮助。

  龙芯3B提供了256位的向量寄存器并实现包括256位向量访存在内的向量扩展指令。使用向量指令可以一次完成32个字节宽度数据的操作。而这样的结构和指令集设计,使得龙芯3B非常适合于实现大规模相同类型数据的相同运算,比如矩阵乘法运算和FFT运算,以及视频编/解码运算等。

  不过由于ffmpeg并未实现对龙芯3B平台的支持,因而需要完成ffmpeg到龙芯3B的移植工作。本文之前也有一些ffmpeg到其他平台的移植工作和针对龙芯平台的移植与优化工作,都取得了不错效果。

2 基于龙芯3B的ffmpeg移植

  2.1 ffmpeg的移植

  ffmpeg解码器提供了对不同目标平台的支持,而与这些平台相关的文件都保存在以该目标平台命名的目录下。例如,ffmpeg解码器实现了对arm和sparc平台,以及x86平台的支持。

  对于实现ffmpeg解码器对龙芯3B的支持,主要完成以下5个步骤:

  (1)修改configure配置文件,增加与龙芯体系结构相关的配置选项;

  (2)新建龙芯专用文件夹godson,将龙芯体系结构相关的文件都存放于该文件夹中;

  (3)将godson文件夹下新增的需要编译的文件添加到Makefile中;

  (4)增加与dsputil_init类似的新的初始化函数dsputil_init_godson;

  (5)在头文件中添加新增函数的声明。

  针对龙芯3B的ffmpeg移植工作相对比较简单,因而本文重点介绍针对龙芯3B的向量化工作。

  2.2 移植后的ffmpeg的性能比较

  本节对移植后的ffmpeg解码器进行了性能测试,对使用龙芯3B向量扩展指令和不使用龙芯3B扩展指令两种情况下的性能进行了比较。测试时使用支持龙芯3B扩展指令集的GCC编译器进行编译,并且开启-ftree-vectorize和-march=godson3b编译选项来支持龙芯 3B扩展指令。使用的测试用例为视频“walk_vag_640x480_qp26.264”,测试结果如表1所示。

  从表1的测试结果中可以看出,使用龙芯3B的向量扩展指令可以提高ffmpeg解码器在龙芯3B上的性能,用来测试的视频的解码时间减少了约466s。尽管如此,由于GCC编译器本身自动向量化能力的限制,ffmpeg解码器的性能提升还是比较有限的,因而针对龙芯3B的指令集对移植后的ffmpeg解码器进行向量化,就成为了进一步提高性能的重要工作。

3 ffmpeg的向量化

  3.1 ffmpeg的oprofile测试

  使用oprofile对ffmpeg解码视频“问道武当002.mkv”的过程进行测试,测试结果如表2所示。表2列出了各个函数的调用过程以及运行时间所占的比重。而针对ffmpeg解码器进行的向量化工作,则主要是针对oprofile测试结果中执行时间较长、运行比重较大的几个函数的向量化。

  [page]

  上述函数的执行时间几乎占据了ffmpeg解码器执行时间的60%,因而针对上述几个函数进行向量化,就完全可以达到提升ffmpeg整体解码速度的目的。

  3.2 针对龙芯3B的ffmpeg向量化

  3.2.1 向量化方法

  实现ffmpeg解码器在龙芯3B上的向量化主要是使用龙芯3B扩展的向量指令来改进3.1节中oprofile测试结果中执行时间比重较大的几个函数。而且在向量化的同时,同样可以使用一些优化策略,来提高向量化后的函数的性能。主要使用到的优化方法包括:

  (1)循环展开。循环展开是一种循环变换技术,将循环体中的指令复制多份,增加循环体中的代码量,减少循环的重复次数。需要说明的是,循环展开本身并不能直接提升程序的性能。

  使用循环展开的主要目的是充分挖掘指令或者数据间的并行性。其中向量扩展指令的使用就是利用了展开后的循环体内数据的并行性;而在展开后的循环内使用指令调度和软件流水技术则是为了充分利用指令间的并行性。

  (2)指令调度。循环展开后的循环体内的指令数目增多,因而可以进行指令调度,将不存在操作数相关性和不存在运算部件相关性的指令调度到一起,这样可以充分发挥龙芯3B的流水线性能,从而提高代码在龙芯3B上的执行速度。

  除了使用龙芯3B的向量扩展指令和使用上述两种优化方法以外,同样还可以根据具体函数的特点,使用其他一些优化方法进行优化,比如使用逻辑运算和移位运算来代替乘法运算等。针对每个函数的向量化优化在3.2.2小节中介绍。

  3.2.2 针对具体函数的向量化

  3.2.1小节概述了向量化时用到的一些优化方法,本节则针对oprofile测试中比重较大的几个函数进行有针对性的优化。

  对于表2中的函数,我们可以根据函数名将其分类,函数命名类似的函数基本上都可以使用类似的优化方法。

  (1)简单向量化。对于1号和2号函数的优化,本文都采用了使用移位运算来代替乘法运算的策略,并且针对循环内部运算的有界特性,使用饱和向量运算来改进。不过对于2号函数的访存操作,由于存在着数据非对齐的情况,因而使用额外的向量指令对数据进行打包和回写。而3号函数则是1号和2号函数的混合,因而对1号和2号函数的优化间接提升了3号函数的性能。

  而对于4号、5号和6号函数,本文仅对其内层循环使用了循环展开和指令调度策略,就能够取得不错的运算效果。

  同样,对于11和12号函数也可以比较直观的进行向量化,在此就不做详述了。

  (2)间接向量化。而对于比较难于向量化的7号和8号函数,本文分别采用了使用掩码和使用矩阵转置运算的策略来间接实现向量化。

  其中针对函数h264 v loop filter luma的C语言实现中有很多判断语句的问题,本文使用构建掩码的方式来消除这些判断语句。

  以图1(a)中的循环为例介绍掩码的构建。而图1(b)所示为代替该循环的向量指令。具体的运算结果如图1(c)所示:将p向量(数组)和q向量做饱和减法(结果为负的都置为0),得到的结果向量如Vsub所示。使用Vsub与零向量进行比较来设置掩码:结果为真,掩码值为0xFF;反之,结果为假,掩码为0。最后将掩码值与p向量进行与操作,就可以得到该循环的运算结果。

  使用构建掩码的方法来消除判断语句,不但减少了由判断引起的时间开销,而且重要的是间接将循环进行了向量化,提高了函数性能。而对于9号和10号函数,可以使用同样的方法来改进。

  而对于8号函数,由于运算处理的是连续的数据,因而无法进行向量化。使用矩阵转置的方式,将数据重新打包后,就可以进行相应的向量运算。

  对于图2(a)中的运算,原始计算是P向量内部的运算,因而无法向量化,我们用向量指令将p向量转置为q,其中q0存放p中标号为1的数据,q1存放P中标号为2的数据,依此类推。转置得到的q向量就可以用图2(b)中的向量指令运算,得到的运算结果与原来的运算相同。

 [page] 

  对于13~15号函数的优化,同样使用到了上面的转置方法。而4.1节的测试结果则说明了各个函数的优化效果。

4 实验结果

  4.1 ffmpeg各函数加速比

  本文分别对向量化后的各个函数进行了测试,并且与未向量化之前的函数进行了比较,各个函数向量化优化后的加速比如图3所示。其中图中横坐标所示函数序号与表2中的各个函数一一对应。

  图3中的函数的加速比所跨越的范围较大,比如6号函数的加速比约有23.9左右,而最后一个函数的加速比只有1.2左右。之所以会出现上述情况,除了与改进后的函数所使用的向量指令的数量和修改代码的比重有关以外,也与运算所使用的操作数的类型有关。对于6号函数,其循环内的运算所使用的操作数的类型为字节类型,因而仅仅使用向量指令进行优化,理论加速比就可以达到32,不过本文仅仅对该函数的内层循环进行了向量化,而向量化后的内层循环一次仅仅处理了 16个字节类型的数据,即并未充分使用256位的向量寄存器。因而理论的加速比应该为16,但是由于结合了循环展开和指令调度等其他优化策略,因而实际的加速比可以达到23.9左右。同样,对4号、5号和6号这三个同类型的函数进行分析,我们也可以发现:后一个函数的加速比均约为前一个函数加速比的两倍。这是因为对于4号函数,内层循环向量化后一次可以同时计算4个字节类型的数据,而5号函数可以同时计算8个字节类型的数据,因而理论上的加速比也应该是两倍的等比数列形式,而实际结果与理论分析是一致的。

  对于3.3.2小节中重点介绍的7号函数和8号函数,其原函数无法进行简单向量化,而本文使用了掩码以及矩阵转置等优化方法,使其能够使用龙芯3B的向量扩展指令,因而尽管性能提升不大,但是加速比也分别有3.2和5.5。

  4.2 不同平台上的向量化比较

  本文同样将ffmpeg解码器分别在不同的平台上进行了测试,使用的两个测试视频分别为是“问道武当002.mkv”(视频A)和“walk_vag_ 640x480_qp26.264”(视频B)。其中视频A是问道武当视频(720p)中截取的片段,而后者是通过x264对walk_vag.yuv(480p)编码生成的,编码时选用的qp值为26。而测试平台则分别选择了AMDIntel处理器平台。

  从表3的测试结果可以看出对于视频A,在龙芯3B上的性能提升比其他两个平台上都高很多;而对于视频B,在龙芯3B上的性能提升也与其它两个平台接近。实验结果表明:在龙芯3B上实现ffmpeg解码器的向量化,对性能提升有很大帮助,而且解码某些视频时,性能的提升甚至高于性能优越的商用处理器。而通过与表1中使用GCC向量化编译的结果进行比较,也可以看出:手工对ffmpeg解码器进行向量化比使用GCC进行向量化,性能有更大的提升。

5 总结和展望

  本文实现了ffmpeg解码器到龙芯3B的移植,并针对龙芯3B实现了对向量扩展指令支持的特点,对ffmpeg解码器进行了手工向量化。实验结果表明:手工向量化后的ffmpeg解码器的性能比使用GCC向量化编译后的ffmpeg解码器性能要好很多,而且性能的提升也比Intel和 AMD平台更多。

  本文仅仅从代码级实现了针对龙芯3B的ffmpeg解码器的向量化移植,为了进一步提高性能,还需要从整个算法层面上进行优化。另外,由于龙芯3B的多核特性,还可以考虑使用多核进行解码。

关键字:H.264  ffmpeg  解码器  Godson3B  向量化 引用地址:基于龙芯3B的H.264解码器的向量化

上一篇:基于微控制器的数控DC电流源系统设计
下一篇:基于Blackfin533的CCSDS图像压缩算法编码优化

推荐阅读最新更新时间:2024-03-16 10:55

基于ARM的MPEG4视频解码器
  1 引 言   本文旨在研究基于ARM微处理器的MPEG-4视频解码技术,主要应用在手持移动设备中。利用嵌入式系统实现MPEG-4视频解码,处理器的选择是关键。在嵌入式系统中常用的RISC处理器是ARM核,主要是因为它具有体积小,功耗低,成本低,性价比高的特点,这对于移动应用领域非常重要。ARM7系列微处理器为低功耗的32位RISC处理器,最适合于对价位和功耗要求较高的消费类应用。本解码器定位于低分辨率和低帧率的应用场合,因此选择在ARM7TDMI核上实现解码功能。要实现更高帧率和分辨率的解码,可将软件直接应用在更高端的处理器上。    2 MPEG-4视频解码算法的优化与实现   MPEG-4标准可以划分为一套子标准,标
[家用电子]
MAX9526低功耗视频解码器
MAX9526低功耗视频解码器将NTSC或PAL复合视频信号转换成8位或10位YCbCr分量视频,符合ITU-R BT.656标准。该器件上电时进入完全工作模式并自动配置,对检测到的输入标准信号进行解码。MAX9526在常规工作模式下典型功耗为200mW,关断模式下典型功耗小于100µW。   内部10位、54MHz模/数转换器(ADC)对输入信号进行4倍过采样。MAX9526具有带失调校准的直流恢复电路和自动增益控制功能,可精确优化ADC的满量程范围。   集成模拟抗混叠滤波器省去了外部滤波元件。MAX9526包括2:1输入复用器,根据输入端的有效信号自动选择信号。   内部行锁定锁相环(PLL)产生采样时钟和行锁定时钟(LL
[模拟电子]
MAX9526低功耗视频<font color='red'>解码器</font>
H.264视频解码芯片中与滤波相关的存储器的设计
   摘要: 本文对H.264 解码 芯片 中的滤波部分所需的数据、数据的存取及芯片中所用到的 存储器 做了深入的分析,同时涉及到DRAM 及 SRAM 的设计,并支持宏块级帧场自适应。为了实现H.264 解码芯片 中的数据的快速存取,本文提出了对数据存储的一种优化方法,通过此方法可完全达到滤波过程中对大量数据的处理。试验表明此种方法能节约存储器的资源并满足H.264 滤波中对大数据量处理的需求。   H.264 作为新一代的视频编码标准有着优异的性能,广泛应用于视频会议、视频点播、数字电视广播、数字视频存储以及消费 电子 等多个领域。与H.263或MPEG-4 相比,同等图像质量下,码率能降低一半左右,但是算
[安防电子]
<font color='red'>H.264</font>视频解码芯片中与滤波相关的存储器的设计
NXP为iDTV实现H.264/MPEG 4
  恩智浦半导体推出全球首个单芯片液晶电视解决方案,为H.264广播及MPEG-4网络内容带来高清电视(HDTV)画质。恩智浦TV543平台采用PNX8543x处理器,可帮助电视制造商改善模拟信号及数字信号接收的画质。   恩智浦TV543是第一个使用集成MPEG4/H.264解码器的解决方案,实现了对MPEG4/H.264 SD及HD内容的接收及解码,同时符合新的条件接收CI+安全标准。恩智浦TV543解决方案提供可生产参考设计,在缩短制造商产品上市时间的同时,确保无论是低、中端还是高端电视,都可实现较低的系统物料成本。针对某些地区立法提高标准、要求iDTV集成H.264解码器的情况(如在法国),恩智浦TV543为这些市场的电
[新品]
ST发布解调器和解码器二合一芯片,助力数字电视
意法半导体(纽约证券交易所代码:STM)推出一款解调器和解码器二合一芯片,新产品以互联网电视、地面或有线机顶盒为目标应用,助力中国、印度、拉美和非洲以及电视正从模拟向数字电视平移的国家地区提高数字电视接收率。 STi7167让设备厂商能够使用更少的元器件制造入门级的‘zapper’机顶盒,节省材料和组装成本。由于STi7167能够接收互联网电视、有线或地面电视信号,设备厂商不必再为不同的广播制式制造多款机型,能够进一步节省成本。片上集成的H.264/MPEG 2解码器的设计与意法半导体的STi7105独立解码器完全相同。此外,为提高应用灵活性,降低产品成本,片上集成用户可选的DVB-C和DVB-T解调
[家用电子]
ST发布解调器和<font color='red'>解码器</font>二合一芯片,助力数字电视
浅谈H.264 DVB-T机顶盒解决方案
  H.264作为新一代的视频编解码技术,与传统的MPEG-2相比,其卓越的压缩性能,使其能在较小带宽下实现更高画质的视频传输,在视频数据存储中占用更少的存储空间。   传统的DVB-T市场,MPEG-2是主流视频编解码格式。近年来,随着带宽和频率资源越来越珍贵,欧洲新兴地区、俄罗斯、土耳其等地区的运营商选择H.264作为视频编解码格式,形成了一定规模的市场,引起了机顶盒厂商的关注。   上海富瀚微电子有限公司在几年前就看到这一需求,推出了H.264解码芯片FH8601。这款ASIC芯片与业已成熟的DVB-T机顶盒芯片组合成一种双芯片解决方案。FH8601作为协处理器可接收来自主芯片(如LSI9700、NEC61123)的指令
[家用电子]
基于DDK的TLV320AIC23型编解码器的驱动设计
1 引言   TLV320AIC23是TI公司推出的一款高性能立体声音频编解码器,内置耳机输出 放大器 ,支持mic和line in二选一的输入方式。输入和输出都具有可编程的增益调节功能。TLV320AIC23的模/数转换器( ADC )和数,模转换器(DAC)集成在芯片内部.采用先进的Σ一△过采样技术.可以在8kHz至96kHz的采样率下提供16bit、20bit、24bit和32bit的采样数据。ADC和DAC的输出信噪比分别可达90dB和100dB。同时。TLV320AIC23还具有很低的功耗(回放模式为23mW。节电模式为15μw)。上述优点使得TLV320AIC23成为一款非常理想的音频编解码器,与TI的 DSP 系列
[安防电子]
基于DDK的TLV320AIC23型编<font color='red'>解码器</font>的驱动设计
基于H.264解码器的软件优化
1 引言 H.264是在ITU-T和ISO/IEC等组织先前制定的编码标准的基础上提出的,它与现今国际上大多数的视频压缩标准一样,例如H.264、H.263、MPEG-2、MPEG-4都是采用基于块的离散余弦变换与量化相结合的混合编码技术。基于分块的离散余弦变换具有压缩率高,计算复杂度低。易于实现等优点。H.264具有以下特点:比H.263+和MPEG-4(SP)减小50%码率;对信道时延的适应性较强;提高差错恢复能力;复杂度可分级设计,以适应不同复杂度的应用;引入先进技术,包括4×4整数变换、空域内的帧内预测、1/4像素精度的运动估计新技术带来较高的编码比,同时大大提高算法的复杂度。因此,H.264技术已广泛应用于高清视频
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新安防电子文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 视频监控 智能卡 防盗报警 智能管理 处理器 传感器 其他技术 综合资讯 安防论坛

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved