中科院计算流体力学讲义CFD2011-第13讲-MPI并行程序设计初步1培训讲学

上传人:yuzo****123 文档编号:143777920 上传时间:2020-09-02 格式:PPT 页数:56 大小:1.01MB
返回 下载 相关 举报
中科院计算流体力学讲义CFD2011-第13讲-MPI并行程序设计初步1培训讲学_第1页
第1页 / 共56页
中科院计算流体力学讲义CFD2011-第13讲-MPI并行程序设计初步1培训讲学_第2页
第2页 / 共56页
中科院计算流体力学讲义CFD2011-第13讲-MPI并行程序设计初步1培训讲学_第3页
第3页 / 共56页
中科院计算流体力学讲义CFD2011-第13讲-MPI并行程序设计初步1培训讲学_第4页
第4页 / 共56页
中科院计算流体力学讲义CFD2011-第13讲-MPI并行程序设计初步1培训讲学_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《中科院计算流体力学讲义CFD2011-第13讲-MPI并行程序设计初步1培训讲学》由会员分享,可在线阅读,更多相关《中科院计算流体力学讲义CFD2011-第13讲-MPI并行程序设计初步1培训讲学(56页珍藏版)》请在金锄头文库上搜索。

1、计算流体力学讲义2011 第13讲 MPI并行程序设计 (1) 李新亮 ;力学所主楼219; 82543801,知识点: MPI程序的运行机制 拷贝N份,给每个进程一份 MPI的基本库函数6个库函数 “对等式”编程方法 站在单个进程的角度思考,1,讲义、课件上传至 (流体中文网) - “流体论坛” -“ CFD基础理论 ”,Copyright by Li Xinliang,Copyright by Li Xinliang,2,Part 1: 基本概念及MPI并行编程入门,并行计算基本概念 MPI并行编程入门 1)MPI 简介 2)MPI 的基本函数及消息传递 3)MPI的常用函数 4)对等式编

2、程思想的举例说明 全收集、矩阵相乘,一、 基本概念,并行计算机简介 大规模并行计算超级计算(Supercomputing)/高性能计算 (HPC) 为何需要超级计算? 应用领域的巨大计算需求 单CPU的计算能力有限,应用对计算资源的需求,3,Copyright by Li Xinliang,几种我们常见的并行计算机,并行计算机体系结构,5,Copyright by Li Xinliang,内存带宽瓶颈,访存冲突机制控制复杂,虚拟共享存储“NUMA” 访存冲突机制控制复杂,克服了访存冲突及内存瓶颈,访存的局部性 对网络要求不严,6,Copyright by Li Xinliang,低价格 可扩展

3、,自行搭建的简易机群,7,Copyright by Li Xinliang,并行机群: 搭建简单 简单的局域网,并行机群 = 局域网,早期 作者搭建的简易机群,机群软件:Linux/Windows; 套件OSCAR; MPICH.NT, ,我国最早搭建的机群: LSEC 张林波 搭建的32节点机,Copyright by Li Xinliang,8,美洲虎/1700万亿次,曙光5000A/160万亿次,天河1号 千万亿次 CPU+GPU混合系统,联想深腾7000/106万亿次,单精度千万亿次的 GPU系统 Mole-xx,顶级的超级计算机,目标: 每秒 1摩尔次浮点运算 (1 mole=6.0

4、2*1023),Copyright by Li Xinliang,9,Top5 超级计算机 (2010-11),2. 并行程序设计工具,1) 共享存储式 自动并行(并行编译器) Intel Fortran/C 编译器 ifc aa.for -parallel 编译目标: 多线程程序 OpenMP,编译指示符: !omp parallel ,10,Copyright by Li Xinliang,Cluster 系统,2) 分布存储式 HPF (High-Performance Fortran) 基于数据并行,程序改动较小 效率较低 PVM (Parallel Virtual Machine)

5、MPI (Message Passing Interface) 基于消息传递 效率较高,11,Copyright by Li Xinliang,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 设置:头文

