国家973项目高性能计算环境支持讲座_第1页
国家973项目高性能计算环境支持讲座_第2页
国家973项目高性能计算环境支持讲座_第3页
国家973项目高性能计算环境支持讲座_第4页
国家973项目高性能计算环境支持讲座_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PAGE 1PAGE 41国家9773项目目高性能能计算环环境支持持讲座MPI与与PETTSc莫则尧(北京应应用物理理与计算算数学研研究所)日期内容8155上午进程与消消息传递递、MPI应应用现状状、MPI并并行程序序设计入入门、初步的MMPI消消息传递递函数下午作业一、讨论8166上午作业一讲讲评、先进的MMPI函函数、并行程序序示例22、MPI的的发展下午作业二、讨论8177上午作业二讲讲评、并行可扩扩展科学学计算工工具箱PPETSSc介绍绍下午PETSSc程序序示例个人介绍绍莫则尧,男,汉汉族,119711年7月月生,副副研究员员:19922年国防防科技大大学应用用数学专专业本科科毕业;

2、19977年国防防科技大大学计算算机应用用专业并并行算法法方向博博士毕业业;19999年北京京应用物物理与计计算数学学数学博博士后流流动站出出站,并并留所工工作;主要从事事大规模模科学与与工程并并行计算算研究。消息传递递并行编编程环境境MPII进程与消消息传递递MPI环环境的应应用现状状MPI并并行程序序设计入入门(程程序例11)初步的MMPI消消息传递递函数作业一先进的MMPI函函数MPI并并行程序序示例22(求解解-u=ff);MPI环环境的发发展作业二一、进程程与消息息传递1单个个进程(proocesss)进程是一一个程序序,同时时包含它它的执行行环境(内存、寄存器器、程序序计数器器等)

3、,是操作作系统中中独立存存在的可可执行的的基本程程序单位位;通俗理解解:串行行应用程程序编译译形成的的可执行行代码,分为“指令”和“数据”两个部部分,并并在程序序执行时时“独立地地申请和和占有”内存空空间,且且所有计计算均局局限于该该内存空空间。进程1进程2 内存2单机机内多个个进程:多个进程程可以同同时存在在于单机机内同一一操作系系统:由由操作系系统负责责调度分分时共享享处理机机资源(CPUU、内存存、存储储、外设设等);进程间相相互独立立(内存空空间不相相交):在操作作系统调调度下各各自独立立地运行行,例如如多个串串行应用用程序在在同一台台计算机机中运行行;进程间可可以相互互交换信信息:例

4、例如数据据交换、同步等等待,消消息是这这些交换换信息的的基本单单位,消消息传递递是指这这些信息息在进程程间的相相互交换换,是实实现进程程间通信信的唯一一方式;最基本的的消息传传递操作作:发送送消息(sennd)、接受消消息(rreceeivee)、进进程同步步(baarriier)、规约约(reeducctioon);消息传递递的实现现:共享享内存或或信号量量,用户户不必关关心; 进程11 进程程2 发送送数据 接收收数据 (消息传传递) 内存空空间3包含含于通过过网络联联接的不不同计算算机的多多个进程程:进程独立立存在:进程位位于不同同的计算算机,由由各自独独立的操操作系统统调度,享有独独立

5、的CCPU和和内存资资源;进程间相相互信息息交换:消息传传递;消息传递递的实现现:基于于网络ssockket机机制,用用户不必必关心;4消息息传递库库函数:应用程序序接口(APII):提提供给应应用程序序(FOORTRRAN、C、CC+语语言)的的可直接接调用的的完成进进程间消消息传递递的某项项特定功功能的函函数;消息传递递库:所所有定义义的消息息传递函函数编译译形成的的软件库库,调用用其内部部函数的的应用程程序,通通过与之之联接,即可成成为可并并行执行行的程序序;目前流行行的消息息传递函函数库:PVMM 3.3.111、MMPICCH 11.2、LAMMMPII 6.4等;5标准准消息传传递

