收藏 分销(赏)

MPI并行程序设计初步.ppt

上传人:二*** 文档编号:12673819 上传时间:2025-11-22 格式:PPT 页数:57 大小:4.62MB 下载积分:5 金币
下载 相关 举报
MPI并行程序设计初步.ppt_第1页
第1页 / 共57页
本文档共57页,全文阅读请下载到手机保存,查看更方便
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,计算流体力学讲义,第五讲,MPI,并行程序设计(,1,),李新亮,lixl,;力学所主楼,219,;,82543801,知识点:,MPI,程序的运行机制,拷贝,N,份,给每个进程一份,MPI,的基本库函数,6,个库函数,“对等式”编程方法,站在单个进程的角度思考,讲义、课件上传至,(,流体中文网),-,“流体论坛”,-,“,CFD,基础理论,”,1,可整理ppt,Part 1:,基本概念及,MPI,并行编程入门,并行计算基本概念,MPI,并行编程入门,1,),MPI,简介,2,),MPI,的基本函数及消息传递,3,),MPI,的常用函数,4,)对等式编程思想的举例说明,全收集、矩阵相乘,2,可整理ppt,一、基本概念,并行计算机简介,大规模并行计算,超级计算(,Supercomputing)/,高性能计算,(HPC),为何需要超级计算?,应用领域的巨大计算需求,单,CPU,的计算能力有限,应用对计算资源的需求,3,可整理ppt,CFD,的计算资源依赖性,计算量大,流动的多尺度性(湍流),大飞机全部流动细节完全分辨:,最小尺度:,m,m mm,量级;,计算网格:,10,12,-10,16,;,需计算量:,10,20-30,;,工程需求:,8,个小时之内完成计算,预计:,LES,:,2045,年;,DNS:2080,年,最大尺度,m,mm,4,可整理ppt,几种我们常见的并行计算机,CPU,CPU,CPU,总线或交叉开关,Memory,(,a)SMP,物理上单一地址空间,CPU,CPU,CPU,定制网络,LM,LM,LM,虚拟分布共享存储(,DSM),(,b)DSM,逻辑上单一地址空间,P/C,P/C,P/C,定制/标准网络,LM,LM,LM,(,c)Cluster/COW,物理/逻辑上多地址空间,SMP,MPP,MPP,WAN,LM,DSM,SM,(,d)Grid(Cluster of Clusters),并行计算机体系结构,内存带宽瓶颈,访存冲突机制控制复杂,虚拟共享存储“,NUMA”,访存冲突机制控制复杂,克服了访存冲突及内存瓶颈,访存的局部性,对网络要求不严,5,可整理ppt,各系统的性能,2100,2100,2100,2100,2100,2100,2100,2100,2100,单处理器,共享存储,局域并行机群,广域并行机群,GFLOPS,低价格,可扩展,6,可整理ppt,自行搭建的简易机群,并行机群:搭建简单,简单的局域网,并行机群,=,局域网,早期 作者搭建的简易机群,机群软件:,Linux/Windows;,套件,OSCAR;MPICH.NT,,,我国最早搭建的机群:,LSEC,张林波 搭建的,32,节点机,7,可整理ppt,美洲虎,/1700,万亿次,曙光,5000A/160,万亿次,天河,1,号,560,万亿次,CPU+GPU,混合系统,联想深腾,7000/106,万亿次,单精度千万亿次的,GPU,系统,Mole-xx,顶级的超级计算机,目标:每秒,1,摩尔次浮点运算,(,1 mole=6.02*10,23,),8,可整理ppt,排名,Site,Computer,计算机描述,cores,核心数,实测速度,/,峰值速度,(Tflops);,耗电量,(KW),1,Oak Ridge National Laboratory,United States,Jaguar-Cray XT5-HE Opteron Six Core 2.6 GHz/2009 Cray Inc.,224162,1759/2331,;,6950.6,2,DOE/NNSA/LANL,United States,Roadrunner-BladeCenter QS22/LS21 Cluster,PowerXCell 8i 3.2 Ghz/Opteron DC 1.8 GHz,Voltaire Infiniband/2009,;,IBM,122400,1042/1375.78,;,2345.50,3,National Institute for Computational Sciences/University of Tennessee,United States,Kraken XT5-Cray XT5-HE Opteron Six Core 2.6 GHz/2009 Cray Inc.,98928,831.70/1028.85,Top5,超级计算机(,2009-11,),美洲虎半年间性能猛增,69,的秘密在于处理器核心数量的暴涨:在配备,AMD,刚刚发布的六核心“伊斯坦布尔”,Opteron 2435 2.6GHz(,单颗浮点性能,10.4GFlops),后,美洲虎的核心数从,129600,个增至,224162,个,(+73,),,且每核心搭配,2GB,内存,每个完整的计算节点由,12,个处理核心和,16GB,共享内存组成,整套系统,300TB,内存、,10PB(10000TB),硬盘。,9,可整理ppt,排名,Site,Computer,计算机描述,cores,核心数,实测速度,/,峰值速度(万亿次),;,耗电量(千瓦),4,Forschungszentrum Juelich(FZJ)Germany,JUGENE-Blue Gene/P Solution/2009 IBM,294912,825.50/1002.7,;,2268,5,National SuperComputer Center in Tianjin/NUDT,China,Tianhe-1,-NUDT TH-1 Cluster,Xeon E5540/E5450,ATI Radeon HD 4870 2,Infiniband/2009 NUDT,71680,563.10,/1206.19,Top5,超级计算机(,2009-11,),天河,1,号:我国最快的计算机,;CPU+GPU,的混合系统,GPU,计算,最先进的高性能计算,10,可整理ppt,2.,并行程序设计工具,1,)共享存储式,自动并行(并行编译器),Intel Fortran/C,编译器,ifc aa.for,-parallel,编译目标:多线程程序,OpenMP,内 存,CPU,编译指示符:!,omp parallel,11,可整理ppt,局域网络,计算机,Cluster,系统,2,)分布存储式,HPF (High-Performance Fortran),基于数据并行,程序改动较小,效率较低,PVM(Parallel Virtual Machine),MPI,(Message Passing Interface),基于消息传递,效率较高,12,可整理ppt,MPI,的编译、运行环境,1,)并行计算机(力学所机群、深腾,7000,,曙光,5000A),编译:,mpif90/mpif77/mpicc,f90/f77 -I/usr/local/mpi/include,-L/usr/local/mpi/lib-lm-lmpi,运行:,mpirun/bsub,2,),MPI for NT (Windows 2000,XP),编译环境:,Visual Fortran/MS Develop Studio,设置:头文件路径、连接路径,运行:,mpirun,二、,MPI,并行编程入门,1.,简介,13,可整理ppt,设置,Windows,下的,MPI,环境,Step 1:,下载并安装,mpich.nt.1.2.5,安装包;,Step 2:,更改,Visual Fortran,的环境设置,添加,MPICH,的,include,及,lib,路径,1,),Tools-options-Build,;,在“,show directories for:,”,栏目选择“,include files”;,在“,Directories:”,下的对话框里面添加,MPICH include,的路径,例如,“,C:/Porgram files/mpich/SDK/include,”,(,根据安装的具体位置而定),在“,show directories for:”,的栏目选择“,Library files,”,在“,Directories:”,下的对话框里面添加,MPICH Lib,的路径,例如“,C:/Porgram files/mpich/SDK/lib,”,2),程序编译时,请把,mpich.lib,添加在链接库里。,project-settings-link;,在,objcet/Library modules,下的对话框里面添加,mpich.lib,(例如,“kernel32.lib”,变更为,“kernel32.lib,;,mpich.lib”),Step3:,编译程序,生成可执行文件,14,可整理ppt,Step 4:,利用,mpirun,运行程序。(该工具在,Windows,桌面的“开始,-,程序,-mpich-mpd-MPIRun”),在“,Application,:”对话框里面选择刚编译生成的可执行文件。在“,Number of Processes”,对话框里面选择运行运行的进程数(即所谓“,CPU,个数”)。,在“,Advanced options”,对话框里面选择“,Always prompt for password,”。,MPIRun,运行时会要求用户输入计算机的用户名和密码。,点击“,Run”,即可运行,(,需要输入计算机的用户名和密码)。,注意:,如果程序为,f90,程序,请修改,mpif.h,。将行首的注释符,“C”,替换为,“!”,,否则编译会出错。(,mpif.h,在安装路径的,include,目录下,通常在,C:/Porgram files/mpich/SDK/include,里面),通常,MPIRun,需要以计算机管理员的身份运行,需要对计算机设置用户名和密码。如果计算机没有设置密码,则需要在控制面板中设置。,些防火墙及杀毒软件会阻止,MPIRun,的运行,如出现问题需要关闭这些防火墙及杀毒软件。,15,可整理ppt,服务器,/,前端机,计算节点,a.exe,a.exe,a.exe,MPI,程序的运行原理:,服务器(前端机)编译,可执行代码,复制,N,份,,每个节点运行一份,调用,MPI,库函数,得到每个节点号,my_id,根据,my_id,不同,程序执行情况不同,调用,MPI,库函数进行通讯,MPI,编程的基本思想:主从式,,对等式,重要!,重点:对等式程序设计,16,可整理ppt,计算节点,a.exe,a.exe,a.exe,a.exe,对等式,设计,“对等式”程序设计思想,如果我是其中一个进程;,我应当做,完成我需要完成的任务,站在其中一个进程的角度思考,17,可整理ppt,一个简单的,MPI,程序,hello.f90,include mpif.h,integer myid,numprocs,ierr,call MPI_Init(ierr),callMPI_Comm_rank(,MPI_COMM_WORLD,myid,ierr),call MPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr),Print*,Hello World!my id is:,myid,!,添加自己的程序,!,call MPI_Finalize(ierr),end,18,可整理ppt,运行结果:,19,可整理ppt,基本,MPI,函数 (,MPI,子集),1)MPI,初始化,call MPI_Init(ierr),(out)Integer:ierr,2)MPI,结束,call MPI_Finalize(ierr),(out)Integer:ierr,(in),:输入参数;,(out),:输出参数;,整数,返回值非,0,表示出错,20,可整理ppt,3),得到当前进程标识,callMPI_Comm_rank(,MPI_COMM_WORLD,myid,ierr),(In)Integer:MPI_COMM_WORLD,为进程所在的通信域,(Out)Integer:myid,ierr,4),得到通信域包含的进程数,CallMPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr),(In)Integer:MPI_COMM_WORLD,(Out)Integer:numprocs,ierr,进程的,ID,号(从,0,开始),最重要的参数!,MPI_COMM_WORLD:MPI,预定义的通信域;可换成创建的通信域,Comm,21,可整理ppt,基本概念:通信域(通信子),0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,0,1,2,3,4,5,MPI_COMM_WORLD,MPI_Comm_1,MPI_Comm_2,把全班分成几个组,执行任务更方便,“班名”,包含全班同学,MPI,预定义,my_id “,学号”,组的名字(编号),组内编号,22,可整理ppt,MPI,消息传递函数,消息发送,MPI_Send(,buf,count,datatype,dest,tag,comm,ierr),MPI,消息:数据描述,+,信封,数据描述:,起始地址,数据个数,数据类型,信封:,源/目,标签,通信域,23,可整理ppt,buf:,数据起始地址,(Fortran:,变量名,,,C,:,变量地址,/,指针,),count:,数据数目,(,以,datatype,为单位,必须连续,),MPI_Send(,buf,count,datatype,dest,tag,comm,ierr,),Datatype:,数据类型,MPI_INTEGER,MPI_REAL,MPI_DOUBLE_PRECISION,MPI_COMPLEX,MPI_LOGICAL,MPI_CHARACTER,MPI_BYTE,MPI_PACKED,Real*8 x(10),(给,x,赋值),Call MPI_send(x(1),10,MPI_double_precision,.),数据的首地址 (不是变量的值),10,个数据(不是,10,个字节),Fortran:,按地址传送:,x(1),或,x,C:,按值传送:,&(x0),或,x,24,可整理ppt,dest:,发送目标的,ID,(,integer,),Tag:,消息标签,(integer),Comm:,通信域,(integer),例:,MPI_COMM_WORLD,ierr:,整数,如果成功返回,0,例:,real A,.,if(my_id.eq.0)Call MPI_Send(A,1,MPI_REAL,1,27,MPI_COMM_WORLD,ierr),标签,tag,的作用:区别不同的消息,MPI_Send(,buf,count,datatype,dest,tag,comm,ierr,),标签。举例:,0,号同学向,1,号同学发出,3,封信,内容分别为,3,科考试成绩,为了防止弄混,必须用约定的数做标签。,目的,ID,25,可整理ppt,消息接收,MPI_Recv(,buf,count,datatype,source,tag,comm,status,,,ierr),参数:数据起始地址,数据,类型,源地址,标签,,通信域,返回状态,integer status(MPI_STATUS_SIZE),MPI,接收匹配:,数据类型、源地址、标签,要一致;否则不接收,数据发送缓冲区,消息装配,消息传递,消息拆卸,数据接收缓冲区,返回状态和调试信息,26,可整理ppt,MPI_Recv(buf,count,datatype,source,tag,comm,status,,,ierr),源地址,标签,integer status(MPI_STATUS_SIZE),任意源地址,:,MPI_ANY_SOURCE,任意标签 :,MPI_ANY_TAG,包含必要信息,MPI,预定义的常量,可匹配任意源、任意标签,“无论谁来的信都接收”,status(MPI_SOURCE),:消息的源地址,status(MPI_TAT),:消息的标签,status(MPI_ERROR),:错误码,27,可整理ppt,MPI,的消息发送机制,两步进行,MPI_Send(A,),发送,MPI_Recv(B,),接收,发送 变量,A,接收 到变量,B,配合使用,发,/,收,两步,机制;,避免直接读写对方内存;,保证安全性,28,可整理ppt,!sum from 1 to 100 !Run only for np=2!,include mpif.h,integer myid,sum_local,sum_local1,sum_global,ierr,status(MPI_STATUS_SIZE),call MPI_Init(ierr),call MPI_Comm_Rank(MPI_COMM_WORLD,myid,ierr),sum_local=0,do i=myid+1,100,2,sum_local=sum_local+i,enddo,print*,myid=,myid,sum_local=,sum_local,if(myid.eq.1)call MPI_SEND(sum_local,1,MPI_INTEGER,0,99,MPI_COMM_WORLD,ierr),if(myid.eq.0)then,call MPI_RECV(sum_local1,1,MPI_INTEGER,1,99,MPI_COMM_WORLD,status,ierr),sum_global=sum_local+sum_local1,print*,sum_global=,sum_global,endif,call MPI_Finalize(ierr),end,例:计算,1+2+3+100,采用,2,个,CPU,并行,CPU 0:1+3+5+7+99,CPU 1:2+4+6+8+100,“对等式”编程思路:,站在每个进程的角度思考,29,可整理ppt,结果显示,30,可整理ppt,消息传递时要注意防止,死锁,缓冲区,(“信箱”),MPI_Send,MPI_Recv,MPI_Send,MPI_Recv,属于,阻塞式,发送,/,接收,发送成功,接收成功,发送和接收是两个,独立,过程,子程序返回,Send,与,Recv,一定要配合好,发送到“信箱”即为成功,重要!,31,可整理ppt,缓冲区,发生,死锁,的情况,只发送,不接收,只接收,不发送,缓冲区,?,32,可整理ppt,例,任务:进程,0,发送变量,A,给进程,1,进程,1,发送变量,B,给进程,0,if(myid.eq.0)then,call,MPI_send,(A,1,MPI_real,1,99,MPI_Comm_World,ierr),call,MPI_recv,(B,1,MPI_real,1,99,MPI_Comm_World,ierr),Else if(myid.eq.1)then,call,MPI_recv,(A,1,MPI_real,0,99,MPI_Comm_World,ierr),call,MPI_send,(B,1,MPI_real,0,99,MPI_Comm_World,ierr),endif,Step 1,Step 2,Step 1,Step 2,不会死锁,33,可整理ppt,死锁,的例子,if(myid.eq.0)then,call,MPI_recv,(B,1,MPI_real,1,99,MPI_Comm_World,ierr),call,MPI_send,(A,1,MPI_real,1,99,MPI_Comm_World,ierr),Else if(myid.eq.1)then,call,MPI_recv,(A,1,MPI_real,0,99,MPI_Comm_World,ierr),call,MPI_send,(B,1,MPI_real,0,99,MPI_Comm_World,ierr),endif,Step 1,Step 1,Step 2,不会死锁,?,?,Step 2,34,可整理ppt,有可能死锁,的例子,if(myid.eq.0)then,call,MPI_send,(A,1,MPI_real,1,99,MPI_Comm_World,ierr),call,MPI_recv,(B,1,MPI_real,1,99,MPI_Comm_World,ierr),Else if(myid.eq.1)then,call,MPI_send,(B,1,MPI_real,0,99,MPI_Comm_World,ierr),call,MPI_recv,(A,1,MPI_real,0,99,MPI_Comm_World,ierr),endif,Step 2,Step 2,Step 1,35,可整理ppt,使用,MPI_Sendrecv(),函数来避免死锁,MPI_SendRecv(,buf1,count1,datatype1,dest,tag1,buf2,count2,datatype2,source,tag2,comm,status,ierr,),=,MPI_Send,(,buf1,count1,datatype1,dest,tag1,comm,ierr),+MPI_Recv(,buf2,count2,datatype2,source,tag2,comm,status,ierr),次序由系统决定,36,可整理ppt,基本的,MPI,函数(,6,个),MPI,的子集,MPI,初始化,MPI_Init(ierr),;,MPI,结束,MPI_Finalize(ierr),得到当前进程标识,MPI_Comm_rank(,MPI_COMM_WORLD,myid,ierr),得到通信域包含的进程数,MPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr),消息发送,MPI_Send(,buf,count,datatype,dest,tag,comm,ierr),消息接收,MPI_Recv(,buf,count,datatype,source,tag,comm,status,ierr),MPI,只能点到点通信,其他函数是用这,6,个函数开发的;,使用这,6,个函数,可以实现,MPI,的全部功能。,37,可整理ppt,系统时间(墙钟)函数,:MPI_Wtime(),real*8:time,time=MPI_Wtime(),返回当前墙钟时间(单位:秒),(,Wall time,与,CPU time,不同,,Wall time,更可靠),CPU,分时为所有进程服务,Real*8:Time_begin,Time_end,(,初始化,),Time_begin=MPI_Wtime(),.,.,(计算任务),.,Call MPI_Barrier(comm,ierr),Time_end=MPI_Wtime,(),Print*,“,计算时间为:”,Time_end-Time_begin,可用来测量程序的执行速度,测量加速比及并行效率,加速比,=N,个进程的执行速度,/,单个进程的执行速度,并行效率,=,加速比,/N,作者的,Hoam-OpenCFD,软件加速比测试,CPU Core number 1024-16384,并行效率,89.6%,通常要进行同步,然后测量时间,否则各进程报出的时间不同。,38,可整理ppt,3.,常用的,MPI,函数,1,),广播,MPI_Bcast(buff,count,datatype,root,comm,ierr),参数:数据缓冲区,数目,数据类型,根进程,通讯域,例:,real A,if(myid.eq.0)then,open(55,file=data.dat),read(55,*)A,close(55),endif,call MPI_Bcast(A,1,MPI_REAL,0,MPI_COMM_WORLD,ierr),广播:树状传播,效率较高,广播的逻辑图,广播的实际实现方式,树状传播,MPI,的消息:只能点到点传递;不能真正“广播”,39,可整理ppt,2,)规约 (求和,求最大值,求最小值,,),MPI_Reduce(sendbuf,recvbuf,count,datatype,op,root,comm,ierr),发送缓冲区,接收缓冲区,数目,数据类型,规约操作,通讯域,!sum from 1 to 100 !Run only for np=2!,include mpif.h,integer myid,sum_local,sum_global,ierr,call MPI_Init(ierr),call MPI_Comm_Rank(MPI_COMM_WORLD,myid,ierr),sum_local=0,do i=myid+1,100,2,sum_local=sum_local+i,enddo,call MPI_Reduce(sum_local,sum_global,1,MPI_INTEGER,&,MPI_SUM,0,MPI_COMM_WORLD,ierr),print*,sum_global=,sum_global,call MPI_Finalize(ierr),end,40,可整理ppt,预定义的规约操作:,MPI_MAX,最大值,MPI_LXOR,逻辑异或,MPI_MIN,最小值,MPI_BXOR,按位异或,MPI_SUM,求和,MPI_MAXLOC,最大值及位置,MPI_PROD,求积,MPI_MINLOC,最小值及位置,MPI_LAND,逻辑与,MPI_BAKD,按位与,MPI_LOR,逻辑或,MPI_BOR,安位或,41,可整理ppt,同步,MPI_Barrier(comm,ierr),Comm:,通讯域,,ierr:,返回值,等待所有进程都调用,MPI_Barrier(),函数才能返回,Call MPI_barrier(MPI_COMM_WORLD,ierr),42,可整理ppt,4.,“对等式”编程示例,例,1,:全收集的实现,MPI_Allgather(),题目:,N,个进程,每个进程有一个数,A,;把所有进程的数收集起来,按进程号的次序形成数组,A0(1:N),存放到所有进程中。,把每个同学的电话号码收集起来,形成通讯录,发给全班同学,也可以是数组,各进程的数,A,可以不同,A0(1),A0(2),A0(3),A0(4),43,可整理ppt,方式,1,:,根进程收集所有数据,;,根进程发送到所有进程,if(myid.eq.0)then,A0(0)=A,do id=1,Nproc-1,call MPI_Recv(A0(id),1,MPI_Real,id,99,MPI_Comm_World,status,ierr),enddo,else,call MPI_Send(A,1,MPI_Real,0,.),endif,if(myid.eq.0)then,do id=1,Nproc-1,call MPI_Send(A0,Nproc,MPI_Real,id,),enddo,else,call MPI_Recv(A0,Nproc,MPI_Real,0,),endif,“班长”依次与所有同学通信,收集信息;,收集后依次通信,发放信息,负载不均衡,效率最低,可能会死锁,44,可整理ppt,方式,2,:,根进程收集所有数据,;,根进程广播到所有进程,if(myid.eq.0)then,A0(0)=A,do id=1,Nproc-1,call MPI_Recv(A0(id),1,MPI_Real,id,99,MPI_Comm_World,status,ierr),enddo,else,call MPI_Send(A,1,MPI_Real,0,.),endif,call MPI_Bcast(A0,Nproc,MPI_Real,0,MPI_Comm_world,ierr),效率高于(,1,),是,MPI_Allgather(),的,原有的,标准方式,广播的实现方式,“班长”依次收集信息后,“广播”给全班,45,可整理ppt,1A,send to ID 0,0 1 2 3 N-1,1B,0 1 2 3 N-1,Step 1:,“我”(,my_id,进程)向,my_id+1,进程发数据,;,“我”收,my_id-1,进程发来的数据,该步完成后:,“我”(,my_id,进程)得到了,my_id-1,的数据,全收集的实现图解,方式,3,:循环通信,46,可整理ppt,2A,send to ID 1,0 1 2 3 N-1,2B,0 1 2 3 N-1,Step 2:,“我”向,my_id+2,进程发数据,;,“我”收,my_id-2,进程发来的数据;,该步完成后:“我”得到了,my_id-1,my_id-2,进程的数据,Step 3,:我向,my_id+3,发数据,我收,my_id-3,发来的数据,Step N-1,完成后,,我得到了全部数据;,全体进程也得到了全部数据,对等式编程思想:每个人做好,自己的,工作,全部工作就做好了,不设班长,所有人工作量相同,47,可整理ppt,循环通讯,:,由张林波研究员首次提出,do step=1,Nproc-1,id_send=mod(myid+step,Nproc),id_recv=mod(myid-step,Nproc),call MPI_Send(A,1,MPI_Real,id_send,99,&,MPI_Comm_World,ierr),call MPI_Recv(A0(id_recv),1,MPI_Real,id_recv,99,&,MPI_Comm_World,status,ierr),enddo,效率高于(,1,),(2),是,MPI_Allgather(),的,现有的,标准方式,48,可整理ppt,计算矩阵,A*B=C,,,A,B,C,:,N*N,矩阵,采用,P,个进程计算,(N,能被,P,整除),存储方式:分布存储,,A,C,按行分割,,B,按列分割,矩阵,A B C,例,2.,计算矩阵乘积,49,可整理ppt,“对等式”程序设计思想:,站在每个进程角度思考,“我”,的数据,:,dimension A1(N/P,N),B1(N,N/P),C1(N/P,N),“我”,的任务,:计算,C1,0,K,P-1,A,C,B,A1,B1,C1,50,可整理ppt,需要得到整个矩阵,B,自己只有,B,k,向他人索取,do id=0,P-1,call MPI_Recv(B_tmp,N*N/P,MPI_REAL,id,.),计算出,C1(id)(C1(id)=A1*B_tmp),enddo,只索取数据,何人提供?,“命令”他人提供数据?不符合“对等式”程序设计思想,0,K,P-1,A,C,B,如何完成任务?,B_tmp(N,N/P,P),C1(0),C1(1),C1,51,可整理ppt,B,顺次发送数据,do step=0,P-1,if(myid.eq.step)then,do id=0,P-1,call MPI_Send(B1,N*N/P,MPI_REAL,id,),enddo,endif,call MPI_Recv(B_tmp,N*N/P,MPI_REAL,step,),计算出,C1(id)(C1(id)=A1*B_tmp),enddo,问题:负载不均衡,实际上是,串行,一窝蜂地涌向同一个进程,负载不均衡,容易阻塞,52,可整理ppt,B,按节拍循环发送数据 (同“全收集”),do step=0,P-1,id_,send,=mod(,myid+step,P),id_,recv,=mod(,myid-step,P),call MPI_Send(B1,N*N/P,MPI_REAL,id_send,),call MPI_Recv(B_tmp,N*N/P,MPI_REAL,id_recv,),计算出,C1(id_recv)(C1(id_recv)=A1*B_tmp),enddo,send to ID 0,0 1 2 3 N-1,工作数组,存放接受来的矩阵,Bk,53,可整理ppt,服务器,/,前端机,计算节点,a.exe,a.exe,a.exe,回顾,MPI,程序的运行原理:,服务器(前端机)编译,可执行代码复制,N,份,每个节点运行一份,调用,MPI,库函数,得到每个节点号,myid,根据,myid,不同,程序不同,调用,MPI,库函数进行通讯,MPI,编程的基本思想:主从式,,对等式,推荐采用对等式编程思想,54,可整理ppt,基本的,MPI,函数(,6,个),MPI,初始化,MPI_Init(ierr),;,MPI,结束,MPI_Finalize(ierr),得到当前进程标识,MPI_Comm_rank(,MPI_COMM_WORLD,myid,ierr),得到通信域包含的进程数,MPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr),消息发送,MPI_Send(,buf,count,datatype,dest,tag,comm,ierr),消息接收,MPI_Recv(,buf,count,datatype,source,tag,comm,status,ierr),55,可整理ppt,作业,熟悉,MPI,环境及基本编程,1,)建立,MPI,运行环境(有并行机账户或在微机上安装,MPI,环境)。,2,)编制如下基本的,MPI,程序,计算,S=1+2+3+1000,要求程序可以实现,N,个进程的并行运行且负载尽量均衡。,N,可变,程序中使用,MPI_Comm_Size(),函数读入,N,。由,0,号进程打印计算结果。,3,)在并行环境上运行,输出结果。,要求:提交源程序及运行情况的屏幕截图,56,可整理ppt,2.,实现矩阵相乘的并行计算,矩阵,A,B,均为,N*N,的方阵,试计算矩阵,C=AB,;,使用,P,个进程并行计算(,N,可以被,P,整除);,矩阵,A,,,B,及,C,均采用分布式存储;,A,C,按行分割,,B,按列分割存储(见本稿,47,页)。,要求编写计算,C,矩阵的,MPI,程序,并进行计算。,实际计算时,矩阵,A,B,请采用如下值,,N,设为,100,计算出,C,矩阵后,请计算 ,并由根节点打印出来。,将,S,值与串行程序的结果进行对比,校验程序的正确性;,使用,1,2,4,10,个进程进行计算,并利用,MPI_Wtime(),函数计算程序的运行时间;考核加速比及计算效率。,要求:,1
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 初中其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服