




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CopyrightbyLiXinliang,1,计算流体力学讲义2011第13讲MPI并行程序设计(1)李新亮lixl;力学所主楼219;82543801,知识点:MPI程序的运行机制拷贝N份,给每个进程一份MPI的基本库函数6个库函数“对等式”编程方法站在单个进程的角度思考,讲义、课件上传至(流体中文网)-“流体论坛”-“CFD基础理论”,CopyrightbyLiXinliang,2,Part1:基本概念及MPI并行编程入门,并行计算基本概念MPI并行编程入门1)MPI简介2)MPI的基本函数及消息传递3)MPI的常用函数4)对等式编程思想的举例说明全收集、矩阵相乘,CopyrightbyLiXinliang,3,一、基本概念,并行计算机简介大规模并行计算超级计算(Supercomputing)/高性能计算(HPC)为何需要超级计算?应用领域的巨大计算需求单CPU的计算能力有限,应用对计算资源的需求,CFD的计算资源依赖性计算量大流动的多尺度性(湍流)大飞机全部流动细节完全分辨:最小尺度:mmmm量级;计算网格:1012-1016;需计算量:1020-30;工程需求:8个小时之内完成计算预计:LES:2045年;DNS:2080年,最大尺度m,mm,CopyrightbyLiXinliang,5,几种我们常见的并行计算机,并行计算机体系结构,内存带宽瓶颈,访存冲突机制控制复杂,虚拟共享存储“NUMA”访存冲突机制控制复杂,克服了访存冲突及内存瓶颈,访存的局部性对网络要求不严,CopyrightbyLiXinliang,6,低价格可扩展,CopyrightbyLiXinliang,7,自行搭建的简易机群,并行机群:搭建简单简单的局域网,并行机群=局域网,早期作者搭建的简易机群,机群软件:Linux/Windows;套件OSCAR;MPICH.NT,,我国最早搭建的机群:LSEC张林波搭建的32节点机,CopyrightbyLiXinliang,8,美洲虎/1700万亿次,曙光5000A/160万亿次,天河1号千万亿次CPU+GPU混合系统,联想深腾7000/106万亿次,单精度千万亿次的GPU系统Mole-xx,顶级的超级计算机,目标:每秒1摩尔次浮点运算(1mole=6.02*1023),CopyrightbyLiXinliang,9,Top5超级计算机(2010-11),CopyrightbyLiXinliang,10,2.并行程序设计工具,1)共享存储式自动并行(并行编译器)IntelFortran/C编译器ifcaa.for-parallel编译目标:多线程程序OpenMP,编译指示符:!ompparallel,CopyrightbyLiXinliang,11,Cluster系统,2)分布存储式HPF(High-PerformanceFortran)基于数据并行,程序改动较小效率较低PVM(ParallelVirtualMachine)MPI(MessagePassingInterface)基于消息传递效率较高,CopyrightbyLiXinliang,12,MPI的编译、运行环境1)并行计算机(力学所机群、深腾7000,曙光5000A)编译:mpif90/mpif77/mpiccf90/f77-I/usr/local/mpi/include-L/usr/local/mpi/lib-lm-lmpi运行:mpirun/bsub2)MPIforNT(Windows2000,XP)编译环境:VisualFortran/MSDevelopStudio设置:头文件路径、连接路径运行:mpirun,二、MPI并行编程入门1.简介,CopyrightbyLiXinliang,13,设置Windows下的MPI环境,Step1:下载并安装mpich.nt.1.2.5安装包;Step2:更改VisualFortran的环境设置,添加MPICH的include及lib路径1)Tools-options-Directories;在“showdirectoriesfor:”栏目选择“includefiles”;在“Directories:”下的对话框里面添加MPICHinclude的路径,例如“C:/Porgramfiles/mpich/SDK/include”(根据安装的具体位置而定)在“showdirectoriesfor:”的栏目选择“Libraryfiles”,在“Directories:”下的对话框里面添加MPICHLib的路径,例如“C:/Porgramfiles/mpich/SDK/lib”2)程序编译时,请把mpich.lib添加在链接库里。project-settings-link;在objcet/Librarymodules下的对话框里面添加mpich.lib(例如“kernel32.lib”变更为“kernel32.lib;mpich.lib”)Step3:编译程序,生成可执行文件,CopyrightbyLiXinliang,14,Step4:利用mpirun运行程序。(该工具在Windows桌面的“开始-程序-mpich-mpd-MPIRun”)在“Application:”对话框里面选择刚编译生成的可执行文件。在“NumberofProcesses”对话框里面选择运行运行的进程数(即所谓“CPU个数”)。在“Advancedoptions”对话框里面选择“Alwayspromptforpassword”。MPIRun运行时会要求用户输入计算机的用户名和密码。点击“Run”即可运行(需要输入计算机的用户名和密码)。,注意:如果程序为f90程序,请修改mpif.h。将行首的注释符“C”替换为“!”,否则编译会出错。(mpif.h在安装路径的include目录下,通常在C:/Porgramfiles/mpich/SDK/include里面)通常MPIRun需要以计算机管理员的身份运行,需要对计算机设置用户名和密码。如果计算机没有设置密码,则需要在控制面板中设置。些防火墙及杀毒软件会阻止MPIRun的运行,如出现问题需要关闭这些防火墙及杀毒软件。,CopyrightbyLiXinliang,15,MPI程序的运行原理:服务器(前端机)编译可执行代码复制N份,每个节点运行一份调用MPI库函数得到每个节点号my_id根据my_id不同,程序执行情况不同调用MPI库函数进行通讯,MPI编程的基本思想:主从式,对等式,重要!,重点:对等式程序设计,CopyrightbyLiXinliang,16,a.exe,对等式设计,“对等式”程序设计思想,如果我是其中一个进程;我应当做完成我需要完成的任务,站在其中一个进程的角度思考,CopyrightbyLiXinliang,17,一个简单的MPI程序hello.f90includempif.hintegermyid,numprocs,ierrcallMPI_Init(ierr)callMPI_Comm_rank(MPI_COMM_WORLD,myid,ierr)callMPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr)Print*,HelloWorld!myidis:,myid!添加自己的程序!callMPI_Finalize(ierr)end,CopyrightbyLiXinliang,18,运行结果:,CopyrightbyLiXinliang,19,基本MPI函数(MPI子集)1)MPI初始化callMPI_Init(ierr)(out)Integer:ierr2)MPI结束callMPI_Finalize(ierr)(out)Integer:ierr,(in):输入参数;(out):输出参数;,整数,返回值非0表示出错,CopyrightbyLiXinliang,20,3)得到当前进程标识callMPI_Comm_rank(MPI_COMM_WORLD,myid,ierr)(In)Integer:MPI_COMM_WORLD为进程所在的通信域(Out)Integer:myid,ierr4)得到通信域包含的进程数CallMPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr)(In)Integer:MPI_COMM_WORLD(Out)Integer:numprocs,ierr,进程的ID号(从0开始)最重要的参数!,MPI_COMM_WORLD:MPI预定义的通信域;可换成创建的通信域Comm,CopyrightbyLiXinliang,21,基本概念:通信域(通信子),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“学号”,组的名字(编号),组内编号,CopyrightbyLiXinliang,22,MPI消息传递函数消息发送MPI_Send(buf,count,datatype,dest,tag,comm,ierr)MPI消息:数据描述+信封数据描述:起始地址,数据个数,数据类型信封:源/目,标签,通信域,CopyrightbyLiXinliang,23,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*8x(10)(给x赋值)CallMPI_send(x(1),10,MPI_double_precision,.),数据的首地址(不是变量的值),10个数据(不是10个字节),Fortran:按地址传送:x(1)或xC:按值传送:根进程发送到所有进程if(myid.eq.0)thenA0(0)=Adoid=1,Nproc-1callMPI_Recv(A0(id),1,MPI_Real,id,99,MPI_Comm_World,status,ierr)enddoelsecallMPI_Send(A,1,MPI_Real,0,.)endifif(myid.eq.0)thendoid=1,Nproc-1callMPI_Send(A0,Nproc,MPI_Real,id,)enddoelsecallMPI_Recv(A0,Nproc,MPI_Real,0,)endif,“班长”依次与所有同学通信,收集信息;收集后依次通信,发放信息,负载不均衡效率最低可能会死锁,CopyrightbyLiXinliang,44,方式2:根进程收集所有数据;根进程广播到所有进程if(myid.eq.0)thenA0(0)=Adoid=1,Nproc-1callMPI_Recv(A0(id),1,MPI_Real,id,99,MPI_Comm_World,status,ierr)enddoelsecallMPI_Send(A,1,MPI_Real,0,.)endifcallMPI_Bcast(A0,Nproc,MPI_Real,0,MPI_Comm_world,ierr)效率高于(1)是MPI_Allgather()的原有的标准方式,广播的实现方式,“班长”依次收集信息后,“广播”给全班,CopyrightbyLiXinliang,45,1A,sendtoID0,0123N-1,1B,0123N-1,Step1:“我”(my_id进程)向my_id+1进程发数据;“我”收my_id-1进程发来的数据,该步完成后:“我”(my_id进程)得到了my_id-1的数据,全收集的实现图解,方式3:循环通信,CopyrightbyLiXinliang,46,2A,sendtoID1,0123N-1,2B,0123N-1,Step2:“我”向my_id+2进程发数据;“我”收my_id-2进程发来的数据;,该步完成后:“我”得到了my_id-1,my_id-2进程的数据,Step3:我向my_id+3发数据,我收my_id-3发来的数据StepN-1完成后,我得到了全部数据;全体进程也得到了全部数据,对等式编程思想:每个人做好自己的工作,全部工作就做好了,不设班长,所有人工作量相同,CopyrightbyLiXinliang,47,循环通讯:由张林波研究员首次提出dostep=1,Nproc-1id_send=myid+step;if(id_send.ge.Nproc)id_send=id_send-Nprocid_recv=myid-step;if(id_recv.lt.0)id_recv=id_recv+NproccallMPI_Send(A,1,MPI_Real,id_send,99,if(id_send.ge.P)id_send=id_send-Pid_recv=myid-step;if(id_recv.lt.0)id_recv=id_recv+PcallMPI_Send(B1,N*N/P,MPI_REAL,id_send,)callMPI_Recv(B_tmp,N*N/P,MPI_REAL,id_recv,)计算出C1(id_recv)(C1(id_recv)=A1*B_tmp)enddo,sendtoID0,0123N-1,工作数组,存放接受来的矩阵Bk,回顾MPI程序的运行原理:服务器(前端机)编译可执行代码复制N份,每个节点运行一份调用MPI库函数得到每个节点号myid根据myid不同,程序不同调用MPI库函数进行通讯,MPI编程的基本思想:主从式,对等式,推荐采用对等式编程思想,基本的MPI函数(6个)MPI初始化MPI_Init(ierr);MPI结束MPI_Finalize(ierr)得到当前进程标识MPI_Comm_rank(MPI_COMM_WORLD,myid,ierr)得到通信域包含的进程数MPI_Comm_size(MPI_COMM_WORLD,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建设工程资料合同续签
- 果园出租转让合同范本
- 电梯技术协议合同范本
- 广告衫合同范本
- 节能改造项目造价咨询合同
- 工地承包草木合同范本
- 租赁防爆护栏合同范本
- 白蚁防治服务合同范本
- 自用无暇出售合同范本
- 他人借款合同范本模板
- 杭州预付消费管理办法
- 2025年中国淋膜纸市场调查研究报告
- 【课件】破茧 逐光-2026届新高三启航主题班会:挑战极限成就梦想(含规划指南、学法指导、心理护航)
- 听觉与健康课件
- (2025)事业单位考试(面试)试题附答案
- 遗体整形协议书
- IATF16949:2016内审员培训试卷含答案
- 2025-2030中国太阳能电池板清洁系统行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030加工芒果产品行业市场现状供需分析及投资评估规划分析研究报告
- 智能制造导论 课件 全套1-7 第1章 绪 论 - -第7章 智能制造的发展前景展望
- 大型标准化体育场馆弱电智能系统设计方案和对策
评论
0/150
提交评论