排行榜 创业指南

扫一扫关注有惊喜

TOP

如何基于CUDA的H.264视频实现编码
内容摘要:如何基于CUDA的H.264视频实现编码

  摘要:CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的通用并行计算架构,可进行大规模并行计算和处理密集型数据。系统地分析H.264编码器各模块的编码性能及复杂性,基于CUDA研究H.264标准编码在可编程图形处理器上的实现,充分利用CUDA存储器资源与并行计算能力可加速编码的各关键模块处理过程,可提高H.264的编码速度。

  关键词:H.264视频编码,CUDA,并行框架

  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2011)20-4966-02

  H.264是由ITU-T VCEG和ISO/IEC MPEG联合推出的国际视频编码标准,具有较高的视频编码压缩率和网络适应性。由于H.264的高效率编码主要来自于新的关键技术,而每一个新的关键技术都会造成计算复杂度的提升,因而导致H.264视频编码在编解码时计算量显著增加。故H.264的高效压缩编码性能是以增加编解码时间为代价的,如何降低H.264的计算复杂度,有效的提高H.264的编码速度是一个重要的研究课题。

  1 H.264编码器中各模块的编码性能

  H.264的主要编码流程包括:帧内预测、运动估计/运动补偿、整数变换/量化、熵编码、去块效应滤波。分析H.264编码器的典型运行周期,采用JVT的JM软件,在Pentium Dual-Core 2.93GHz,内存4GB的平台下运行,对三个不同分辨率大小的视频序列suzie_qcif 176×144,news_cif 352×288,soccer 704×576测试各个模块的时间比例,可知三个视频序列各个模块的平均时间比例如表1所示。

  在H.264编码过程中,复杂度最高、耗时最长的是运动估计/补偿部分,占81.73%;其次是帧内预测和整数变换/量化部分,分别占5.84%和5.46%,熵编码、滤波和其它占6.97%。为了提高整体的编码速度,满足系统实时性要求,非常有必要降低各个模块尤其是运动估计、帧内预测和整数变换/量化部分的计算时间。

  2 基于CUDA的H.264视频编码并行框架

  NVIDIA推出了支持CUDA的GPU架构,既采用了统一处理架构,又引入了片内共享存储器,支持随机写入和线程间通信。为了充分利用CUDA存储器资源与并行计算能力,考虑关键模块的数据相关性与可并行性,提出一个基于CUDA的H.264视频编码的并行框架,如图1所示。把运动估计/运动补偿、帧内预测、整数变换及量化、去方块滤波 、熵编码放入GPU内完成,CPU端只负责视频数据和码流的传输,最大程度发挥GPU的并行度。

  运动估计/运动补偿在H.264视频编码中是计算密度最大的部分,用CUDA实现运动估计对提高整体编码速度起着相当重要的作用。本框架充分利用资源的并行度,帧间预测使用整帧图像中宏块与宏块之间进行并行计算的策略,大大减少视频编码的时间;并使用可变尺寸块的全搜索运动估计算法,合理地分配线程,尽可能多的利用共享存储器以减少对全局存储器的访问,高效地实现了全搜索运动估计算法在CUDA架构下的并行过程。

  帧内预测在H.264视频编码中是一个耗时的模块。本框架采用一种块级并行的帧内模式选择方法,即改进原有的块内并行方法,使用基于宏块之间的并行实现。该方法打破了原来块与块之间像素的依赖关系,用原始块像素代替重构像素来预测当前块的像素值以便达到块级之间并行,用CUDA并行执行,可加快编码的速度。

  H.264视频编码中整数变换是针对4×4大小的残差块进行的一种变换,残差块之间的数据是相互独立的,每一块的像素都执行相同的变换操作,非常适合并行计算。本框架通过优化的整数DCT变换采用宏块间并行实现对残差数据的变换及量化,这样便能充分利用CUDA的并行计算能力,提高并行度。

  量化后的系数矩阵要进行Zigzag排序与熵编码。本框架可采用霍夫曼编码代替CAVLC熵编码。在熵编码之前先进行zigzag扫描,把一个宏块划分为一个线程块,这样,一个宏块包括16个线程,用一个线程对4×4的块进行扫描、编码。使用CUDA实现编码时,数据操作过程的控制方式如下:

  dim3 blocksize(16,16);

  dim3 gridsize((NX/blocksize.x,NY/blocksize.y);

  kernel_function<<>>();

  其中kernel_function为实现各环节的核函数。此外,在GPU端还需要声明一些 __device__ 类型的函数用于实现核函数的子过程。

  通过对H.264视频编码各个关键模块的CUDA实现,基本建立起一个基于CUDA编程模型的H.264标准并行框架,下面通过具体的实验来分析,基于CUDA的H.264并行框架在具体的编码过程中的编码速度与普通的CPU编码速度相比所产生的加速效果。

  3 实验分析

  应用基于CUDA的H.264视频编码并行框架进行程序实现与实验测试,在JVT提供的JM16.1参考软件做测试平台下,对三个不同分辨率大小的视频序列suzie_qcif 176×144,news_cif 352×288,soccer 704×576测试进行测试:各测试序列取50帧,搜索范围为16×16,运动估计采用全搜索算法,参考帧数量为3帧。视频编码的各个模块在CPU和GPU上分别运行的整个编码时间如表2(时间单位为秒)所示。

  实验可知,对不同分辨率大小的视频序列进行视频编码过程,在GPU上运行的时间比CPU明显降低,各个分辨率大小的加速比为两倍左右,充分体现了GPU强大的并行计算能力,但是由于各个模块之间的参数需要来回拷贝,花费大量的时间,从而整体加速比CPU的编码速度只提高了两倍左右;从分辨率大小为176×144、352×288、704×576的加速比来看,其加速比例一直在提升,可见在一定范围内,数据越密集,数据量越大,越有利于CUDA的加速。

  4 结论

  系统地分析H.264编码器各模块的编码性能及复杂性,对H.264视频编码的各个关键模块进行CUDA实现:帧内预测使用原始像素代替重构像素来预测当前块的像素值以便达到块级之间并行;帧间预测则通过改进原有的块内并行方法,使用基于宏块之间的并行实现;然后通过优化的整数DCT变换采用宏块之间并行实现对残差数据的变换及量化;最后对量化后的系数矩阵完成Zigzag排序与熵编码。基本建立了一个基于CUDA的H.264视频编码并行框架。并用程序实现前面研究的并行模块,在CPU和GPU上测试不同分辨率的视频序列,对整个编码时间进行比较。通过实验结果的分析得出结论,基于CUDA的H.264视频编码并行框架的编码过程与普通的CPU编码相比有两倍左右的加速效果。

  参考文献:

  [1] 毕厚杰.新一代视频压缩编码标准[M].北京:人民邮电出版社,2005:105-289.

  [2] 张舒,褚艳利.GPU高性能运算之CUDA[M].北京:中国水利水电出版社,2009:2-141.

责任编辑:中宾科技

标签云: 名人百科网,品牌百科网 辅导班开课通知家长群 美术培训班搬迁通知 少儿美术开课通知 艺术培训班开课通知范文 美术班复课通知 培训班开课通知话术 画室开课通知 美术培训班开课通知模板 培训机构上课温馨提示 奶茶店成功营销方案 美容院顾客裂变方法 老客户转介绍激励方案 转介绍的方案和思路 美容院如何快速裂变 美容院如何玩裂变 裂变客户的十种方法 小型餐饮业营销计划方案 餐饮全年营销方案计划表 餐饮行业营销策划的特点 我开早餐店的真实经历做早餐生意的窍门开早餐店的惨痛经历未来早 线下宣传推广策划方案 产品线下推广活动方案 完整的婚礼策划方案 地推的60种方法 电商平台促销活动方案 线上推广的渠道有哪些 推广品牌的策划方案 地推活动策划方案创意 旅游景区营销推广方案
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到QQ空间
分享到: 
上一篇CD-ROM出版物市场调查分析 下一篇计算机软件保护之修改权研究

相关阅读:

相关栏目

安全提示

最新文章

热门信息

siteMap.txt