1、MPI 在 Windows 平台两种存储模式下的实现与比较摘要: 本文介绍了当前流行的并行编程环境 MPI(Message Passing Interface 消息传递界面)在 Windows 平台下的共享存储模式和分布存储模式的安装、实现以及对这两种存储模式的优劣加以比较。以一个经典的求 值程序做测试,并对测试结果加以分析。测试结果表明对于粗粒度、小规模的计算采用分布式存储方式效果好些。关键词: MPI ; 共享式存储模式 ; 分布式存储模式; 粗粒度 Implementation and contrast of two stored modes in MPI environment on
2、Windows platformAbstract: Discusses the installation, implementation and contrast between two stored modes (including shared mode and distributed mode) in the MPI (Message Passing Interface) parallel programming environment on Windows platform. And a program which is computing the value of has been
3、tested and experimental results show that for the coarse granularity computation the distributed mode is better than shared mode. Key words: MPI; shared mode ; distributed mode; coarse granularity1 引言计算机技术极大地推动计算科学的发展,与此同时大型科学与工程计算问题对计算速度也提出了更高的要求。实际中,单 CPU 由于受到物理器件极限速度的制约,处理能力的提高毕竟有限。而传统的并行系统成本高,专用
4、性强,系统规模不可伸缩性使得其难以推广。近年来,微处理器的性能不断提高而成本不断降低,高速局域网的不断发展,可以利用相对廉价的微机通过高速局域网构建高性能并行集群 1。与传统的超级计算机相比,并行集群计算系统有较高的性价比和很强的扩展性,可以满足不同规模的大型计算问题 2。当前,通用的消息传递软件环境主要 PVM(Parallel Virtural Machine 并行虚拟机),MPI 3 (Message Passing Interface 消息传递界面)等。而当前国际流行的 PVM 和 MPI 已经成为标准,事实上是标准的并行计算软件环境。MPI 又以其可移植性好,功能强大,效率高等多种优
5、点更受青睐。2 并行编程环境 MPIMPI 是由欧美四十个主要组织所组成的 MPI 论坛定义的一个标准。它能为高性能并行计算提供一个方便、灵活的环境,也为不同的平台消息传递提供了有效支持。因而,它具有良好的可移植性和易用性,可以在分布式存储体以及共享式存储体的可缩放并行机和工作站机群并行系统上执行。其主要的特点如下:(1)能有效地管理消息缓存区。(2)具有完备的异步通信功能,通信完全能与计算重叠进行。(3)能在大规模并行机 MPP 和机群上有效运行,是完全可移植的平台。传递消息的并行编程主要是通过调用消息传递库 MPI 函数来进行的。它实现了处理机间的数据交换功能,并提供并行任务之间的同步和收
6、发数据的接口。MPI 可以在 Windows NT/2000、Linux、Unix 平台上安装使用,MPI 的库函数可以嵌在 C、C+及 Fortran 等设计语言中调用。MPI 拥有一个上百个函数构成的函数库。采用 MPI 构建一个并行计算环境主要用到六个函数。这些函数的函数名为:MPI-Init,MPI-Comm-Size,MPI-Comm-Rank,MPI-Send,MPI-Recv, MPI-Finalize。MPI-Init,MPI-Finalize 实现 MPI 环境的初始化和结束;MPI-COMM-WORLD 通信因子是在 MPI 环境初始化过程中创建的 MPI-Comm-Siz
7、e 获取缺省组(Group)的大小;MPI-Comm-Rank 获取本进程 1 调用进程 2 在缺省组中的逻辑号(从 0开始) ;MPI-Send 和 MPI-Recv 实现消息的传递 4。3 MPI 的两种存储模式的实现与比较3.1 共享存储方式这种模式有一个独立的控制程序称为主程序,负责:1)申请和释放处理器,加载节点程序;2)执行 I/O 和处理用户界面;3)发送数据给各个节点处理器,并收集各处理器的计算结果。从程序执行实际的计算,包括:1)接收来自主机的输入消息;2)完成各自的局部计算及节点间的通信;3)回送结果给主机。在 MPI 的具体实现:首先共享网络中某台主机上 MPI 应用所在
8、的文件夹,将此共享文件夹映射为所有主机(包括打开此共享文件夹的主机)的网络驱动器,并且为每台主机选用一致的网络驱动符号,将工作目录也设为该网络驱动符号。此时 MPI 应用及其工作目录都被映射到了同一个主机上,称此主机为全局共享主机(如图 1) 。运行 mpirun,这时每台主机都将使用全局共享主机上的 MPI 应用创建进程实例,如果存在输出文件,这些文件将将保存在全局共享主机上。例如,存在 MPI 应用程序TestMPIApp.EXE,有 4 台主机HostA,HostB,HostC,HostD,现以共享存储方式部署,选择 HostA 作为主结点,将TestMPIApp.EXE 拷贝到某文件下
9、,如:“D:mpishare” ,并将此文件夹共享,编写配置文件如下:exe D:mpishareTestMPIApp.exedir Z:map Z:HostAmpisharehostsHostA 1HostB 2 Z:TestMPIApp.exeHostC 3 Z:TestMPIApp.exeHostD 4 Z:TestMPIApp.exe在命令行上执行:mpiRun conf.ini,此时 HostB,HostC,HostD 将 HostA 上的mpishare 文件夹映射为驱动器 Z:,并以”Z:”为工作目录运行 TestMPIApp.exe 程序。 3.2 分布式存储方式这种模式是在节
10、点机上执行单程序多个实例,有一个进程(通常是人工启动的那个进程)除了自身计算外,还承担着非计算性的任务。它将 mpi 应用分布到参加并行计算的各台主机上并记录其路径,书写相应的配置文件。运行 mpirun,这时每台主机将使用本地的mpi 应用产生进程实例,如果存在输出文件,这些文件将分布在各个主机中(如图 2)例如,存在一个 mpi 应用TestMPIApp.EXE,有 4 台主机HostA,HostB,HostC,HostD,将 TestMPIApp.EXE 文件拷贝到 4 台主机上,路径为:“C:”, “D:mpishare”, “D:goMPI”, “E:tempmpiapp”。选择 H
11、ostA 为主节点,编写配置文件如下:exe C:cpil.exedir C:hostsHostA 1HostB 2 D:mpishareTestMPIApp.EXEHostC 3 D:goMPITestMPIApp.EXEHostD 4 E:TempmpiappTestMPIApp.EXE在命令行上执行:MPIRun conf.ini,此时各 MPI 应用将在各主机上运行,工作目录为”C:”,默认情况下 MPI 应用所需访问的文件以及结果文件将存放在此处。图 2 分 布 式 存 储 方 式图 1 共 享 式 存 储 方 式3.3 两种存储方式的比较这两种模式各有其优缺点。共享存储方式的优点:
12、(1)易于并行编程,原有串行程序中的 I/O 与用户界面部分可以完全不变,而只需并行化计算部分;(2)充分利用主机的图形和 I/O 功能;(3)不必将 MPI 的各个应用文件手动的分布到其他节点上,MPI 的应用所产生的结果文件也不必手动的从其他节点回收。缺点:(1)调试困难:一般不允许节点直接进行 I/O 处理;(2)可移植性差:Host2node 程序不能直接在串行机上执行;(3)主节点承担的负载较大不利于负载的平衡。分布式存储方式的优点:(1)可移植性好,并行程序加少量的修改可在串行机上运行;(2)有利于各个节点的负载平衡;(3)程序可以在节点上直接使用 I/O 功能。缺点:不利于结果的
13、收集,并且需要手动的将 MPI 应用分布到参与运算的各个节点上。 54 MPI 在 Windows 平台下的安装与测试4.1 MPICH 6在 Windows 下的安装以 MPICH1.2.5 为例,介绍在 Windows 平台的安装配置方法。下载 MPICH.NT1.2.5 (http:www-unix.mcs.anl.gov/mpi/mpich),应注意该系统只能在 Windows NT/2000 上安装。(1)以管理员权限进行登录。(2)解压。(3)运行应用程序 mpich-1.2.5 安装 MPICH。(4)在 MPICH 目录下运行 MPICHConfiguretool 可对系统进行
14、配置,该程序可以自动找到局域网内安装 MPICH 的机器。(5)以两种不同的存储方式将这些机器节点搭建机群。4.2 运行测试下面用两个节点搭建一个简易的集群,以一个经典的求 程序为例在 VC+6.0 编译环境下做以测试。测试程序如下:# include “mpi.h”# include # includedouble f(double x)return (4.0/(1.0+x*x);int main(int argc,char*argv)int n=100000000,myid,numprocs,I,namelen;double mypi,pi,h,sum,x;char processor_n
15、ameMPI_MAX_PROCESSOR_NAME:MPI_Init( /初始化 mpi 环境 MPI_Comm_size(MPI_COMM_WORLD,MPI_Get_processor_name(processor_name,MPI_Bcast( /广播h=1.0/(double)n;sum=0.0;for(i=myid+1;i=n;i+=numprocs) x=h*(double)i-0.5);Sum+=f(x);mypi=h*sum;MPI_Reduce(/归约If(myid= 0)printf(“pi is apprcximately%.16f”,pi);MPI_Finalize()
16、; /结束 MPI 环境单个节点运行的时间为 1.61139s 测试结果如表 1 所示。表 1 测试结果两个节点 运行时间 误 差(取真实 值的前 25 位)加速比分布式存储方式0.831904 0.0000000000001916 1.937共享存储方式 1.359816 0.0000000000001125 1.185由于共享存储方式它必须等到消息从本地送出之后,才可以执行后续的语句,保证了消息缓冲区等资源的可再用性。而分布式存储方式不须等到消息从本地送出,就可以执行后续的语句,从而允许通信和计算的重叠,利用合适的硬件可使得计算和数据通信同时执行,所以在粗粒度,小规模的计算中采用分布式存储
17、方式效果好些。5 结语近年来 PC 集群以其较高的性价比被越来越广泛地应用。以两种不同的存储方式搭建集群各有利弊,采用哪种方式要根据具体问题规模,问题的划分方式,要考虑到通信时间,负载平衡等各方面的问题。具体问题具体对待才能取得比较理想的试验效果。参考文献:1 荣莹,曹俊兴. 基于 MPI 的机群并行计算系统平台构建J. 物探化探计算技术.2005.第 27 卷(1):89.2 何敬鹏,周容,俞建新.一个小型集群系统的建立和初步应用J.计算机应用研究,2004(1):227-230.3GroppW,Lusk E,Doss N,et al.A high-performance Portable Implementation of the MPI Message-passing Interface standardJ.Parallel Computing,1996,22(6):789-828.4陈国良.并行计算结构.算法.编程.修订版M.北京:高等教育出版社.2002:351354.5 陈慧,颉火安,陈树中. Linux 下基于 SPMD 的排序算法及实现J. 计算机应用与软件.2005.第 7 卷(3):131.6安竹林.MPICH 并行程序设计环境简介J. http:/ 2003.