《530MPI并行程序设计.ppt》由会员分享,可在线阅读,更多相关《530MPI并行程序设计.ppt(25页珍藏版)》请在三一办公上搜索。
1、1,MPI并行程序设计,2,提纲,1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例,3,提纲,1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例,4,MPI的定义,关于MPI三个不同侧面的定义对MPI的定义是多种多样的,但不外乎下面三个方面,它们限定了MPI的内涵和外延。(1)MPI是一个库,而不是一门语言。许多人认为MPI就是一种并行语言,这是不准确的。但是按照并行语言的分类,可以把FORTRAN+MPI或C+MPI,看作是一种在原来串行语言基础之上扩展后得到的并行语言。MPI库可以被FORTRAN77/C/Fortran90/C+调用,从语法上说,它遵守所有对库函数/
2、过程的调用规则,和一般的函数/过程没有什么区别。,5,MPI的定义,(2)MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。迄今为止,所有的并行计算机制造商都提供对MPI的支持,可以在网上免费得到MPI在不同并行计算机上的实现(mpich/chimp/lam),一个正确的MPI程序,可以不加修改地在所有的并行机上运行。(3)MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准。MPI虽然很庞大,但是它的最终目的是服务于进程间通信。,6,提纲,1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例,7,系统配置,必须的软件包mpich2-*.*.tar.gz(ft
3、p:/ftp.mcs.anl.gov/pub/mpi/)binutils(autoconf,automake)C compiler如果你需要用Fortran-77、Fortran-90、C+编写MPI程序,则必须安装相应的编译器Python 2.2 or later,8,系统配置,安装./configure-prefix=/usr/local/mpich2-enable-sharedlibs=gccmakemake install设置环境变量vim$HOME/.bashrcexport PATH=/usr/local/mpich2/bin:$PATHrootnode01 bin#which m
4、pd/usr/local/mpich2/bin/mpd,9,系统配置,MPICH密令配置mpd是mpi的进程管理器,欲启动mpi作业需首先对mpd进行配置,设置好mpd环相互通信的密令vim/etc/mpd.conf MPD_SECRETWORD=yourwordchmod 600/etc/mpd.conf,10,系统配置,本地运行程序测试rootnode01 bin#mpd&1 2969rootnode01 bin#mpdtrace-l node01_38927(192.168.226.171)rootnode01 bin#mpiexec-n 1/bin/hostname node01roo
5、tnode01 bin#mpdallexit rootnode01 bin#,11,系统配置,在一组结点上建立mpd环配置vim$HOME/mpd.hostsvim/etc/hosts交换密钥,使得登录结点无需输入密码ssh-keygen t rsascp cat$HOME/.ssh/id_rsa.pub$HOME/.ssh/authorized_keysscp/etc/mpd.conf启动mpdboot-n-f mpd.hosts,12,系统配置,查看mpd环的信息rootnode01#mpdboot-n 10-f mpd.hosts rootnode01#mpdtrace-lnode01_
6、52737(192.168.226.171)node05_57874(192.168.226.175)node10_46474(192.168.226.180)node04_44059(192.168.226.174)node03_39268(192.168.226.173)node02_41483(192.168.226.172)node08_57202(192.168.226.178)node09_45880(192.168.226.179)node07_54456(192.168.226.177)node06_37627(192.168.226.176),13,系统配置,运行及调试MPI
7、作业mpiexec n process_num host host_name executablempiexec gdbmpiexec-helpmpdlistjobs,14,提纲,1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例,C语言MPI程序的典型结构:#include“mpi.h”int main(int argc,char*argv)int myrank,size;int namelen;char processor_nameMPI_MAX_PROCESSOR_NAME;MPI_Init(,15,MPI编程解析,头文件,变量声明,MPI程序初始化,MPI程序执行部分,MPI
8、程序结束,MPI点对点消息传递MPI_Send(void*buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm)MPI_Recv(void*buf,int count,MPI_Datatype datatype,int source,int tag,MPI_Comm comm,MPI_Status status),MPI编程解析,进程0,进程1,MPI_Send,MPI_Recv,17,MPI群体通信广播(Broadcast):Int MPI_Bcast(void*buffer,int count,MPI_Data
9、type datatype,int root,MPI_Comm comm)MPI_Bcast 是从一个序号为 root 的进程将一条消息广播发送到进程组内的所有进程。,MPI编程解析,18,例:进程 0 向组内其他进程广播发送100个整型数。MPI_Comm comm;int array 100;int root=0;.MPI_Bcast(array,100,MPI_INT,root,comm);,MPI编程解析,19,MPI群体通信归约(Reduce):int MPI_Reduce(void*sendbuf,void*recvbuf,int count,MPI_Datatype dataty
10、pe,MPI_Op op,int root,MPI_Comm comm)MPI_Reduce将组内每个进程输入缓冲区中的数据按 op 操作组合起来,并将其结果返回到序号为 root 的进程的输出缓冲区中。,MPI编程解析,20,reduce操作:,进程0,进程1,进程n-1,:reduce();:,:reduce();:,:reduce();:,MPI编程解析,21,提纲,1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例,22,点对点消息传递例:数据接力传送,MPI实例,23,群体通信例:求PI求PI值的近似计算方法具有很好的并行性,用到了广播和归约两种操作PI值怎么近似求?,MPI实例,24,群体通信例:求PI,MPI实例,0 1 2 3 0 0 1 2,1/n,25,群体通信例:求PI,MPI实例,reduce,