SMP集群上的混合并行计算1 引言并行计算机体系结构的一个发展趋势是SMP(Symmetric Multiprocessor)集群系统。
它们是由拥有多个处理器的SMP节点和连接各节点间的快速网络构成的多级体系结构。
理想的并行编程方案可使应用程序设计者能以最有效的方法使用这个混合的硬件结构,获得理想的性能而不会引起由其导致的任何开销。
在分布式内存的系统上,使用MPI的消息传递已经被广泛的应用[1-4],但是,大多数情况下,特别是在大规模节点下,采用纯的MPI并行模型并不能取得理想的性能[5]。
此外,OpenMP已经成为共享存储系统编程的工业标准。
由于SMP集群同时具有共享存储和分布存储两极存储结构,因此节点内采用OpenMP 进行多线程化、节点间采用消息传递的混合并行模式可以更好的利用SMP集群的特性[6] 。
近几年来,多极混合并行计算已经被应用于许多应用中[7],并且取得了较大的成功[8-10],本文首先介绍了OpenMP和MPI并行模型和混合并行方法,以Napa软件为例,进行了MPI+OpenMP混合并行改进,最后在大规模节点上对比了混合并行和纯MPI的性能。
2 MPI和OpenMP并行模型在并行计算领域,MPI和OpenMP是最为流行的编程模型。
2.1 MPI并行模型消息传递编程模型是使用显式方式控制并行性的分布存储模型,MPI是这一模型的事实标准。
MPI可移植到分布和共享存储体系结构上,而且允许静态任务调度。
显式并行通常提供了一个更好的性能和可移植性。
特别适用于粗粒度的并行,使用MPI实现单程序多数据(SPMD)并行模型时,每个进程只能读写本地内存中的数据,对远程数据的访问则通过进程间显式的消息传递(库函数调用)来完成的。
MPI包含了多种优化的组通信库函数,可供编程人员选择使用最佳的通信模式。
但是,MPI并行模型也有其不足之处,比如:细粒度的并行会引发大量的通信;动态负载平衡困难;并行化改进需要大量的修改原有的串行代码;调试难度大。
2.2 OpenMP并行模型OpenMP使用Fork-Join的并行执行模式。
开始时由一个主线程执行程序,该线程一直串行地执行,直到遇到第一个并行化制导语句后才开始并行执行。
过程如下: ①Fork:主线程创建一队线程并行执行并行域中的代码;②Join:当各线程执行完毕后被同步或中断,最后又只有主线程在执行。
OpenMP的编程相对简单,充分利用了共享存储体系结构的特点,避免了消息传递的开销。
虽然它也支持粗粒度的并行,但主要还是针对细粒度的循环级并行。
OpenMP的另一个特点在于将串行程序转换为并行程序时无须对代码作大的改动。
其不足之处有只能在共享存储结构的机器上运行;数据的放置策略不当可能会引发其他问题;并行化的循环粒度过小会增加系统开销等。
3 混合并行方法3.1 混合并行的实现方法为了充分利用SMP集群层次存储结构的特点,可以考虑将上述两种编程模型相结合,实现MPI/OpenMP的混合编程模型。
该模型同样具有层次结构:上层的MP I表示节点间的并行;下层的OpenMP表示节点内的多线程并行:首先对问题进行区域分解,将任务划分成通信不密集的几个部分,每个部分分配到一个SMP节点上,节点间通过MPI消息传递进行通信;然后在每个进程内采用OpenMP编译制导语句再次分解,并分配到SMP的不同处理器上由多个线程并行执行,节点内通过共享存储进行通信。
图1描述了SMP集群上MPI/OpenMP 混合编程模型的实现机制。
3.2 节点内并行的性能测试本文首先测试了节点内并行的性能,测试在Intel Xeon Woodcrest 2.6G (双核)的平台上进行,结果如图2和图3所示。
其中,Share Socket表示Socket中不同处理核之间的消息传递,而Different Socket表示不同Socket之间的消息传递。
可见Share Socket间的通信性能明显好于不同Socket 间的通信性能。
3.3 混合并行的优点MPI和OpenMP的混合编程模型提供了节点间和节点内的两级并行机制,综合了进程间各个区域的粗粒度并行和进程内部循环级的细粒度并行。
实践证明,在很多情况下其执行效率高于纯MPI和OpenMP的程序,混合并行模型解决了一些它们无法解决的问题,比如:(1)负载平衡问题[11]。
混合并行模型很好解决了单纯MPI程序不容易实现负载平衡的问题,从而提高了并行程序的性能和可扩展性。
(2)通信带宽和延迟问题[11]。
MPI并行程序进程间的通信带宽和延迟问题可能会严重影响程序的执行性能。
混合模型的程序将减少通信的次数,并且OpenMP的线程级并行具有较小的延迟。
(3)通信与计算的重叠[12]。
大多数MPI实现都是使用单线程实现的。
这种单线程的实现可以避免同步和上下文切换的开销,但是它不能将通信和计算分开,因此,对于多处理系统上,单个的MPI进程不能同时进行通信和计算。
MPI+OpenMP混合模型可以选择主线程或指定一个线程进行通信,而其他线程执行计算,从而实现了通信与计算的重叠。
(4)解决少数应用进程数受限的问题。
通过混合并行可以更好的利用所有的处理器/核都能得到高效率的应用。
4 Napa软件的并行化测试4.1 Napa软件介绍NAPA软件是南京航空航天大学自主研发的CFD软件,可以计算具有复杂气动造型的三维内外流耦合流场和旋转流场,该软件已经经过了大量的算例和实验数据验证。
本文前期的工作[13]实现了NAPA软件的并行化以及串行优化,比较了并行和串行软件的计算结果,结果表明:对NAPA软件的并行化改进和优化是成功的,在此基础上,本文针对NAPA软件进行了MPI+OpenMP的混合并行改进和并行优化,并在大规模节点上对比了混合并行和纯MPI的性能。
4.2 测试平台介绍本文的计算平台节点包括2个Socket(x86平台,主频 2.6 G 双核)和8G 内存,计算节点共32个,千兆交换机,操作系统为Red Hat 9.0,编译器为Intel Compiler 9.0,消息传递库为Mpich 1.2.7。
4.3 性能评价方法并行计算中,我们把并行程序分成两部分:即串行部分和并行部分,如果用Ts表示串行部分串行执行所需的时间,Tcomp表示并行部分串行执行所需的时间,Tcomm表示P个进程并行计算中通讯部分占用的时间,使用P个进程执行的时间为Tp,那么单进程串行执行的时间为:T1=Ts+Tcomp ,P个进程并行执行的加速比(Speedup)、并行效率(Efficiency)、通信占用比(ηcomm)分别是:4.4 性能测试本文采用不同的进程数对平板流动进行了测试,该算例中采用多块网格结构,本文下面的所有的计算负载和通讯负载都是都是平衡的,图4给出了四组不同计算规模下的加速比。
其中,图中标出的是一块网格的网格点数(共128块),另外,在本测试中,由于迭代步较少,I/O占用会影响统计时间的准确度,因此,下面测试中未计入流场计算结束后的文件输出。
对于纯MPI的测试,本文给每个处理核分配一个进程,而MPI+OpenMP混合并行的测试,本文对每个Socket 分配一个进程,同时,每个Socket上又分配2个线程。
图中可以看到,当处理核总数较少的时候,与MPI+OpenMP 混合并行模型相比,由于MPI的并行粒度相对较大,因此性能明显占优,进程数小于32的时候,除了Grid 97*13*25 之外,其余的并行效率都超过了95%,前者性能较低是由于单进程上的计算量相对其他的计算较小,因此通信占用就比较大,因此效率较低。
随着处理核的增加,MPI并行模式的通信量也增加,图4中可以看到,当通信量达到一定规模之后,不管是Share Socket还是Different Socket的通信带宽都大大减小,因此在128个处理核的测试中,MPI并行模式下的并行效率也明显降低,相对来说,而混合并行模型由于减少了通信的进程数,从而减少了计算中的通信占用比,因此性能较好。
5结束语OpenMP+MPI这种混合并行模型相比单纯的MPI消息传递更能充分利用SMP集群系统,在某些情况下可以改善性能。
本文首先对两种不同情况下的节点内的通讯进行了测试,表明基于Share Socket的通信性能较好,然后采用MPI+OpenMP混合并行模型对NAPA软件进行了改进和测试,结果表明,就NAPA软件本身而言,采用MPI并行模型在小规模节点情况下性能较好,而采用混合并行模型在多节点情况下可以大大减少通信,从而获得更好的性能。
参考文献:[1] Dimitri J. Mavriplis, Michael J. Aftosmis, Marsha Berger, High Resolution Aerospace Applications using the NASA Columbia Supercomputer, 2005[2] Charles D H.Two-dimensional aerodynamic characteristics of the NACA0012 airfoil in the langley 8-foot transonic pressure tunnel[R].NASA TM-81927,1981[3] 吕晓斌,兰黔章,朱自强.二维跨音速Euler方程分区并行算法[J].北京航空航天大学学报,2000,26(2):194-197[4] 朱国林,李树民,王开春.维低速NS方程的并行计算[J].空气动力学学报,2002.[5] 冯云,周淑秋天.MPI+OpenMP混合并行编程模型应用研究[J].计算机系统应用,2006,(2).[6] 赵永华,迟学斌.基于SMP集群的OpenMP和MPI 混合编程模型及有效实现[J].微电子学与计算机,2005,22(10).[7] D S Henty. Performance of Hybrid message Passing and Shared Memory Parallels for Dircrete Element Modeling[J], In Proceedings of the ACM/IEEE conference on Supercomputing, Dalas, Texas, United States, 2000:10.[8] R Rabenseifner, G Wellein. Communication and Optimization Aspects of Parallel programming Models on Hybrid Architecture. International Journal of High Performance Computing Applications, 2003, 17(1).[9] F Cappello, D Etiemble. MPI Versus MPI+OpenMP on IBM SP for the NASBenchmarks. In Proceedings of 2000 ACM/IEEE Conference on Supercomputing, Dallas, Texas, USA, IEEE Computer Society Press, 2000[10] G Krawezik, F Cappello. Performance Comparison of MPI and Three OpenMP Programming Style on Shared Memory Multiprocessors. In ACM SPAA, San Diego, USA, Jun. 2003[11] 单莹,吴建平,王正华.基于SMP集群的多层次并行编程模型与并行优化技术[J].计算机应用研究,2006.[12] USFMPI:A Multi-threaded Implementation of MPI for Linux Clusters[C] In Proceedings of the 15thInternational Conference on Parallel and Distributed Computing and Systems, Marina del Rey, CA 2003.[J] Scientific Programming, V ol. 9, No 2-3,2001.[13] 金君,梁德旺,黄国平,雷雨冰.NAPA软件的并行化研究和效率分析[J].南京航空航天大学学报,2006,38(4).。