基于MPI的H.264并行编码代码移植与优化

2010 03 25
基于MPI的H.264并行编码代码移植与优化
范 文
洛阳理工学院计算机信息工程系 洛阳 471023
摘 要 H.264获得出色压缩效果和质量的代价是压缩编码算法复杂度的增加。为了寻求更高的编码速
度,集群并行计算被运用到H.264的视频编码计算中。分析H.264可实现并行计算的任务单元选择;采用
了片(slice)级的H.264并行编码计算方法,实现了基于MPI并行环境的X264源代码移植;针对实验室的小
型集群平台,通过测试给出较优的并行任务分配方案,结果表明对标清视频在分8片以上并行编码时能够
达到实时编码的要求。
关键词 H.264;视频编码;并行计算;MPI
引言
随着计算机、通信、广播等技术的发展,数字视
频(Digital Video)已应用于许多领域,如可视电话、会
议电视、安全监控、高清晰度电视(HDTV),视频点播
(VOD)等。多媒体视频应用的广泛普及,高质量的视频
服务市场潜力巨大。实时的高清晰视频编码传输技术成
为视频发展重点。视频业务的实时应用,面临着视频图
像的大数据量、有限的通信信道的传输率、存储容量及
计算机的处理速度的瓶颈。如果单靠增加通信信道的带
宽、存储器容量及提高计算机的运算速度,效果有限而
且也不经济。而对视频数据进行高效的编码压缩,不仅
可以提高通信传输效率也节省了存储空间。
数字视频压缩技术在各种需求的推动下,不断得到
发展和提高。由视频编码专家小组(VCEG)和运动图像
专家小组(MPEG)成立的联合视频专家小组JVT (Joint
Video Term)共同制定的H.26L标准草案,其成果成为
MPEG-4的第十部分,于2002年底正式命名为H.264,
并且成为ITU-T和MPEG联合专家组JVT制订的下一代
视频编码标准AVC(Advanced Video Coding)的基础[1]。
它具备很多以往同类标准没有的优点,适用范围广泛,
发展潜力巨大。
为了获得更好的视频编码效果,视频编码计算的复
杂性也就随之极大的增加,它对计算机的处理能力要求
也越来越高。仅依赖于单核计算机处理器速度的提高,
现在还无法达到高清和标清视频的实时H.264编码压
缩。因此需要寻求一种利用现有的资源能够更高效地完
成复杂任务的方法:通过高速网络,充分利用网络连接
的计算机资源,实现复杂问题的并行计算。本文研究利
用MPI来实现视频编码的并行处理,实现H.264并行视
频编码计算,从而有效提升了H.264编码的速度。在实
时的高清、标清视频编码压缩方面,对H.264编码压缩
代码的并行处理移植实现,是一个较新并具有应用价值
的研究,这也是本论文研究的主要课题。
1 并行计算
并行计算,简单地讲就是在并行计算机或分布式计
算机等高性能计算系统上所做的大型复杂计算,其物质
基础是高性能并行计算机(包括分布式网络计算机)。并
行计算的发展基于两方面的认识:第一,单处理机性能
不可能满足大规模计算和工程问题计算的需求,而并行
计算机则是实现高性能计算、解决挑战性问题的唯一途
径;第二,同时性和并行性是客观物质世界存在的普遍
属性,具有实际物理背景的计算问题在许多情况下都可
划分为能够并行计算的多个子任务。
实现并行算法的常用软件环境是操作系统( 如
Research & Development
研究与开发
Research & Development
26 信息通信技术
L i n u x , Windows等)配合并行计算环境加上工具
语言(如C, C++, Fortran)。并行计算环境随着近
年来分布式M P P 系统与工作站集群系统的发展得
到了迅速发展,相继出现了PVM,MPI,Express,
Linda,PARMACS,P4,Nx和Zipcode等基于消息传递的
并行计算环境,目前常用的是PVM和MPI。我们选用
MPI并行环境进行研究。
MPI(Message Passing Interface)是并行计算机的
消息传递接口标准的简称,提供了一组可用于消息传
递的通信原语。MPI的标准化开始于1992年4月29日至
30在威吉尼亚的威廉姆斯堡召开的分布存储环境中消
息传递标准的讨论会,由Dongarra、Hempel、Hey和
Walker建议的初始草案,在1992年11月推出并在1993
年2月完成了修订版,这就是MPI1.0。1995年6月推出
了MPI的新版本MPI1.1,对原来的MPI作了进一步的
修改完善和扩充。MPI仅仅提供并行库,而不是一门语
言,是一种对原来的串行程序设计改动最小的并行化方
法[2]。这样,原来的串行编译器也能够使用,不需要任
何修改。编程者只需要在原来的串行程序中加入对并行
库的调用,就可以实现并行程序设计。
MPI库可以被Fortran77,Fortran90,C,C++调
用,从语法上说它遵守所有对库函数/过程的调用规
则,和一般的函数/过程没有什么区别。MPI是目前最
重要的并行编程工具,它具有移植性好,功能强大,效
率高等多种优点。
2 H.264并行化编码分析与实现
H.264的码流数据层次包括一个表头、一个或多
个图像片及序列的结束标志码。如图1所示,视频序
列(Sequence)是由一系列的图像(Picture)组成,每帧图
像由一个或多个片(slice)组成,每个片又由多个宏块
(Macroblock)组成[3]。
为了追求更高的压缩效率,去除图像序列间时间冗
余度,同时满足多媒体播放等随机存取要求,H.264将
视频序列中的图像帧划分为I帧图像(帧内编码图像)、P
帧图像(预测编码图像)和B帧图像(双向预测编码图像);
组成图像的16×16大小的宏块(Macroblock)又可以分为
4个8×8的块(Block)。在H.264中,组成片(Slice)的连
续宏块是按照一定编码顺序排列的,Slice表示的是一个
独立的编码单元,也就是说它不需要参考同一帧中其他
Slice来进行编码。通过有效的调度算法,从以上这些数
据结构中选择一个合适的并行任务单元,能够获得一个
高效率的并行编码处理器[4]。
主从模式并行处理的工作流程模型如图1所示。
本论文试验环境为小型的工作站集群。工作站机群
是将联网的多台工作站组成一个并行集群,适用于中等
规模的并行系统,价格便宜、配置灵活,但规模及并行
效率受网络设备的制约。所用的节点机器是由5台DELL
工作站组成,由千兆交换机和千兆网卡连接组成的小型
集群,采用Windows操作系统。每台工作站的配置为
Intel Xeon DualCore CPU 5130 2.0GHz两颗、内存
4G、千兆网卡。每台机器安装有MPI的MPICH-1.2.5
实现版本。本文选择X264源代码作为实现H.264并行编
码的原因,是由于X264中采用了一些算法优化,程序
结构优化及MMX, SSE, SSE2等指令优化,对原本消
耗较大的去块滤波器等做了较大程度的优化。
具体实现过程如图2所示。
3 结论
移植后的并行H.264编码程序可以运行在不同的
系统平台上。根据实验室使用的Windows平台小型集
群,每个节点有两个双核2.0GHz CPU的特点,我们
用多个不同的视频序列,采用不同的任务分配方式,测
试并行编码统计数据。
通过测试结果及实验分析,得出以下结论:影响
大分辨率视频H.264并行编码加速比的一个主要原因是
网络通信问题。提高并行编码速度的一种方法是做并
行编码时先把要编码视频数据存放在各台节点机器上,
让每个节点机器上运行的任务程序从本节点机器上读取
相应的数据片进行编码。因为YUV的视频序列数据量
很大,这种静态的数据获取可以节约大量的通信开销。
但是这种静态的数据调用,对于要实现实时分发并行编
研究与开发
2010 03 27
码是没有意义的,所以我们的H.264并行编码方案是直
接从主机向各从机实时的分配图像帧片数据。由于要通
过一个节点机器的网卡出口,同时向多台从机节点并发
数据,所以主机网络发送就成为一个提高并行编码速度
的瓶颈。虽然对于目前的720*576数据可以达到实时编
码,但是更高分辨率的视频图像,数据增加必然给主机
端的网络发送造成压力。这些可能需要双网卡的绑定,
或者其他的数据获取方式,提高并行传输的数据量。
实现并行编码还要根据不同的平台,实现不同的策
略。如上述的实验室5台工作站组成的集群平台,根据
它的特点我们得出适应并行编码的最佳条件:
1) 当分配相同工作任务数量时,在主机上工作的
任务数越多效率越高,因为每台机器是2个双核CPU相
当于有4个核,可以同时执行4个任务。在主机上工作任
务多就意味着可以尽量少的通过网络传输数据,节省整
体的通信时间。
2) 同样并行片编码任务数目时,在充分利用主机
的处理器条件下,相同的任务数量分配机器数越多速度
越快。因为H.264编码对内存的要求较高,当多个任务
分配在一个节点机器上的不同CPU核时,在一个节点
机器上各处理器共享内存,工作时对内存资源的需求造
成了冲突。所以要获得高的并行效率,需要根据集群平
台的实际情况优化任务分配策略,这也是同一个程序能
获得不同并行效果的因素。
3) 经过多组视频图像的测试,发现在8片时编码的
平均速度为27.32fps,并且每组视频序列也都达到了实
时编码的要求。
在实验室5台并行机器能实现上述任意任务的分
配,是由于我们可以写配置文件来指定任务工作方式、
任务分配节点位置、数量。在这种小型的集群平台上我
们可以按照我们的要求,最优地分配任务。学校集群平
台上的实验结果与实验室5台有所不同,是因为我们不
Research & Development
图1 主从模式并行处理的工作模型
28 信息通信技术
图2 X264程序并行执行流程
研究与开发
2010 03 29
作者简历
H.264 Code Parallel Implementation and Optimization
Based on MPI
Fan Wen
Computer and Information Engineering Department, Luoyang Institute of Science and
Technology, Luo Yang 471023, China
Abstract The cost of H.264 geting good coding effect and quality is algorithms complexity increased.
The High Perfermance Parallel Computing was used in the H.264 video coding for getting faster
speed, Choosing slice as a unit for H.264 Parallel Computing and implementing X264 codec Parallel
Computing with MPI, then the best Parallel task work effi ciency based on lab´s cluster was got and test
results indicated that the parallel coding speed of SD Video can meet real-time requirement when sliceses
are more than 8.
Keywords H.264; Video Coding; Parallel Computing; MPI
范 文
洛阳理工学院,计算机与信息工程系。
能像实验室平台那样可以在主机上多分配执行任务,节
省部分通信时间。学校的集群平台上完全是把每片数据
都通过网络发送给从机节点进行编码计算,耗费网络通
信时间较多,这是两个平台实验数据有差别的一个原
因。学校这种规模较大,为众多公众服务的集群,我们
不易按配置文件来指定任务在节点的工作方式,因为可
能同时有别的用户在使用。对于不同的集群平台要根据
实际情况优化并行任务。
参考文献
[1]
[2]
[3]
[4]
Iain E.G.Richardson.H.264 and MPEG-4
Video Compression Wiley.2003
都志辉.高性能计算之并行编程技术—MPI并行程
序设计.北京:清华大学出版社,2001
I T U - T R e c . H . 2 6 4 / I S O / I E C 1 1 4 9 6 - 1 0 .
Advanced Video Coding.Final Committee
Draft,Document JVT-F100,2002.12
孙彦辉.基于H_264编码码率控制方法研究[D].中
南大学大学硕士学位论文,2008
Research & Development

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python自动取款机程序_python ATM取款机----运维开发初学(上篇)