6、件路径、连接路径 运行: mpirun,二、MPI并行编程入门 1. 简介,12,Copyright by Li Xinliang,Copyright by Li Xinliang,13,设置Windows下的MPI环境,Step 1: 下载并安装mpich.nt.1.2.5安装包; Step 2: 更改Visual Fortran的环境设置,添加MPICH的 include 及lib 路径 1) Tools-options- Directories; 在“show directories for:” 栏目选择 “include files”; 在“Directories:” 下的对话框里面添

7、加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 (例如

8、“kernel32.lib” 变更为 “kernel32.lib ; mpich.lib”) Step3: 编译程序,生成可执行文件,Copyright by Li Xinliang,14,Step 4: 利用mpirun 运行程序。 (该工具在Windows桌面的 “开始- 程序- mpich - mpd - MPIRun”) 在“Application:”对话框里面选择刚编译生成的可执行文件。 在“Number of Processes” 对话框里面选择运行运行的进程数 (即所谓“CPU个数”)。 在“Advanced options ” 对话框里面选择 “Always prompt fo

9、r password ”。 MPIRun 运行时会要求用户输入计算机的用户名和密码。 点击“Run”即可运行 (需要输入计算机的用户名和密码)。,注意: 如果程序为f90 程序,请修改mpif.h 。将行首的注释符 “C” 替换为“!”, 否则编译会出错。(mpif.h 在安装路径的include 目录下,通常在 C:/Porgram files/mpich/SDK/include里面) 通常MPIRun需要以计算机管理员的身份运行,需要对计算机设置用户名和密码。如果计算机没有设置密码,则需要在控制面板中设置。 些防火墙及杀毒软件会阻止MPIRun的运行,如出现问题需要关闭这些防火墙及杀毒软件

10、。,MPI 程序的运行原理: 服务器(前端机)编译 可执行代码复制 N 份,每个节点运行一份 调用MPI库函数 得到每个节点号 my_id 根据my_id 不同,程序执行情况不同 调用MPI 库函数进行通讯,MPI 编程的基本思想: 主从式,对等式,重要!,15,Copyright by Li Xinliang,重点:对等式程序设计,Copyright by Li Xinliang,16,a.exe,对等式 设计,“对等式”程序设计思想,如果我是其中一个进程; 我应当做 完成我需要完成的任务,站在其中一个进程的角度思考,一个简单的MPI程序 hello.f90 include mpif.h i

11、nteger 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,17,Copyright by Li Xinliang,运行结果:,18,Copyright by Li Xinliang,基本MPI函数 (MPI 子集) 1) MP

12、I初始化 call MPI_Init(ierr) (out) Integer: ierr 2) MPI结束 call MPI_Finalize(ierr) (out) Integer: ierr,19,Copyright by Li Xinliang,(in) : 输入参数; (out) : 输出参数;,整数,返回值非0表示出错,3) 得到当前进程标识 callMPI_Comm_rank(MPI_COMM_WORLD,myid,ierr) (In) Integer: MPI_COMM_WORLD 为进程所在的通信域 (Out) Integer: myid, ierr 4) 得到通信域包含的进程

13、数 CallMPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr) (In) Integer: MPI_COMM_WORLD (Out) Integer: numprocs,ierr,20,Copyright by Li Xinliang,进程的ID号 (从0开始) 最重要的参数!,MPI_COMM_WORLD: MPI预定义的通信域; 可换成创建的通信域Comm,基本概念: 通信域(通信子),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_

14、2,21,Copyright by Li Xinliang,把全班分成几个组,执行任务更方便,“班名”, 包含全班同学 MPI 预定义,my_id “学号”,组的名字(编号),组内编号,MPI 消息传递函数 消息发送 MPI_Send(buf,count,datatype,dest,tag,comm, ierr) MPI消息:数据描述+信封 数据描述:起始地址,数据个数,数据类型 信封: 源/目,标签,通信域,22,Copyright by Li Xinliang,buf: 数据起始地址 (Fortran : 变量名, C: 变量地址/指针) count: 数据数目 (以datatype为单位

15、,必须连续),MPI_Send(buf,count,datatype,dest,tag,comm,ierr),23,Copyright by Li Xinliang,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 个数据(不

16、是10个字节),Fortran : 按地址传送 : x(1) 或 x C: 按值传送: 根进程发送到所有进程 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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号