欢迎来到天天文库
浏览记录
ID:5572917
大小:39.00 KB
页数:2页
时间:2017-12-19
《mpi+openmp混合编程技术总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、MPI+OpenMP混合编程一、引言MPI是集群计算中广为流行的编程平台。但是在很多情况下,采用纯的MPI消息传递编程模式并不能在这种多处理器构成的集群上取得理想的性能。为了结合分布式内存结构和共享式内存结构两者的优势,人们提出了分布式/共享内存层次结构。OpenMP是共享存储编程的实际工业标准,分布式/共享内存层次结构用OpenMP+MPI实现应用更为广泛。OpenMP+MPI这种混合编程模式提供结点内和结点间的两级并行,能充分利用共享存储模型和消息传递模型的优点,有效地改善系统的性能。二、OpenMP+MPI混合编程模式使用混合编程模式的模型结构图如图1在每个MP
2、I进程中可以在#pragmaompparallel编译制导所标示的区域内产生线程级的并行而在区域之外仍然是单线程。混合编程模型可以充分利用两种编程模式的优点MPI可以解决多处理器问的粗粒度通信而OpenMP提供轻量级线程可以和好地解决每个多处理器计算机内部各处理器间的交互。大多数混合模式应用是一种层次模型MPI并行位于顶层OpenMP位于底层。比如处理一个二维数组可以先把它分割成结点个子数组每个进程处理其中一个子数组而子数组可以进一步被划分给若干个线程。这种模型很好的映射了多处理器计算机组成的集群体系结构MPI并行在结点问OpenMP并行在结点内部。也有部分应用是不符
3、合这种层次模型的比如说消息传递模型用于相对易实现的代码中而共享内存并行用于消息传递模型难以实现的代码中还有计算和通信的重叠问题等。三、OpenMP+MR混合编程模式的优缺点分析3.1优点分析(1)有效的改善MPI代码可扩展性MPI代码不易进行扩展的一个重要原因就是负载均衡。它的一些不规则的应用都会存在负载不均的问题。采用混合编程模式,能够实现更好的并行粒度。MPI仅仅负责结点间的通信,实行粗粒度并行:OpenMP实现结点内部的并行,因为OpenMP不存在负载均衡问题,从而提高了性能。(2)数据拷贝问题数据拷贝常常受到内存的限制,而且由于全局通信其可扩展性也较差。在纯的
4、MPI应用中,每个结点的内存被分成处理器个数大小。而混合模型可以对整个结点的内存进行处理,可以实现更加理想的问题域。(3)MPI实现的不易扩展在某些情况下,MPI应用实现的性能并不随处理器数量的增加而提高,而是有一个最优值。这个时候,使用混合编程模式会比较有益,因为可以用OpenMP线程来替代进程这样就可以减少所需进程数量,从而运行理想数目的MPI进程,再用OpenMP进一步分解任务,使得所有处理器高效运行。(4)带宽和延迟限制问题减少结点间的消息但是却增加了消息的长度。在简单的通信中,比如,在某时仅允许一个结点发送/接收一条消息,消息带宽是没有影响的,整个延时会降低
5、因为此时消息的数量少了。在更复杂的情况下,允许消息并发的发送/接收,长消息数量的减少会产生不良影响。(5)通信与计算的重叠大多数MPI实现如:MPICH和LAM,都是使用单线程实现。这种单线程的实现可以避免同步和上下文转换的开销,但是它不能将通信和计算分开。因此,即使是在有多个处理器的系统上,单个的MPI进程不能同时进行通信和计算。MPI+OpenMP混合模型可以选择主线程或指定一个线程进行通信,而其它的线程执行计算的部分。3.2缺点分析虽然在很多情况下,使用OpenMP+MPI混合编程模式的程序效率更高。但是它也存在着一些不足,比如对于纯MPI应用,每个参与通信CP
6、U可以饱和结点间的带宽而MPI+OpenMP若分出一个线程进行通信则难以做到。同时,OpenMP也要产生系统开销如:线程fork/loin,为了达到同步清洗cache,空间局部性会更糟糕。采用混合编程模型的程序能否取得更高的效率取决于以下几种因素:采用混合编程模型的程序往往有着更小的通信开销,是否可以用轻量级的线程来代替重量级的MPI进程来实现并行化,还包括其它一些因素,比如MPI进程数量限制,MPl进程负载均衡问题,数据拷贝的内存限制因素。在面对实际应用的时候,一定要考虑MPI和OpenMP这两者的结合是否能够提供一个更加优化的并行平台,怎样利用两者实现并行化。一、
7、结语OpenMP+MPI这种混合编程模型相比于单纯的MPI消息传递编程模型更能充分利用多处理器计算机集群的体系结构特点,在某些情况下可以有效的改善集群的性能,它为多处理器构成的计算机集群提供了一种不错的并行策略,但是这种编程模式并不能适应所有的代码。因此,在实际的应用中,是否选择混合编程模式还需要针对实际情况而定。
此文档下载收益归作者所有