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