消息传递并行编程环境MPI_LSEC.pdf
《消息传递并行编程环境MPI_LSEC.pdf》由会员分享,可在线阅读,更多相关《消息传递并行编程环境MPI_LSEC.pdf(41页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、.word 格式,国家国家 973973 项目高性能计算环境支持讲座项目高性能计算环境支持讲座MPIMPI 与与 PETScPETSc莫则尧(京应用物与计算数学研究所)日期上午下午上午815内容进程与消息传递、MPI 应用现状、MPI 并程序设计入门、初步的 MPI 消息传递函数作业一、讨论作业一讲评、先进的 MPI 函数、并程序示2、MPI 的发展816下作业二、讨论午上作业二讲评、午并可扩展科学计算工具箱PETSc 介绍817下PETSc 程序示午,专业.专注.word 格式,个人介绍莫则尧,男,汉族,19717 月生,副研究员:1992 国防科技大学应用数学专业本科毕业;1997国防科技
2、大学计算机应用专业并算法,京应用物与计算数学数学博士后专业.专注.方向博士毕业;1999动站出站,并所工作;主要从事大规模科学与工程并计算研究。.word 格式,消息传递并编程环境消息传递并编程环境MPIMPI一、进程与消息传递二、MPI 环境的应用现状三、MPI 并程序设计入门(程序1)四、初步的 MPI 消息传递函数五、作业一、先进的 MPI 函数七、MPI 并程序示2(求解-u=f);八、MPI 环境的发展九、作业二,专业.专注.word 格式,一、进程与消息传递1 1单个进程(单个进程(processprocess)进程进程是一个程序,同时包含它的执环境(内存、寄存器、程序计数器等),
3、是操作系统中独存在的可执的基本程序单位;通俗解:应用程序编译形成的可执代码,分为“指和“数据 两个部分,并在程序执时“独地申请和占有内存空间,且所有计算均局限于该内存空间。进程进程 1 12单机内多个进程单机内多个进程:多个进程可以同时存在于单机内同一操作系统:同时存在于单机内同一操作系统:由操作系统负责调分时共享处机资源(CPU、内存、存储、外设等);进程间相互独进程间相互独(内存空间相交)内存空间相交):在操作系统调下各自独地运,如多个应用程序在同一台计算机中运;进程间可以相互交换信息进程间可以相互交换信息:如数据交换、同步等待,消息消息是这些交换信息的基本单位,消息传递消息传递是指这,专
4、业.专注.进程进程 2 2内存.word 格式,些信息在进程间的相互交换,是实现进程间通信的唯一方式;最基本的消息传递操作最基本的消息传递操作:发送消息(send)、接受消息(receive)、进 程 同 步(barrier)、规 约(reduction);消息传递的实现消息传递的实现:共享内存或信号,用户必关心;进程 1进程 2发送数据接收数据(消息传递)内存空间3包含于通过网络联接的同计算机的多个进程:进程独存在进程独存在:进程位于同的计算机,由各自独的操作系统调,享有独的CPU 和内存资源;进程间相互信息交换进程间相互信息交换:消息传递;消息传递的实现消息传递的实现:基于网络 socke
5、t 机制,用户必关心;4消息传递库函数:,专业.专注.word 格式,应用程序接口应用程序接口(API):提供给应用程序(FORTRAN、C、C+语言)的可直接调用的完成进程间消息传递的某项特定功能的函数;消息传递库:消息传递库:所有定义的消息传递函数编译形成的软件库,调用其内部函数的应用程序,通过与之联接,即可成为可并执的程序;目前的消息传递函数库:目前的消息传递函数库:PVM 3.3.11、MPICH 1.2、LAMMPI 6.4 等;5 5标准消息传递界面(MPI:Message Passing Interface):MPIMPI 标准标准:根据应用程序对消息传递功能的需求,全球工业、应
6、用和研究部门联合推出标准的消息传递界面函数,考虑其具体实现,以保证并应用程序的可移植性;MPIMPI 的具体实现的具体实现:消息传递库函数,目前有影响的为MPICH 和 LAMMPI,我们注重 MPICH 系;,专业.专注.word 格式,6基于消息传递的并程序执模式:SPMD 模式:单程序多数据可执代码并行应用程序代码运 MPMD 模式:多程序多数据,除初始启动多个可执代码,其余与SPMD 模式一致;7共享存储与分布式存储:属于并机体系结构的范畴,与消息传递并程序设计平台无关;,专业.专注.复制多份并独立执行,形成多个独立的进程进程一(内存)进程二(内存)进程三(内存)消息传递(交换数据、同
7、步、规约)协同.word 格式,节点MMMCPUMCPUMCPUMCPUCPUCPU互连网络互连网络分布式存储共享存储 消息传递是相对于进程间通信方式而言的,与具体并机存储模式无关,任何支持进程间通信的并机,均可支持消息传递并程序设计;几乎所有共享和分布存储并计算环境均支持进程间的消息传递通信;,专业.专注.word 格式,二、MPI 环境的应用现状 MPI(消息传递界面)是全球工业、政府和科研部门联合推出的适合进程间进标准消息传递的并程序设计平台,最初版 MPI 1.0 本于 19946 月推出,目前最新的为 MPI 2.0 版,于 1998 低推出;MPI 的具体实现:MPICH 和 LA
8、MMPI,目前均已实现 MPI1.2 版,适用于任何并计算平台;部分并机已实现MPI 2.0 版;MPI 是目前应用最广的并程序设计平台,几乎被所有并计算环境(共享和分布式存储并机、MPP、机群系统等)和的多进程操作系统(UNIX、Windows NT)所支持,基于它开发的应用程序具有最佳的可移植性;目前高效的超大规模并计算(1000 个处器)最可信赖的平台;工业、科学与工程计算部门的大科研和工程软件(气象、石油、地震、空气动学、核等)目前已经移植到MPI 平台,发挥重要作用;目前,MPI 相对于 PVM:优点:功能强大,性能高,适应面广,使用方,可扩展性好;缺点:进程数能动态改变;,专业.专
9、注.word 格式,三、MPI 并程序设计入门1MPI 并程序设计平台由标准消息传递函数及相关辅助标准消息传递函数及相关辅助函数函数构成,多个进程通过调用这些函数(类似调用子程序),进通信;2MPI 程序:SPMD 执模式:一个程序同时启动多份,形成多个独的进程,在同的处机上运,拥有独的内存空间,进程间通信通过调用 MPI 函数来实现;每个进程开始执时,将获得一个唯一的序号(rank)。如启动P 个进程,序号依次为 0,1,P-1;MPIMPI 程序程序1 1:进程 0 发送一个整数给进程 1;进程 1将该数加 1,传递给进程 2;进程 2 再将该数加 1,再传递给进程 3;依次类推,最后,进
10、程P-1 将该数传递给进程 0,由进程 0 负责广播该数给所有进程,并打印输出。,专业.专注.word 格式,program example1 include“mpif.h !MPI 系统头文件 integer status(MPI_STATUS_SIZE),my_rank,p,source,dest,tag,ierr,datacc-进入 MPI 系统 call MPI_Init(ierr)call MPI_Comm_rank(MPI_COMM_WORLD,my_rank,ierr)call MPI_Comm_size(MPI_COMM_WORLD,p,ierr)cc-数据交换 data=0
11、tag =5 source=my_rank-1 if(source.eq.-1)source=p-1 dest=my_rank+1 if(dest.eq.p)dest=0 if(my_rank.eq.0)then call MPI_Send(data,1,MPI_INTEGER,dest,tag,MPI_COMM_WORLD,ierr)callMPI_Recv(data,1,MPI_INTEGER,source,tag,MPI_COMM_WORLD,status,ierr)else callMPI_Recv(data,1,MPI_INTEGER,source,tag,MPI_COMM_WORL
12、D,status,ierr)data=data+1 call MPI_Send(data,1,MPI_INTEGER,dest,tag,MPI_COMM_WORLD,ierr)endifcc-广播数据 call MPI_Bcast(data,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr)cc-打印输出 if(my_rank.eq.0)then if(data.eq.p-1)then print*,Successful,data=,data else print*,Failure,data=,data endif endifc call MPI_Finalize(ier
13、r)end,专业.专注.word 格式,编译命:mpif77 -o exam.e example.f 运命:mpirun np 4 exam.e 运效果:MPI 系统选择相同或同的4 个处机,在每个处机上运程序代码exam.e。MPI 函数进程 0进程 1进程 2进程 3Init()Comm_rank()my_rank=0 myrank=1 myrank=2 my_rank=3Comm_size()p=4 p=4 p=4 p=4tag=5,data=0tag=5,data=0tag=5,data=0tag=5,data=0 source=3source=0source=1source=2 de
14、st=1dest=2dest=3dest=0数据交换send()recv()recv()recv()recv()data=data+1空 send()闲 data=data+1等 send()待,专业.专注.进入 MPI 系统.word 格式,data=data+1消息传递 send()Broadcast()send()recv()recv()recv()output“dataFinalize(),退出 MPI 系统专业.专注.word 格式,3MPI 重要概 进程序号进程序号(rank);各进程通过函数MPI_Comm_rank()获取各自的序号;消息号:消息号:消息的标号;通信器通信器(C
15、ommunicator):1)解为一类进程的集合,且在该集合内,进程间可以相互通信;类比:邮局、电话局、国际网;2)任何 MPI 通信函数均必须在某个通信器内发生;3)MPI系统提供缺的通信器MPI_COMM_WORLD,所有启动的MPI 进程通过调用函数 MPI_Init()包含在该通信器内;4)各进程通过函数 MPI_Comm_size()获取通信器包含的(初始启动)的MPI 进程个数;消息:消息:分为数据(数据(datadata)和包装(包装(envelopeenvelope)两个部分,其中,包装由接收进程序号接收进程序号、发送进程序号发送进程序号、消息标号消息标号和通信通信器器四部分组
16、成,数据包含用户将要传递的内容;进程组:进程组:一类进程的集合,在它的基础上,可以定义新的通信器;基本数据类型:基本数据类型:对应于 FORTRAN 和 C 语言的内部数据类型(INTEGER,REAL,DOUBLE PRECISION,COMPLEX,LOGICAL,CHARACTER),MPI 系统提供已定义好的对应数据类型(MPI_INTEGER,MPI_REAL,MPI_DOUBLE_PRECISION,MPI_COMPLEX,MPI_LOGICAL,MPI_CHARACTER);自定义数据类型:自定义数据类型:基于基本数据类型,用户自己定义的数据,专业.专注.word 格式,类型(后
17、面介绍);MPIMPI 对象对象:MPI 系统内部定义的数据结构,包括数据类型、进程组、通信器等,它们对用户透明,在FORTRAN 语言中,所有 MPI 对象均必须说明为“整型变整型变INTEGERINTEGER;MPIMPI 联接器联接器(handle):联接 MPI 对象和用户的桥,用户可以通过它访问和参与相应 MPI 对象的具体操作;如,MPI 系统内部提供的通信器MPI_COMM_WORLD;在FORTRAN 语言中,所有 MPI 联接器均必须说明为“整型变整型变INTEGERINTEGER;进程扑结构进程扑结构:进程组内部进程之间的一种相互连接结构,如 33 网格,将在后面介绍。3
18、3网格扑结构静态进程个数静态进程个数:进程数由命“mpirun np xxx初始确定为 xxx 个,程序执过程中能动态改变能动态改变进程的个数;消息缓存区消息缓存区:应用程序产生的消息包含的数据所处的内存空间;标准输入标准输入:所有进程的标准输入 read(*,*)均缺为当前,专业.专注.word 格式,终端屏幕,且只能由 0 号进程执该操作,其他进程需要这些输入参数,只能由 0 号进程执数据广播操作;标准输出:所有进程可以独执标准输出write(*,*),但其缺为当前终端屏幕;4MPI 函数格式:FORTAN 语言中,最后一个参数为该函数调用是否成功的标志:0 表示成功,其它表示各种可能的错
19、误;C 语言中,该标志又函数参数返回;C:ierr=MPI_Comm_rank(myrank)F :MPI_Comm_rank(myrank,ierr)5.MPI 函数的使用查询:由函数名查询:man 函数名(MPI_Xxxx),注意大小写,如 man MPI_Comm_rank,man MPI_Send,man MPI_recv.6.MPI 函数的学习与使用:注重 MPI 函数的各类功能,由应用程序的通信需求出发,寻找匹配的函数类型,在查找具体函数名,采用 man 命可以查询该函数的具体参数含义和使用方法。,专业.专注.word 格式,7.一般的 MPI 程序设计程图程序参数说明进入 MPI
20、 系统,通信器 MPI_COMM_WORLD形成Call MPI_Init()应用程序实体:Call MPI_Comm_rank()Call MPI_Comm_size()建立新的通信器、定义新的数据类型和进程拓扑结构1计算控制程序体;2进程间通信;退出 MPI 系统Call MPI_Finalize()End,专业.专注.word 格式,四、初步的 MPI 消息传递函数1点对点通信(point-to-point)定义:给定属于同一通信器内的两个进程,其中一个发送消息,一个接收消息;MPI系统定义的所有通信方式均建在点对点通信之上;四种模式:标准模式标准模式、缓存区模式、同步模式、就绪模式;2
21、标准模式点对点通信 进程可以随意地发送(接收)消息,与是否存在匹配的消息接收(发送)进程无关;发收匹配:进程发收匹配:进程 0 两类:阻式阻式:消息发送函数返回,用户可以对消息缓存区进处,会影响已发送的消息数据;接受函数返回,用户可以使用接受到的消息数据;非阻式:发送和接受函数返回后,必须调用另一类函数来确保它们的正确完成;,专业.专注.进程 1进程 1进程 2.word 格式,阻式非阻式INTEGER A INTEGER AA=100 A=100MPI_Send(A,1,.)MPI_Isend(A,1,)A=200 A=200消息数据:A=100 A=100 或 A=200MPI_Isend
22、(A,1,flag,)MPI_Wait(flag,)A=200消息数据:A=100 A=100,专业.专注.word 格式,3点对点通信函数举阻式标准消息发送函数MPI_Send(buf,count,datatype,dest,tag,comm,ierr)Real*8(integer,)buf :消息发送缓存区起始地址 (Fortran,用户的待发送的第一个数据)integer count:buf 起始的数据单元个数 integer datatype:数据类型(基本或用户定义的)integer dest :接收进程序号 integer tag :消息的标号 integer comm :通信器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 消息 传递 并行 编程 环境 MPI_LSEC
限制150内