自动取款机基本功能:可以存取转账,刷卡信息查询,银行卡号历史信息查询,消费记录查询,修改密码。思维导图如下:数据库设计:mysql> desc balan_list; #保存账号交易记录option_type-----------…

java的运行参数

贴个java的运行参数: Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select t…

阿里服务器+Centos7.4+Tomcat+JDK部署

适用对象 本文档介绍如何使用一台基本配置的云服务器 ECS 实例部署 Java web 项目。适用于刚开始使用阿里云进行建站的个人用户。 配置要求 这里列出的软件版本仅代表写作本文档使用的版本。操作时,请您以实际软件版本为准。 操作系统:CentOS 7.4Tomcat …

php输出mysqli查询出来的结果

php连接mysql我有文章已经写过了,这篇文章主要是介绍从mysql中查询出结果之后怎么输出的问题。 一:mysqli_fetch_row(); 查询结果:array([0]>小王) 查询: [php] view plaincopy while ($row mysqli_fetch_assoc($result)) …

rhel mysql安装_RHEL6.4下MySQL安装方法及简单配置

1.MySQL安装方法简介 1.rpm包yum安装 2.通用二进制包安装 3.源码编译安装 注意:实验所采用的系统平台为:RHEL6.4 2.rpm ins首页 → 数据库技术背景:阅读新闻RHEL6.4下MySQL安装方法及简单配置[日期:2014-04-08]来源:Li…