6、界面面(MPPI:MMesssagee Paassiing Intterffacee):MPI标标准:根根据应用用程序对对消息传传递功能能的需求求,全球球工业、应用和和研究部部门联合合推出标标准的消消息传递递界面函函数,不不考虑其其具体实实现,以以保证并并行应用用程序的的可移植植性;MPI的的具体实实现:消消息传递递库函数数,目前前有影响响的为MMPICCH和LLAMMMPI,我们注注重MPPICHH系列;6基于于消息传传递的并并行程序序执行模模式:SPMDD模式:单程序序多数据据流并行应用程序代码 可执执行代码码 运行行复制多份并独立执行,形成多个独立的进程 进程三(内存)进程二(内存)进程

7、一(内存)消息传递(交换数据、同步、规约)协同MPMDD模式:多程序序多数据据流,除除初始启启动多个个可执行行代码,其余与与SPMMD模式式一致;7共享享存储与与分布式式存储:属于并行行机体系系结构的的范畴,与消息息传递并并行程序序设计平平台无关关; 节点CPUCPU CPUCPUCPUCPUMMM互连网络互连网络MMM 分布式式存储 共共享存储储消息传递递是相对对于进程程间通信信方式而而言的,与具体体并行机机存储模模式无关关,任何何支持进进程间通通信的并并行机,均可支支持消息息传递并并行程序序设计;几乎所有有共享和和分布存存储并行行计算环环境均支支持进程程间的消消息传递递通信;二、MPPI环

8、境境的应用用现状MPI(消息传传递界面面)是全全球工业业、政府府和科研研部门联联合推出出的适合合进程间间进行标标准消息息传递的的并行程程序设计计平台,最初版版MPII 1.0本于于19994年66月推出出,目前前最新的的为MPPI 22.0版版,于119988年年低低推出;MPI的的具体实实现:MMPICCH和LLAMMMPI,目前均均已实现现MPII 1.2版,适用于于任何并并行计算算平台;部分并并行机已已实现MMPI 2.00版;MPI是是目前应应用最广广的并行行程序设设计平台台,几乎乎被所有有并行计计算环境境(共享享和分布布式存储储并行机机、MPPP、机机群系统统等)和和流行的的多进程程

9、操作系系统(UUNIXX、Wiindoows NT)所支持持,基于于它开发发的应用用程序具具有最佳佳的可移移植性;目前高效效率的超超大规模模并行计计算(110000个处理理器)最最可信赖赖的平台台;工业、科科学与工工程计算算部门的的大量科科研和工工程软件件(气象象、石油油、地震震、空气气动力学学、核等等)目前前已经移移植到MMPI平平台,发发挥了重重要作用用;目前,MMPI相相对于PPVM:优点:功功能强大大,性能能高,适适应面广广,使用用方便,可扩展展性好;缺点:进进程数不不能动态态改变;三、MPPI并行行程序设设计入门门MPI并并行程序序设计平平台由标标准消息息传递函函数及相相关辅助助函数

10、构构成,多多个进程程通过调调用这些些函数(类似调调用子程程序),进行通通信;MPI程程序:SPMDD执行模模式:一一个程序序同时启启动多份份,形成成多个独独立的进进程,在在不同的的处理机机上运行行,拥有有独立的的内存空空间,进进程间通通信通过过调用MMPI函函数来实实现;每个进程程开始执执行时,将获得得一个唯唯一的序序号(rrankk)。例例如启动动P个进进程,序序号依次次为0,1,P-1;MPI程程序例11:进程程0发送送一个整整数给进进程1;进程11将该数数加1,传递给给进程22;进程程2再将将该数加加1,再再传递给给进程33;依次次类推,最后,进程PP-1将将该数传传递给进进程0,由进程

