您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 530-MPI并行程序设计
1MPI并行程序设计2提纲1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例3提纲1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例4MPI的定义关于MPI三个不同侧面的定义对MPI的定义是多种多样的,但不外乎下面三个方面,它们限定了MPI的内涵和外延。(1)MPI是一个库,而不是一门语言。许多人认为MPI就是一种并行语言,这是不准确的。但是按照并行语言的分类,可以把FORTRAN+MPI或C+MPI,看作是一种在原来串行语言基础之上扩展后得到的并行语言。MPI库可以被FORTRAN77/C/Fortran90/C++调用,从语法上说,它遵守所有对库函数/过程的调用规则,和一般的函数/过程没有什么区别。5MPI的定义(2)MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。MPI的支持,可以在网上免费得到MPI在不同并行计算机上的实现(mpich/chimp/lam),一个正确的MPI程序,可以不加修改地在所有的并行机上运行。(3)MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准。MPI虽然很庞大,但是它的最终目的是服务于进程间通信。6提纲1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例7系统配置必须的软件包mpich2-*.*.tar.gz()binutils(autoconf,automake)Ccompiler如果你需要用Fortran-77、Fortran-90、C++编写MPI程序,则必须安装相应的编译器Python2.2orlater8系统配置安装./configure--prefix=/usr/local/mpich2--enable-sharedlibs=gccmakemakeinstall设置环境变量vim$HOME/.bashrcexportPATH=/usr/local/mpich2/bin:$PATH[root@node01bin]#whichmpd/usr/local/mpich2/bin/mpd9系统配置MPICH密令配置mpd是mpi的进程管理器,欲启动mpi作业需首先对mpd进行配置,设置好mpd环相互通信的密令vim/etc/mpd.confMPD_SECRETWORD=yourwordchmod600/etc/mpd.conf10系统配置本地运行程序测试[root@node01bin]#mpd&[1]2969[root@node01bin]#mpdtrace-lnode01_38927(192.168.226.171)[root@node01bin]#mpiexec-n1/bin/hostnamenode01[root@node01bin]#mpdallexit[root@node01bin]#11系统配置在一组结点上建立mpd环配置vim$HOME/mpd.hostsvim/etc/hosts交换密钥,使得登录结点无需输入密码ssh-keygen–trsascpcat$HOME/.ssh/id_rsa.pub$HOME/.ssh/authorized_keysscp/etc/mpd.conf启动mpdboot-nnumbertostart-fmpd.hosts12系统配置查看mpd环的信息[root@node01~]#mpdboot-n10-fmpd.hosts[root@node01~]#mpdtrace-lnode01_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作业mpiexec–n{process_num}–host{host_name}executablempiexec–gdbmpiexec--helpmpdlistjobs14提纲1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例C语言MPI程序的典型结构:#include“mpi.h”…………intmain(intargc,char*argv[]){intmyrank,size;intnamelen;charprocessor_name[MPI_MAX_PROCESSOR_NAME];…………MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myrank);MPI_Comm_size(MPI_COMM_WORLD,&size);MPI_Get_processor_name(processor_name,&namelen);…………MPI_Finalize();…………}15MPI编程解析头文件变量声明MPI程序初始化MPI程序执行部分MPI程序结束MPI点对点消息传递MPI_Send(void*buf,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Commcomm)MPI_Recv(void*buf,intcount,MPI_Datatypedatatype,intsource,inttag,MPI_Commcomm,MPI_Statusstatus)MPI编程解析进程0进程1MPI_SendMPI_Recv17MPI群体通信广播(Broadcast):IntMPI_Bcast(void*buffer,intcount,MPI_Datatypedatatype,introot,MPI_Commcomm)MPI_Bcast是从一个序号为root的进程将一条消息广播发送到进程组内的所有进程。MPI编程解析18例:进程0向组内其他进程广播发送100个整型数。MPI_Commcomm;intarray[100];introot=0;......MPI_Bcast(array,100,MPI_INT,root,comm);…进程0进程1进程n-1MPI编程解析19MPI群体通信归约(Reduce):intMPI_Reduce(void*sendbuf,void*recvbuf,intcount,MPI_Datatypedatatype,MPI_Opop,introot,MPI_Commcomm)MPI_Reduce将组内每个进程输入缓冲区中的数据按op操作组合起来,并将其结果返回到序号为root的进程的输出缓冲区中。MPI编程解析20reduce操作:…进程0进程1进程n-1:reduce();::reduce();::reduce();:MPI编程解析21提纲1.MPI的定义2.系统配置3.MPI编程解析4.MPI实例22点对点消息传递例:数据接力传送MPI实例23群体通信例:求PI求PI值的近似计算方法具有很好的并行性,用到了广播和归约两种操作PI值怎么近似求?MPI实例24群体通信例:求PIMPI实例01230……0121/n25群体通信例:求PIMPI实例BcastCCC…进程0进程1进程n-1reduce
本文标题:530-MPI并行程序设计
链接地址:https://www.777doc.com/doc-3228266 .html