H.264算法的DSP移植与优化

摘要:在TMS320DM643平台上实现H.264基档次编码器的移植与优化显得格外实用和必要。基于对DSP平台的结构特性和H.264的计算复杂度分析,主要从核心算法、数据传输和存储器/Cache使用几方面对H.264编码器进行了…

IDA*与A*

我实在懒得写博客了,直接放上来之前讲课做的的PPT得了。 PPT_Source Code.zip 转载于:https://www.cnblogs.com/zzzc18/p/8323927.html

java 子类 父类 转换_Java子类与父类之间的类型转换

1.向上转换父类的引用变量指向子类变量时,子类对象向父类对象向上转换。从子类向父类的转换不需要什么限制,只需直接蒋子类实例赋值给父类变量即可,这也是Java中多态的实现机制。2.向下转换在父类变量调用子类特有的、不是从父类继承来的方法…

H.264视频编解码的代码移植和优化

基于DSP系统开发的视频编解码系统,国内几乎都是走的移植,优化的路线,并且移植的代码,都是开源的。毕竟花费大量的人力,物力去开发一套自己的代码,并不见得比一些成熟的开源代码效率更高,健壮性更…

SublimeText2 快捷键

SublimeText2 快捷键,与对应功能一览表: 快捷键功能ctrlshiftn打开新Sublimectrlshiftw关闭Sublime,关闭所有打开文件ctrlshiftt重新打开最近关闭文件ctrln新建文件ctrls保存ctrlshifts另存为ctrlf4关闭文件ctrlw关闭ctrlk, ctrlb切换侧边栏显…