11、程0负责责广播该该数给所所有进程程,并打打印输出出。 prrogrram exxampple11 iinclludee “mpiif.hh” ! MMPI系系统头文文件 iinteegerr staatuss(MPPI_SSTATTUS_SIZZE),my_rannk,pp,soourcce,ddestt,taag,iierrr,daatacc进入入MPII系统 ccalll MPPI_IInitt(ieerr) ccalll MPPI_CCommm_raank(MPII_COOMM_WORRLD,my_rannk,iierrr) ccalll MPPI_CCommm_siize(MPII_C

12、OOMM_WORRLD,p,iierrr)cc数据据交换 ddataa=0 ttag = 5 ssourrce= myy_raank-1 iif(ssourrce.eq.-1) soourcce=pp-1 ddestt =mmy_rrankk+1 iif(ddestt.eqq.p) deest=0 iif(mmy_rrankk.eqq.0) thhen ccalll MPPI_SSendd(daata,1,MMPI_INTTEGEER,ddestt,taag,MMPI_COMMM_WWORLLD,iierrr) ccalll MPPI_RRecvv(daata,1,MMPI_INTTEGEER

13、,ssourrce,tagg,MPPI_CCOMMM_WOORLDD,sttatuus,iierrr) eelsee ccalll MPPI_RRecvv(daata,1,MMPI_INTTEGEER,ssourrce,tagg,MPPI_CCOMMM_WOORLDD,sttatuus,iierrr) ddataa=daata+1 ccalll MPPI_SSendd(daata,1,MMPI_INTTEGEER,ddestt,taag,MMPI_COMMM_WWORLLD,iierrr) eendiifcc广播播数据 ccalll MPPI_BBcasst(ddataa,1,MPII_INN

14、TEGGER,0,MMPI_COMMM_WWORLLD,iierrr)cc打印输输出 iif(mmy_rrankk.eqq.0) thhen iif(ddataa.eqq.p-1) theen pprinnt *,”Succcesssfuul, datta=”,daata eelsee pprinnt *,”Faiilurre, datta=”,daata eendiif eendiifc calll MMPI_Finnaliize(ierrr) endd编译命令令: mpiif777 -o exaam.ee eexammplee.f 运行命令令: mpiirunn np 4 exxam.e

15、运行效果果:MPPI系统统选择相相同或不不同的44个处理理机,在在每个处处理机上上运行程程序代码码exaam.ee。 MPPI函数数 进进程0 进程11 进程程2 进进程3进入MPI系统 IInitt() Commm_raank() mmy_rrankk=0 mmyraank=1 myyrannk=22 my_rannk=33Commm_siize() pp=4 p=4 p=44 p=44 ttag=5,ddataa=0 taag=55,daata=0 tagg=5,datta=00 taag=55,daata=0 ssourrce=3 souurcee=0 soourcce=11 soour

16、cce=22 desst=11 deest=2 ddestt=3 desst=00数据交换换 ssendd() reecv() rrecvv() reecv() reccv() datta=ddataa+1 空 seend() 闲 daata=datta+11 等 sennd() 待 ddataa=daata+1 消息传传递 sennd()Broaadcaast() ssendd() reecv() rrecvv() reecv()退出MPI系统 ooutpput “datta”Finaalizze()3MPPI重要要概念进程序号号(raank);各进进程通过过函数MMPI_Commm_rra

17、nkk()获获取各自自的序号号;消息号:消息的的标号;通信器(Commmunnicaatorr):11)理解解为一类类进程的的集合,且在该该集合内内,进程程间可以以相互通通信;类类比:邮邮局、电电话局、国际网网;2)任何MMPI通通信函数数均必须须在某个个通信器器内发生生;3) MPPI系统统提供省省缺的通通信器MMPI_COMMM_WWORLLD,所所有启动动的MPPI进程程通过调调用函数数MPII_Innit()包含含在该通通信器内内;4)各进程程通过函函数MPPI_CCommm_siize()获取取通信器器包含的的(初始始启动)的MPPI进程程个数;消息:分分为数据据(daata)和包装

18、(envveloope)两个部部分,其其中,包包装由接接收进程程序号、发送进进程序号号、消息标标号和通信器器四部分分组成,数据包包含用户户将要传传递的内内容;进程组:一类进进程的集集合,在在它的基基础上,可以定定义新的的通信器器;基本数据据类型:对应于于FORRTRAAN和CC语言的的内部数数据类型型(INNTEGGER,REAAL,DDOUBBLE PREECISSIONN,COOMPLLEX,LOGGICAAL,CCHARRACTTER),MPPI系统统提供已已定义好好的对应应数据类类型(MMPI_INTTEGEER,MMPI_REAAL,MMPI_DOUUBLEE_PRRECIISIOO

19、N, MPII_COOMPLLEX,MPII_LOOGICCAL,MPII_CHHARAACTEER);自定义数数据类型型:基于于基本数数据类型型,用户户自己定定义的数数据类型型(后面面介绍);MPI对对象: MPII系统内内部定义义的数据据结构,包括数数据类型型、进程程组、通通信器等等,它们们对用户户不透明明,在FFORTTRANN语言中中,所有有MPII对象均均必须说说明为“整型变变量INNTEGGER”;MPI联联接器(hanndlee):联联接MPPI对象象和用户户的桥梁梁,用户户可以通通过它访访问和参参与相应应MPII对象的的具体操操作;例例如,MMPI系系统内部部提供的的通信器器M

