基于MPI+OpenMP混合模型的并行处理算法设计
林荫21、黑保琴2
(1.中国科学院研究生院北京 100190;2.中国科学院光电研究院北京 100190)
摘要:随着空间数据量的增大和下行速率的大幅度提高,如何将并行计算技术应用于数据处理系统已经成为了当前研究的重要课题。本文讨论了基于MPI+OpenMP混合模型的并行程序设计问题,提出了一种并行数据处理软件的设计方案。
关键词:MPI OpenMP 并行数据处理
1.引言
随着空间科学技术的发展,数据下行速率有了很大程度的提高,数据处理的时效性成为人们关注的焦点。
近年来多核结构和微处理技术发展迅速,集正逐渐成为主流的并行计算平台,应用于各个领域之中。其显著特点是性价比高和可扩展性好。MPI是消息传递接口标准,在集计算中广为应用,但是在多核处理器构成的集(以SMP为代表)上仅采用MPI消息传递模型并不能取得理想的性能。为了结合分布式内存结构和共享式内存结构两者的优势,人们提出了分布式/共享内存层次结构。OpenMP是共享存储编程的实
际工业标准,在SMP集上应用MPI +OpenMP混合编程模型,可以实现结点内和结点间两级并行,有效地改善系统性能。
2. MPI+OpenMP混合编程模型
2.1 分布式共享内存结构
并行计算机按照存储方式可以分为分布式内存并行计算机,共享内存并行计算机和分布式共享内存并行计算机3种,如图2.1所示。
a)分布式内存并行计算机  b)共享内存并行计算机  c)分布式共享内存并行计算机
图 2.1 按存储方式划分的并行计算机结构
分布内存并行计算机由多个具有局部存储模块的相互独立的处理节点通过互联网连接而成,具有很好的可扩展性和性能,但不同节点间的通信要使用消息传递机制,加大了程序设计的难度。
共享内存并行计算机中,各处理单元通过对共享内存的访问来交换信息,协调各处理器的任务。编程相对简单,但共享内存往往成为性能尤其是扩展性的瓶颈。
分布式共享内存并行计算机结合了以上两种二者的特点,节点间属于分布式内存结构,节点内各处理器间属于共享内存结构,MPI+OpenMP混合模型就是针对这种结构的。
2.2 MPI+OpenMP混合模型结构
混合模型通常采用层次结构,MPI并行位于上层,用于表示多台计算机间粗粒度的并行;OpenMP位于下层,提供轻量级线程,用于表示计算机内部各处理器间的并行。
MPI_init
MPI_Finalize
图 2.2 MPI+OpenMP混合模型结构图
图2.2给出了混合模型的结构图。在MPI的初始化(MPI_Init)和结束(MPI_Finalize)之间可以增加OpenMP的并行区域。虽然很多MPI实现都是线程安全的,但为了保证代码的可移植性,应尽量将MPI调用写在代码的线程串行区域内。如果需要在OpenMP的并行区域内调用MPI,则应根据代码的性质将其置于CriticaI,Master或者Single结构中。而且由于不同的线程都有可能成功的执行Single结构中的代码,所以使用时要谨慎。
另外,从可移植性角度考虑,混合编程时应在每个进程中通过omp_set_num_threads(n)函数来定义线程数而不是通过改变环境变量omp_num_threads的值来设置。
2.3 MPI+OpenMP混合模型优缺点分析
2.3.1 混合模型的优点
很多情况下混合模型并行程序执行效率更优,可以解决一些单纯的MPI或OpenMP程序无法解决的问题:
(1)负载均衡问题。利用MPI实现并行程序经常会遇到负载不均衡问题,限制性能的提高。通过混合模式,MPI实现粗粒度并行,只负责节点间通信,OpenMP实现节点内并行而且不存在负载不均衡问题,从而提高了性能。
(2)MPI进程数量受限的问题。在很多情况下,MPI应用实现的性能并不随处理器数量的增加而提高,而是有一个最优值。这个时候就可以使用混合编程模型,运行理想数目的MPI 进程,再用OpenMP进一步分解任务,使所有处理器高效运行。
(3)带宽和延迟问题。基于MPI的应用程序会产生由进程间通信带来的延迟和带宽问题。使用混合模型可以减少进程间通信次数,而增加消息长度。
2.3.2 混合模型的缺点
对于纯MPI应用,每个参与通信的CPU可以饱和结点间的带宽而MPI+OpenMP若分出一个线程进行通信则难以做到。而且,OpenMP也要产生系统开销,如:线程采用FORK-JOIN 并行执行模型,为了达到同步清洗cache,空间局部性会更糟糕。
另外,并不是所有的应用都适合采用混合模型,是否可以用轻量级的OpenMP线来代替重量级的MPI进程来实现并行化就是一个需要考虑的问题。
3.并行数据处理软件的设计
3.1 并行数据处理环境
随着多核技术的发展,典型的分布式共享内存结构——SMP集的应用越来越广泛。图3.1给出了具有4个结点(每个结点为一台双核计算机)的小型SMP集体系结构,各计算机通过局域网相连。并行数据处理软件就是基于这种结构开发的。
图 3.1 四结点的小型SMP体系结构
3.2 并行数据处理整体流程
目前,下行数据的格式都采用CCSDS标准,图3.2给出了现有串行数据处理软件的整体处理流程。
图 3.2 串行数据处理流程
为了提高处理速度,采用并行处理方式,如图3.3所示。
图 3.3 并行数据处理流程
3.3零级数据并行处理的设计
零级数据处理是数据处理过程中的第一步,也是耗时最长的一步。它从帧同步开始,在原始数据中去查与给定同步码相匹配的位置,然后从该位置读出一帧数据进行解扰,纠错,分路等处理,这一阶段对应图3.3中的数据并行部分。
3.3.1 并行设计模式的选择
进程间通信实验
采用既有主-从模式又有对等模式的混合设计模式。
主-从模式类似于C/S结构,在该模式中,主进程串行,协调任务,从进程计算子任务,并将结果、状态信息返回给主进程;在对等模式中,每个进程相对独立计算各自任务,如图3.4所示。
a)主-从模式                              b)对等模式
图3.4 两种典型的并行设计模式
并行程序运行的时间由所有线程中运行时间最长的那一个决定。如果仅采用主-从模式,那么主进程很容易成为计算的瓶颈;仅采用对等模式,显然不满足实际需要,所以采用让主进程也承担部分计算任务的混合模式。
3.3.2 设计方案
假定现有一个由4台双核计算机组成的小型SMP 集,可以让每台计算机上运行1个进程,每个进程包含2个线程。如果待处理原始数据文件大小为100M ,将其划分为4份,假定每份25M ,其对应关系如图3.5所示。事实上,这种均匀划分策略并不会达到最优的效率,因为主进程要参与调度工作,比其它进程会多消耗一定的时间。具体应该怎样划分还要根据原始数据的特点并经过大量的实验分析。
双核计算机
进程1
双核计算机双核计算机双核计算机进程2进程3
100M
图3.5 各计算机上进程/线程的分布及相应的部分文件
假定选取进程1为主进程,进程2,3,4为从进程。当有原始数据文件到达时,进程1将各从进程要处理的数据发送到相应的处理机上。在这一发送过程中,采用MPI 的非阻塞发送,即进程1中的线程1,线程2不等发送操作结束,直接开始进入处理过程。从进程等待接收数据结束后再开始处理。在处理过程中,可用OpenMp 来实现线程级的并行。
零级数据处理的第一步是帧同步,在这一过程中,一帧数据很可能被分成了2部分,比如:一部分位于
计算机A 要处理数据的尾部,一部分位于计算机B 要处理数据的头部,这就必然会产生进程间的通信,B 需要将到的第一个同步头前的数据发送给A 。图3.6是进程间数据传递的示意图。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。