java-linux-eclipse配置

转载于:https://www.cnblogs.com/sheying/p/8327517.html

n皇后问题java_经典n皇后问题java代码实现

问题描述:在n*n的二维表格,把n个皇后在表格上,要求同一行、同一列或同一斜线上不能有2个以上的皇后。例如八皇后有92种解决方案,五皇后有10种解决方案。public class TestQueen {int n; //皇后的个数int num 0; // 记录方案数int…

ffmpeg mplayer x264 代码重点详解 详细分析

ffmpeg和mplayer中求平均值得方法 1 ordinary c language level #define avg2(a,b) ((ab1)>>1) #define avg4(a,b,c,d) ((abcd2)>>2) 显而易见...,注意a,b宏表达式可能引出的副作用 2 SIMD by software…

nagios监控服务器的搭建

nagios 概述: 开源的免费的网络监视工具。 监控: windows, Linux,Unix,交换机和路由器。报警。 Nagios是插件式的结构,它本身没有任何监控功能,所有的监控都是通过插件进行的,因此其是高度模块化和富于弹性的。Nagios…

BZOJ1031: [JSOI2007]字符加密Cipher

1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7882 Solved: 3425[Submit][Status][Discuss]Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考。一天,他突然想出了一种他认为是终极的加密办法&#…

java栈顶元素_栈在Java类库中的实现

栈是一种后进先出的数据结构。在它之上,主要有三种操作:(1)判断栈是否为空——empty();(2)在栈顶添加一个元素——push(E);(3)删除并返回栈顶元素——pop()。在Java类库中,Stack类实现了栈,它继承自Vector类…

LoadRunner远程监测Centos服务性能配置过程

由于公司的需要,经过一段时间的探索,参考了很多业内人士的文档,终于完成LoadRunner远程监测centos服务器的配置过程。 首先监测所需要服务是否存,如果存在就不必要安装,如果不存在,需要安装对应的服务。 监…

day 68 增删改查 语法

1 普通正则 2 分组正则 url(r/blog/(\d)/(\d),views.blog) blog(request,arq1,arq2) 按照位置传参 3 分组命名 url(r/blog/(?P<year>\d)/(?P<month>\d),views.blog) blog(request,year,month) 4 用name 指定别名 url(r/blog/(?P<year>\d)/(?P…

编译器入门 语法分析器 java_从零开始写个编译器吧 - Parser 语法分析器

Parser(语法分析器)的编写相对于 Tokenizer (词法分析器)要复杂得多&#xff0c;因此&#xff0c;在编写之前可能也会铺垫得更多一些。当然&#xff0c;本系列旨在“写出”一个编译器&#xff0c;所以理论方面只会简单介绍 tao 语言所涉及的部分。之前的几章中&#xff0c;我纯…

017——数组(十七) asort ksort rsort arsort krsort

<?php /*** 数组 asort ksort rsort arsort krsort*///asort()对数组按值排序&#xff0c;保留键名&#xff1a; /*$arrarray(bbs_url>bbs.lantian.com,web_url>www.lantian.com,bbs_name>免费视频教程,www_name>PHP项目开发, ); asort($arr); print_r($arr);…