20、PII_COOMM_WORRLD;在FOORTRRAN语语言中,所有MMPI联联接器均均必须说说明为“整型变变量INNTEGGER”;进程拓扑扑结构:进程组组内部进进程之间间的一种种相互连连接结构构,如333 网网格,将将在后面面介绍。 3 3 网格拓拓扑结构构静态进程程个数:进程数数由命令令“mpiirunn np xxxx”初始确确定为xxxx个个,程序序执行过过程中不不能动态态改变进进程的个个数;消息缓存存区:应应用程序序产生的的消息包包含的数数据所处处的内存存空间;标准输入入:所有有进程的的标准输输入reead(*,*)均省省缺为当当前终端端屏幕,且只能能由0号号进程执执行该操操作,其

21、其他进程程需要这这些输入入参数,只能由由0号进进程执行行数据广广播操作作;标准输出出:所有有进程可可以独立立执行标标准输出出wriite(*,*),但但其省缺缺为当前前终端屏屏幕;4MPPI函数数格式:FORTTAN语语言中,最后一一个参数数为该函函数调用用是否成成功的标标志:00表示成成功,其其它表示示各种可可能的错错误;C语言中中,该标标志又函函数参数数返回;C : ieerr=MPII_Coomm_rannk(mmyraank)F : MPPI_CCommm_raank(myrrankk,ieerr)5. MPII函数的的使用查查询:由函数名名查询: maan 函函数名 ( MMPI_X

22、xxxx), 注意意大小写写,例如如 maan MMPI_Commm_rrankk, mman MPII_Seend, maan MMPI_reccv.MPI函函数的学学习与使使用:注重MPPI函数数的各类类功能,由应用用程序的的通信需需求出发发,寻找找匹配的的函数类类型,在在查找具具体函数数名,采采用maan命令令可以查查询该函函数的具具体参数数含义和和使用方方法。7. 一一般的MMPI程程序设计计流程图图程序参数说明Call MPI_Init ( ) 进进入MPPI系统统,通信信器 MPPI_CCOMMM_WOORLDD形成Call MPI_Comm_rank ( )Call MPI_Co

23、mm_size ( )建立新的通信器、定义新的数据类型和进程拓扑结构应用程序实体:计算控制程序体;进程间通信; 退出MMPI系系统Call MPI_Finalize ( )End四、初步步的MPPI消息息传递函函数1点对对点通信信(poointt-too-poointt)定义:给给定属于于同一通通信器内内的两个个进程,其中一一个发送送消息,一个接接收消息息;MPI系系统定义义的所有有通信方方式均建建立在点点对点通通信之上上;四种模式式:标准准模式、缓存区区模式、同步模模式、就就绪模式式;2标准准模式点点对点通通信进程可以以随意地地发送(接收)消息,与是否否存在匹匹配的消消息接收收(发送送)进程

24、程无关;进程0进程1 发收匹匹配: 进程2进程1进程0 发收不不匹配:两类:阻塞式:消息发发送函数数返回,用户可可以对消消息缓存存区进行行处理,不会影影响已发发送的消消息数据据;接受受函数返返回,用用户可以以使用接接受到的的消息数数据;非阻塞式式:发送送和接受受函数返返回后,必须调调用另一一类函数数来确保保它们的的正确完完成; 阻塞式式 非阻阻塞式 INTEEGERR AA INTTEGEER AA=1000 AA=1000MPI_Sennd(AA,1,.) MPPI_IIsennd(AA,1,)A=2000 AA=2000 消息数数据: A=1100 A=1100 或 AA=2000 MPI

