MPI并行程序设计探索

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

LOGOMPI并行程序设计探索学号:88888888姓名:***什么是MPI?MassagePassingInterface:是消息传递函数库的标准规范,由MPI论坛开发,支持Fortran和C一种新的库描述,不是一种语言。共有上百个函数调用接口,在Fortran和C语言中可以直接对这些函数进行调用MPI是一种标准或规范的代表,而不是特指某一个对它的具体实现MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准MPI的发展过程发展的两个阶段MPI1.1:1995MPICH:是MPI最流行的非专利实现,由Argonne国家实验室和密西西比州立大学联合开发,具有更好的可移植性.MPI1.2~2.0:动态进程,并行I/O,远程存储访问、支持F90和C++(1997).为什么要用MPI?高可移植性MPI已在IBMPC机上、MSWindows上、所有主要的Unix工作站上和所有主流的并行机上得到实现。使用MPI作消息传递的C或Fortran并行程序可不加改变地运行在IBMPC、MSWindows、Unix工作站、以及各种并行机上。MPI的开发环境硬件环境:一台PC机软件环境:操作系统:WindowsXPSP3开发工具:VS2010,mpich2配置MPI开发环境配置MPICH2:1、安装MPICH2,自选安装路径;2、注册一个账户,具体操作如下:“开始”按钮--所有程序--MPICH2--wmpiregister.exe。输入用户名、密码。注意:该用户名须为有效的操作系统管理员账户,密码对应为系统登录密码。配置MPI开发环境配置MPICH2:3、测试安装好的MPICH2,“开始”按钮--所有程序--MPICH2--wmpiexec.exe。MPI的开发环境在VS2010中添加MPICH2:1、新建一个项目;2、在VS2010中添加MPI的lib和include。具体过程:“项目”--“属性”--“配置属性”--“VC++目录”,在包含目录中添加MPI的include文件夹目录,在库目录中添加MPI的lib文件夹。HelloWorld!下面我们首先分别以C语言的形式给出一个最简单的MPI并行程序HelloWorld.HelloWorld是如何被执行的?SPMD:SingleProgramMultipleData(SIMD)::::#includempi.h#includestdio.hmain(intargc,char*argv[]){MPI_Init(&argc,&argv);printf(Hello,world!\n);MPI_Finalize();}#includempi.h#includestdio.hmain(intargc,char*argv[]){MPI_Init(&argc,&argv);printf(Hello,world!\n);MPI_Finalize();}#includempi.h#includestdio.hmain(intargc,char*argv[]){MPI_Init(&argc,&argv);printf(Hello,world!\n);MPI_Finalize();}#includempi.h#includestdio.hmain(intargc,char*argv[]){MPI_Init(&argc,&argv);printf(Hello,world!\n);MPI_Finalize();}#includempi.h#includestdio.hmain(intargc,char*argv[]){MPI_Init(&argc,&argv);printf(Hello,world!\n);MPI_Finalize();}rsh\ssh最基本的MPIMPI调用借口的总数虽然庞大,但根据实际编写MPI的经验,常用的MPI调用的个数非常有限。上面介绍的是6个最基本的MPI函数。1.MPI_Init(…);2.MPI_Comm_size(…);3.MPI_Comm_rank(…);4.MPI_Send(…);5.MPI_Recv(…);6.MPI_Finalize();MPI_Init(…);…并行代码;…MPI_Fainalize();只能有串行代码;MPI初始化intMPI_Init(int*argc,char**argv)MPI_INIT是MPI程序的第一个调用,它完成MPI程序的所有初始化工作。所有的MPI程序的第一条可执行语句都是这条语句。启动MPI环境,标志并行代码的开始.并行代码之前,第一个mpi函数(除MPI_Initialized()外).要求main必须带参数运行,否则出错.MPI结束intMPI_Finalize(void)MPI_FINALIZE是MPI程序的最后一个调用,它结束MPI程序的运行,它是MPI程序的最后一条可执行语句,否则程序的运行结果是不可预知的。标志并行代码的结束,结束除主进程外其它进程.之后串行代码仍可在主进程(rank=0)上运行(如果必须).MPI_Comm_size()和MPI_Comm_rank()在写MPI程序时,我们常需要知道以下两个问题的答案:任务由多少个进程来进行并行计算?我是哪一个进程?MPI提供了下列函数来回答这些问题:用MPI_Comm_size获得进程个数pintMPI_Comm_size(MPI_Commcomm,int*size);用MPI_Comm_rank获得进程的一个叫rank的值,该rank值为0到p-1间的整数,相当于进程的IDintMPI_Comm_rank(MPI_Commcomm,int*rank);MPI_Comm_size()和MPI_Comm_rank()Send和RecvMPI并行通信程序进程0rank=0..Send()...进程1rank=1进程2rank=2进程3rank=3..Send().....Send().....Recv()...MPI并行通信程序#includestdio.h#includempi.hmain(intargc,char*argv[]){intnumprocs,myid,source;MPI_Statusstatus;charmessage[100];MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI并行通信程序if(myid!=0){strcpy(message,HelloWorld!);MPI_Send(message,strlen(message)+1,MPI_CHAR,0,99,MPI_COMM_WORLD);}else{/*myid==0*/for(source=1;sourcenumprocs;source++){MPI_Recv(message,100,MPI_CHAR,source,99,MPI_COMM_WORLD,&status);printf(Process%d:%s\n,message);}}MPI_Finalize();}/*endmain*/其他未完善部分多台电脑上协同运行MPI。只有多台电脑集群后才能更好的发挥并行计算的威力,当然由于MPI的帮助,这个工作将变得异常简单。推荐书籍《MPI并行程序设计实例教程》张武生编学习网址谢谢!

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功