GRAPES四维变分同化系统MPI和OpenMP混合算法研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GRAPES四维变分同化系统MPI和OpenMP混合算法研究摘要:本文阐述了mpi和openmp的编程模式,并在此基础上利用mpi和openmp混合并行的方式,即:在节点内应用openmp共享存储、在节点间应用mpi进行消息传递的模式,对我国自行研发的数值天气预报系统grapes(global/regional assimilation and prediction syste)进行测试,。结果表明,混合并行算法比原来的单纯的mpi模式有更加理想的并行效率和加速比。

关键词:混合编程;mpi+openmp

中图分类号:tp301.6 文献标识码:a 文章编号:1007-9599 (2012)19-0000-02

1 引言

在高性能计算技术研究领域,机群系统具有良好的可扩展性与高性价比,受到越来越多的大学及科研机构的青睐。随着多核技术以及现代网络技术的发展,越来越多的集群采用多核处理器作为核心部件,基于多核技术的集群已经成为高性能计算领域的主流平台,集群下最常用的并行编程模式的消息传递接口mpi(message passing interface)被广泛应用与分布式以及共享内存系统,成为目前并行编程的标准。但在很多情况下,采用单纯mpi消息传递编程模式并不能取得理想的性能。针对多核机群系统既有分布式存储又有共享存储的特点,mpi+openmp混合模式更贴近于多核机群的体系结构,结合消息传递与共享存储两种编程模式的优点,优化节点内部通信,在节点间应用mpi消息传递、节点内部应用openmp

共享存储则能取得更理想的结果。

2 mpi和openmp编程模式

2.1 mpi编程模式

mpi不是一种编程语言,而是一个消息传递的接口,它以实际可用的、可移植的、高效的和灵活的特点被广泛用于消息传递的并行程序。mpi是一个接口库,它支持c语言和fortran语言。

mpi适用于共享和分布式存储的并行计算环境,它的显式并行有着很好的性能和可移植性,通常用在聚集通信的优化实例中。然而它也存在着不足:应用的开发、分解、调试都很困难,有时候还要对代码作大量的修改。为了减少通信开销和延迟,通常使用粗粒度模型。

在mpi的整个传递过程中,需要指定数据的传递类型,再数据到达传到目的进程后还需要对数据进行转换和匹配。消息传递的整个过程如下图所示:

2.2 openmp编程模式

openmp是作为共享存储标准出现的,是为共享存储环境编写并行程序而设计的一个应用接口。

openmp的工作模式采用的是“fork/join”模式。其并行执行示意图如下:

程序开始的主线程是串行,当在需要并行的时候(这时候程序中应该有相应的openmp指令语句),多个线程开始一起工作。若当前的并行块结束(仍旧由相应的openmp指令语句来控制)时,又

重新回到单一的主线程。这就是共享存储标准的并行模式—

fork/join式并行模式。

2.3 混合编程模式

mpi和openmp编程模式的相结合充分利用了共享存储编程模型和消息传递编程模式的优点,提供节点内和节点间的两级并行,很好的映射多处理器计算机组成的集群体系结构。

使用混合编程模式的结构如上图所示,mpi位于顶层而openmp 位于底层。每个mpi进程都可以在#gragma omp parallel编译制导的区域内产生多线程的并行,而在区域外仍是单线程。首先对问题进行mpi分解,每个mpi进程被分配到一个节点上,进程间使用消息传递交换信息;然后在每个mpi进程中,使用openmp制导指令创建一组线程,并分配到不同处理器上并行执行。

同单纯的mpi模型相比,mpi和openmp混合模型使用快速的共享内存访问代替节点间的消息传递模式,不仅解决了处理器间的粗粒度通信,还解决了各个处理器内部的交互,有效的降低通信的开销。此外,一般情况下随着mpi进程个数增加,并行性能会下降。而混合模式由于mpi进程数等于节点个数而不是mpi模型中的处理器的个数,这样在保证解决问题的处理器数量不变的情况下大大减少了进程数。因此混合模式有更强的可扩展性。

3 混合并行的实现

混合并行是实现时需要注意的:

3.1 对openmp中私有变量private和共享变量shared的设定。

共享变量所有线程都能访问,而私有变量是只有拥有该线程的变量才能访问。为了提高catch性能,同时避免假共享问题,在实验中应尽可能采用私有变量。

3.2 在线程执行中使用!$omp barrier制导语句来控制线程的行为。防止由于负载不均衡导致线程步调不一致出现错误结果。

实验测试的实例为我国自主研发的新一代数值天气预报系统grapes的有限区域切线模式。它的主要计算过程是一个典型的helmholtz方程。这里不再对方程求解做过多赘述。实验平台为国家气象局高性能计算集群ibm-cluster1600,编译器为xlfortran,编译优化级别为3。在集群上对单纯mpi程序和mpi+openmp混合并行程序进行测试。为了方便起见,只启动了1、2、4、6、8个节点数去运行程序。对于用单纯mpi实现的程序,每个节点上有两个进程;而对于用mpi+openmp实现的程序,每个节点上创建一个进程,每个进程内有两个线程。程序在集群上分别测试三次,取三次测试的平均值来计算加速比和运行效率。在集群的8个节点上分别运行mpi实现的程序和mpi+openmp实现的程序,当对于用mpi实现的程序,每个节点为2个进程,一共16个进程并行执行。当对于用mpi+openmp实现的程序,每个节点1个进程,每个进程中分配两个线程,一共8个进程,16个线程并行。

设定计算网格为37×31×15,水平格距1.0°,积分步长600 s,积分1600步;

4 结果与分析

这两种计算规模在不同处理器规模下的并行加速比与并行效率如下:

从以上结果不难发现:使用mpi+openmp混合并行实现的程序的优势要明显高于单纯用mpi实现的程序。当单纯mpi实现的程序并行效率下降到90%以下时,使用混合并行方式实现的程序的并行效率要比单纯用mpi实现的程序高5%到10%。

5 结束语

本文充分利用mpi和openmp各自的特点,在节点间消息传递、节点内共享存储从而实现mpi+openmp混合并行,并对grapes切线模式做出尝试,同时与单纯用mpi实现的程序的结果作对比,并得出了较为明显的结果。这说明这以混合算法在这一领域是可行的、是有一定意义的。接下来的工作就是继续挖掘并行计算的潜力,使grapes切线模式的计算效率有进一步提高,争取在原有基础上再提升10%。

参考文献:

[1]张平,李清宝,赵荣彩.openmp并行程序的编译器优化[j].计算机工程,2006(24):24-26.

[2]冯云,周淑秋.mpi+openmp混合并行编程模型应用研究[j].计算机系统应用,2006(2):33-35.

[3]陈勇,陈国良,李春生,何家华.smp机群混合编程模型研究[j].小型微型计算机系统,2004,25(10).

[4]吴兆明.mpi+openmp混合编程模式研究与效率分析[j].南京

相关文档
最新文档