25、I_Issendd(A,1,flaag,) MPII_Waait(flaag,) A=2200消息数据据: AA=1000 A=1000 3点对对点通信信函数举举例阻塞式标标准消息息发送函函数MPI_Sennd(bbuf,couunt,dattatyype,desst,ttag,commm,iierrr) Reeal*8(iinteegerr,)buuf : 消消息发送送缓存区区起始地地址 (FForttrann, 用用户的待待发送的的第一个个数据) inntegger coountt :bbuf起起始的数数据单元元个数 inntegger daatattypee :数据类类型(基基本或用用户

26、定义义的) inntegger deest : 接收收进程序序号 inntegger taag : 消息息的标号号 inntegger coomm : 通信器器 inntegger ieerr : 函函数调用用返回错错误码reall *88 aa(1000,1100)inteegerr bb(600,600)c发发送500个双精精度数“a(55,200) : a(54,20)”到2号号进程calll MPPI_SSendd( aa (55,200),550,MMPI_DOUUBLEE_PRRECIISIOON,22, & 999999,MPII_COOMM_WORRLD,ierrr )c发发送

27、200个整型型数“b(220,440) : bb(399,400)”到5号号进程calll MPPI_SSendd( bb (220,440),20,MPII_DOOUBLLE_PPRECCISIION,5, & 999999,MPII_COOMM_WORRLD,ierrr )阻塞式标标准消息息接收函函数MPI_Reccv(bbuf,couunt,dattatyype,desst,ttag,commm,sstattus, ieerr) Reeal*8(iinteegerr,)buuf : 消消息接收收缓存区区起始地地址 (FForttrann, 用用户用于于接受的的第一个个数据) innteg

28、ger coountt :bbuf起起始的数数据单元元个数 inntegger daatattypee :数据类类型(基基本或用用户定义义的) inntegger deest : 发送送进程序序号 inntegger taag : 消息息的标号号 inntegger coomm : 通信器器 inntegger sttatuus(MMPI_STAATUSS_SIIZE) : 接收状状态数组组; inntegger ieerr : 函函数调用用返回错错误码reall *88 aa(1000,1100)inteegerr bb(600,600)c从从2号进进程接收收50个个双精度度数到“a(55,

29、200) : a(54,20)”calll MPPI_RRecvv( aa (55,200),550,MMPI_DOUUBLEE_PRRECIISIOON,22, & 999999,MPII_COOMM_WORRLD,staatuss,ieerr )c从从5号进进程接收收20个个整型数数到“b(220,440) : bb(399,400)”calll MPPI_RRecvv( bb (220,440),20,MPII_DOOUBLLE_PPRECCISIION,5, & 999999,MPII_COOMM_WORRLD,staatuss,ieerr )其他点对对点通信信函数:参考手手册;4聚合

30、合通信(Colllecctivve CCommmuniicattionn)定义:属属于同一一通信器器的所有有MPII进程均均必须参参与的通通信操作作;参与方式式:调用用同一聚聚合通信信函数;函数类型型:同步通信信函数:所有进进程在某某个程序序点上同同步; MMPI_Barrrieer ( coomm , iierrr )全局通信信函数: 广播: MPII_Bccastt(buuf,ccounnt,ddtyppe,rroott,coomm,ierrr)roott 发送送 ottherr 接受受收集:MMPI_Gattherr(buufs,buffr,ccounnt,ddtyppe,rroott,

31、coomm,ierrr)all 发送大大小一致致的数据据块 rooot接接受并按按序号连连续存放放全收集:MPII_Alllgaatheer()all 发送 alll接受受 索引收集集:MPPI_GGathhervv() aall 发送大大小不等等的数据据块 rooot接接受并按按索引间间断存放放索引全收收集:MMPI_Alllgattherrv() aall 发送大大小不等等的数据据块 Alll接受受并按索索引间断断存放分散:MMPI_Scaatteer(bbufss,buufr,couunt,dtyype,rooot,ccommm,ieerr)roott 发送送连续的的大小一一致数据据块

32、Alll 接接受索引分散散: MMPI_Scaatteerv()roott 发送送间断的的大小不不一致数数据块 Alll 接接受全交换: MMPI_Allltoaall() All 发送大大小一致致数据块块到各进进程 Alll接受受大小一一致数据据块并按按序号连连续存放放索引全交交换: MPII_Allltooalllv()全局规约约(gllobaal rreduuctiion)函数:规约: MPPI_RReduuce(sbuuf,rrbuff,coountt,dttypee,opp,rooot, commm,iierrr);规约操作作类型oop : MMPI_SUMM, MMPI_MINN,

