资源描述:
《《MPI并行程序设计》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、九月21MPI并行程序设计1/217机群应用开发并行编程原理及程序设计ParallelProgramming:FundamentalsandImplementation曙光信息产业有限公司九月21九月21MPI并行程序设计2/217参考文献黄铠,徐志伟著,陆鑫达等译.可扩展并行计算技术,结构与编程.北京:机械工业出版社,P.33~56,P.227~237,2000.陈国良著.并行计算—结构、算法、编程.北京:高等教育出版社,1999.BarryWilkinsonandMichaelAllen.ParallelProgrammi
2、ng(TechniquesandApplicationsusingNetworkedWorkstationsandParallelComputers).PrenticeHall,1999.李晓梅,莫则尧等著.可扩展并行算法的设计与分析.北京:国防工业出版社,2000.张宝琳,谷同祥等著.数值并行计算原理与方法.北京:国防工业出版社,1999.都志辉著.高性能计算并行编程技术—MPI并行程序设计.北京:清华大学出版社,2001.九月21MPI并行程序设计3/217相关网址MPI:http://ww.mpi-forum.org,htt
3、p://www.mcs.anl.gov/mpiPthreads:http://www.oreilly.comPVM:http://www.epm.ornl.gov/pvm/OpemMP:http://www.openmp.org网上搜索:www.google.com九月21MPI并行程序设计4/217MPI并行程序设计ParallelProgrammingwiththeMassagePassingInterface(MPI)九月21MPI并行程序设计5/217多线程库标准–Win32API.–POSIXthreads.编译制导标准
4、–OpenMP–可移植共享存储并行编程标准.消息传递库标准–MPI–PVM并行编程标准本讨论的重点九月21MPI并行程序设计6/217消息传递并行程序设计消息传递并行程序设计指用户必须通过显式地发送和接收消息来实现处理机间的数据交换。在这种并行编程中,每个并行进程均有自己独立的地址空间,相互之间访问不能直接进行,必须通过显式的消息传递来实现。这种编程方式是大规模并行处理机(MPP)和机群(Cluster)采用的主要编程方式。并行计算粒度大,特别适合于大规模可扩展并行算法由于消息传递程序设计要求用户很好地分解问题,组织不同进程间的数
5、据交换,并行计算粒度大,特别适合于大规模可扩展并行算法.消息传递是当前并行计算领域的一个非常重要的并行程序设计方式九月21MPI并行程序设计7/217什么是MPI?MassagePassingInterface:是消息传递函数库的标准规范,由MPI论坛开发,支持Fortran和C一种新的库描述,不是一种语言。共有上百个函数调用接口,在Fortran和C语言中可以直接对这些函数进行调用MPI是一种标准或规范的代表,而不是特指某一个对它的具体实现MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准九月21MPI并行程序
6、设计8/217MPI的发展过程发展的两个阶段MPI1.1:1995MPICH:是MPI最流行的非专利实现,由Argonne国家实验室和密西西比州立大学联合开发,具有更好的可移植性.MPI1.2~2.0:动态进程,并行I/O,支持F90和C++(1997).九月21MPI并行程序设计9/217为什么要用MPI?高可移植性MPI已在IBMPC机上、MSWindows上、所有主要的Unix工作站上和所有主流的并行机上得到实现。使用MPI作消息传递的C或Fortran并行程序可不加改变地运行在IBMPC、MSWindows、Unix工作站
7、、以及各种并行机上。九月21MPI并行程序设计10/217讲座内容提示基本的MPI基本概念点到点通信(Pointtopoint)MPI中API的主要内容,为MPI最基本,最重要的内容MPI程序的编译和运行深入MPI用户自定义(/派生)数据类型(User-defined(Derived)datatype)事实上MPI的所有数据类型均为MPI自定义类型支持异构系统允许消息来自不连续的或类型不一致的存储区(结构,数组散元)集合通信(Collective)数据移动,数据聚集,同步基于pointtopoint构建MPI环境管理函数组,上下文
8、和通信空间/通信子的管理实例九月21MPI并行程序设计11/217从简单入手!下面我们首先分别以C语言和Fortran语言的形式给出一个最简单的MPI并行程序Hello(下页).该程序在终端打印出HelloWorld!字样.“HelloWorld”