33、 MMPI_MAXX, MPII_PRROD等等12种种; 例子: 求求两个向向量的内内积,并并将结果果返回进进程0 suubrooutiine parr_bllas11(m,a,bb,c,commm) reeal a(m),b(mm) ! loocall sllicee off arrrayy reeal c ! reesullt reeal suum inntegger m,commm,ii,ieerrcc !llocaal ssum ssum=0.00d0 ddo i=11,m summ=suum+aa(i)*bb(i) eendddoc ! glooball suum caall MP

34、II_Reeducce(ssum,c,11,MPPI_RREALL,MPPI_SSUM,0, & commm,iierrr)全规约: MPPI_AAllrreduuce(), 除要求求将结果果返回到到所有进进程外,与MPPI_RReduuce()一致致;规约分散散: MMPI_Redducee_sccattter(),将将规约结结果分散散到各进进程;并行前缀缀计算:MPII_Sccan()五、作业业一 P个进进程,第第i个进程程将其包包含1000个双双精度数数据的数数组A(1000)传送送给第(i +11)mood PP个进程程,同时时从第(i -11)mood PP个进程程接受1100个个双

35、精度度数据到到另一个个数组BB(1000)中中,令数数组C(1:1100)=A(1:1100)+B(1:1100),然后后求数组组C(11:1000)各各元素的的类加和和,最后后在将该该和全部部累加到到0号进进程,打打印并输输出该和和。 提示:可在例例1的基基础上修修改,编编制。六、先进进的MPPI函数数1自定定义数据据类型定义:在在MPII系统已已定义的的基本数数据类型型(MPPI_IINTEEGERR,MPPI_RREALL,MPPI_DDOUBBLE_PREECISSIONN,MPPI_CCHARRACTTER等等)基础础上,用用户根据据需求,自己定定义的数数据类型型; reeal a(

36、10000) 发送 : a(55:9) caall MPII_Seend(a(55), 5, MPII_ RREALL,.) OK 发送 : a(55),aa(7),a(9),a(111),a(113),a(115) ddo ii=5, 155, 22 ccalll MPPI_SSendd(a(i),11,MPPI_RREALL,.) OOK eendddo 缺点: 多多次发送送,效率率低,程程序设计计繁琐 改进: 用户户定义新新的数据据类型 caall MPPI_TTypee_veectoor(55,1,2,MMPI_REAAL,nnewttypee,ieerr) ccalll MMPI_T

37、yppe_ccommmit(newwtyppe , ieerr) 提交 ccalll MMPI_Sennd(aa(5), 11, nnewttypee,.) ccalll MMPI_Typpe_ffreee(neewtyype,ierrr) 释放放在用户已已定义好好的数据据类型基基础上,还可以以进一步步定义新新的数据据类型;用户定义义的数据据类型,必须由由函数MMPI_Typpe_CCommmit()提交交给MPPI系统统;此后后,就可可以象基基本数据据类型一一样,在在消息传传递函数数中重复复使用;并由函函数MPPI_TTypee_frree()释放放;具体自定定义数据据类型函函数,请请参考手

38、手册;2进程程拓扑结结构定义:根根据应用用程序的的特征,在进程程间建立立的一种种虚拟拓拓扑连接接方式,以方便便并行程程序设计计和提高高并行计计算性能能;例:二维维规则区区域,33*3 区域分分解,99个进程程,建立立Carrtessionn坐标,进程(i,j)的的相邻进进程为 (i-1,j), (ii+1,j), (ii,j-1), (ii,j+1);2(0,2)1(0,1)0(0,0)2105(1,2)4(1,1)3(1,0)4358762(2,2)0(2,0)1(2,1)3并行行I/OO各进程可可以类似似于串行行程序独独立地读读/写不不同的文文件;MPICCH 11.2以以上版本本支持所所

39、有进程程并行读读写同一一个文件件;七、MPPI并行行程序示示例2一维Diiricchleet问题题:- uu (xx) = f(x) xx =(0,11)u(0)=0.0, u(11)=00.0, f(x)=4.00 算法法: 均匀匀网格有有限差分分离散,Jaccobii迭代求求解。 区区域分解解:npprocc=4, n = 221, ns = (n-11)/nnprooc+11 =66 0 11 22 33 0 00.5 11 proograam exaamplle imppliccit reaal*88 (aa-h,o-zz) inccludde “mpiif.hh” parrameet

40、err ( n = 211, nnprooc = 4, nss = (n-1)/nprroc+1) parrameeterr ( errrtoll=1.e-44,niitmaax=1100) dimmenssionn uu(nss), f(nns), sooluttionn(nss),uuoldd(0:ns) ! u(00) : lleftt duummyy grrid poiint ! u(nns+11) : rigght dummmy griid ppoinnt inttegeer sttatuus(MMPI_STAATUSS_SIIZE),siizecc entter intto MMP

41、I calll MPII_Innit(ierrr) calll MPII_Coomm_rannk(MMPI_COMMM_WWORLLD,mmyraank,ierrr) calll MPII_Coomm_sizze(MMPI_COMMM_WWORLLD,ssizee,ieerr) if(sizze.nne.nnprooc) theen priint *,”+ errrorrs ffor nummberr off prroceess disstriibuttionns +” gotto 8888 enddifcc asssignn innitiial valluess h = 11.0dd0/(n

42、-11) ! disscreete steep ssizee xstt = myrrankk*(nns-11)*hh ! staart x-ccoorrdinnatee off loocall doomaiin nloocall=nss-1 ! loocall nuumbeer oof ggridd poointt istt=1 if(myrrankk.eqq.0) isst=iist+1 do i=11,nss f(ii)=44.0dd0 u(ii)=00.0dd0 uolld(ii)=00.0dd0 xauuxi=xstt+(ii-1)*h sollutiion(i)= -22*xaaux

43、ii*(xxauxxi-11.0dd0) endddo u(00)=00.0dd0c nlpp=myyrannk-11 ! lleftt prroceess nrpp=myyrannk+11 ! riightt prroceess if(nlpp.ltt.0) nllp=MMPI_PROOC_NNULLL if(nrpp.gtt.npprocc-1) nnrp=MPII_PRROC_NULLL ! nuull proocesss, nulll ccommmuniicattionn opperaatiooncc Jaccobii itteraatinng nitt =0 ! cuurreent

44、iteerattionnscconttinuuec swaappiing dummmy eleemennts aloong pseeudoo-boounddaryy calll MMPI_Sennd(uuoldd(1),1,MPII_DOOUBLLE_PPRECCISIION, & nlpp,niit, MPII_COOMM_WORRLD,ierrr) calll MMPI_Sennd(uuoldd(nllocaal),1, MPII_DOOUBLLE_PPRECCISIION, & nrpp,niit,MMPI_COMMM_WWORLLD,iierrr) calll MMPI_Reccv(u

45、uoldd(nllocaal+11),11,MPPI_DDOUBBLE_PREECISSIONN, & nrpp,niit, MPII_COOMM_WORRLD,staatuss,ieerr) calll MMPI_Reccv(uuoldd(0),1, MPPI_DDOUBBLE_PREECISSIONN, & nlpp,niit, MPII_COOMM_WORRLD,staatuss, iierrr)c iteerattingg annd cconvverggencc chheckkingg errror=0.00d0 do i=istt,nllocaal uu(i)=(hh*h*f(ii)

46、+uuoldd(i-1)+uolld(ii+1)/22 xxauxxi= dabbs(uu(i)-sooluttionn(i) iif(ddabss(xaauxii).ggt.eerroor) errrorr=xaauxii ennddoocc maxximuum eerroor calll MMPI_Alllredducee(errrorr,xaauxii,1,MPII_DOOUBLLE_PPRECCISIION,MPII_MAAX, & MPPI_CCOMMM_WOORLDD,ieerr) errror=xauuxi if(errror.gt.errrtoll) tthenn doo i=

47、istt,nllocaal uoold(i)=u(ii) ennddoo iff(niit.llt.nnitmmax) thhen nitt=niit+11 if(myrrankk.eqq.0) prrintt *,niit=,niit, errrorr=,errror gotto 110 enndiff enndiffc iff(myyrannk.eeq.00) tthenn if(nitt.lee.niitmaax.aand.errror.le.errrtoll) tthenn wrritee(*,1000) nnit formmat(1x, “Suucceessffullly ttoucch tthe exaact sollutiion aftter nitt = ”, & i4, “ iteerattionns”) elsse wrritee(*,2000) nnit forrmatt(1xx, “Faail to touuch thee exxactt sooluttionn affterr niit = ”, & i4, “ iteerattionns”) enddif enndiffccalll MPPI_FFinaalizze(iierrr)c ennd1. 编译 LINNUX : mp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论