并行程序设计

上传人:l**** 文档编号:54522343 上传时间:2018-09-14 格式:PPT 页数:59 大小:1.64MB
返回 下载 相关 举报
并行程序设计_第1页
第1页 / 共59页
并行程序设计_第2页
第2页 / 共59页
并行程序设计_第3页
第3页 / 共59页
并行程序设计_第4页
第4页 / 共59页
并行程序设计_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《并行程序设计》由会员分享,可在线阅读,更多相关《并行程序设计(59页珍藏版)》请在金锄头文库上搜索。

1、第三章 消息传递程序设计MPI,刘 轶 北京航空航天大学 计算机学院,从程序员视角看,并行体系结构主要分为两类: 共享存储(shared-memory)系统典型平台:- 基于多核处理器的计算机- SMP及NUMA体系结构计算机 消息传递(message-passing)系统- 机群系统,本章内容,几种主流的并行编程接口,本章内容 3.1 MPI并行环境简介 3.2 点到点通信 3.3 组和通信子 3.4 集合通信 3.5 MPI与多线程,3.1 MPI并行环境简介,3.1 MPI并行环境简介,一、简介 MPI-Message Passing Interface 面向消息传递型并行系统的编程接口

2、 主要面向机群系统(cluster) MPI之前曾广泛使用另一种编程接口PVM MPI于1994年发布,目前为v2版 经过多年技术发展,已显露出诸多不足之处,但在没有更理想编程模型和语言的情况下,MPI仍是应用最为广泛的消息传递型编程接口标准 不同厂商和研究机构推出了多个版本,主要有: MPICH http:/www.mpich.org LAMMPI IBM MPL MPI支持C/C+、Fortran语言编程,3.1 MPI并行环境简介,MPI的并行模式:SPMD(Single Program Multiple Data),所有节点运行相同的程序 不同的节点处理不同的数据 每个节点运行一个或多

3、个MPI进程,进程间通过发送/接收消息进行通信和同步,注意:多个并行进程间无法共享变量,只能通过消息进行交互,3.1 MPI并行环境简介,二、MPI基本环境 MPI进程的创建、启动和管理通过进程管理器(PM-Process Manager)完成 进程管理器就是MPI环境与操作系统的接口 常用的进程管理器MPD MPD是MPI环境的守护进程(daemon),MPI其他工具通过与MPD通信实现其功能 MPD由python实现的一组工具构成 意味着系统中需安装python解释器 由mpdboot 完成MPD在多个主机上的启动,以形成MPI运行环境 启动之前需配置各节点间的无密码登录,3.1 MPI并

4、行环境简介,二、MPI基本环境 MPD命令,3.1 MPI并行环境简介,二、MPI基本环境 MPI环境的安装过程示例 下载MPI源代码包并解压缩配置mpi编译并安装(确认)安装python,用vi修改.bash_profile文件,3.1 MPI并行环境简介,二、MPI基本环境 MPI环境的安装过程示例 将MPI路径添加到环境变量PATH 修改用户配置文件.bash_profile,路径信息已添加,3.1 MPI并行环境简介,二、MPI基本环境 MPI环境的安装过程示例 配置节点间SSH无口令登录 (注:SSH Secure SHell) 创建公钥/私钥对文件创建后的文件将公钥文件拷贝到其他节

5、点的.ssh目录中的authorized_keys文件host1host2的SSH无口令登录,3.1 MPI并行环境简介,二、MPI基本环境 MPI环境的安装过程示例 节点名添加到mpd_hosts文件,构成ring启动并测试MPI环境,为保证节点间通信正常和性能,需关闭Linux防火墙,3.1 MPI并行环境简介,二、MPI基本环境 MPI程序编译 MPI提供编译脚本:mpiCC/mpicc/mpif77/mpif90 mpiCC-C+程序编译及链接 mpicc-C程序编译及链接 mpif77和mpif90-Fortran77和Fortran90程序编译及链接关于编译输出可执行文件的位置 要

6、求各节点都可以访问该文件(注意各节点都将执行该程序) 方法一:编译后手工将文件拷贝到各节点例:$scp cpi host2:/home/test 方法二:配置NFS共享目录,各节点启动时将共享目录mount到本机文件系统中,编译输出的可执行文件直接存入该目录,3.1 MPI并行环境简介,二、MPI基本环境 MPI程序的运行 使用mpiexec启动MPI应用程序 MPI过去使用mpirun 基本命令示例:mpiexec -n 表示进程个数(注意:是进程不是线程) 为可执行程序名,可以是MPI程序,也可以不是MPI程序的调试 MPI提供了与gdb和totalview的集成接口 mpiexec gd

7、b实现与gdb的集成,进程按顺序指派在各节点上运行进程个数与节点个数没有必然联系 问题:怎样能写出独立于进程个数和节点个数的程序?,3.1 MPI并行环境简介,三、MPI的几个基本概念 缓冲区:MPI定义了3种缓冲区 应用缓冲区:保存将要发送或接收的数据的地址空间 系统缓冲区:MPI环境为通信所准备的存储空间 用户向系统注册的缓冲区:用户使用某些API时,在程序中显式申请的存储空间,然后注册到MPI环境中供通信所用,节点间传送消息时,可能需要消息在缓冲区之间拷贝 为减少消息传输延迟 更高速的互连网络 更简单的协议栈 避免消息多次拷贝 非阻塞式发送 ,3.1 MPI并行环境简介,三、MPI的几个

8、基本概念 通信子(communicator) 是MPI环境管理进程及通信的基本设施 定义一个可以相互间通信的进程集合,进程间的消息传递需放在通信子中进行 MPI支持通信子内(Intra-communicator)通信和通信子间(Inter-communicator)通信 不同空间中的消息互不干扰 MPI启动后,自动创建2个组内通信子 MPI_COMM_WORLD:启动时的所有进程 MPI_COMM_SELF:仅包含进程自身 进程号与进程组 进程号(rank)需放在某个通信子范围内才有效 在一个通信子中,进程号从0开始编号,为一连续整数序列 通信中必须使用进程号标识消息的源和目的 定义一个通信子

9、时,也就指定了一组共享该空间的进程组(group),访问文件需要使用句柄 访问网络需要使用套接字 MPI中传送消息需要用通信子,3.1 MPI并行环境简介,四、MPI基本调用 MPI初始化与结束,通信子基本操作,3.2 点到点通信,3.2 点到点通信,一、简介 消息由发送进程、接收进程、tag唯一地标识 tag是一个用户自定义的非负整数,用于区分同一对进程间的不同消息 消息的传递涉及数据的拷贝和同步,为满足不同需求,MPI提供多种点到点通信的变体 消息的发送分为阻塞和非阻塞两种方式 消息发送函数:MPI_?Send() B:缓存模式 R:就绪模式 S:同步模式 I:立即发送,即非阻塞方式,I可

10、与B,R,S组合,3.2 点到点通信,一、简介消息发送函数: MPI_?Send() B:缓存模式 R:就绪模式 S:同步模式 I:立即发送,即非阻塞方式,I可与B,R,S组合消息发送和接收函数影响到各节点进程间同步关系及程序性能,应谨慎选择使用,二、标准发送和接收 标准发送和接收是阻塞式(blocking)的 直到传输在本地完成(locally complete)后,发送/接收函数才返回 本地完成与全局完成 本地完成(locally complete) :在本地进程中执行的传输工作已经完成 全局完成(globally complete):整个传输已经完成,3.2 点到点通信,二、标准发送和接

11、收,注意程序在多个节点上执行时,各节点上进程的myid值不相同,启动4个进程时,3.2 点到点通信,发送消息需指明接收进程号 接收方可从任意源接收消息,也可指定源进程 使用参数MPI_ANY_SOURCE、MPI_ANY_TAG MPI通信函数使用MPI_Status返回通信结果,标准模式下的缓冲区使用 由MPI环境决定是否对要发送的消息进行缓冲 如果缓冲了待发送的数据,则与缓冲通信模式一样,即使接收端尚未启动接收操作,发送函数也可立即返回 出于性能和资源优化考虑,MPI会提供一定数量的缓冲区,超过缓冲区容量时,发送方需要阻塞直到接收操作收取数据后才可返回 阻塞式通信中,发送端完成与否不仅取决

12、于本地进程的状态,还与远端接收进程的状态有关,3.2 点到点通信,二、标准发送和接收 阻塞式通信时发送/接收进程的几种状态 双方启动发送和接收操作 proc0会立即启动数据传输操作 发送动作早于接收动作启动 如消息长度缓冲区,proc0需等待直到proc1启动接收; 如消息长度缓冲区,消息存入缓冲区,发送函数立即返回,但实际的消息传输需等到接收启动后才开始。 发送动作迟于接收动作启动 proc0会立即启动数据传输操作,3.2 点到点通信,三、缓冲通信模式(Buffered) 用于解开阻塞式通信时发送与接收之间的耦合关系 缓冲通信模式下 即使接收进程没有启动接收操作,发送方在将消息转移至缓冲区后

13、,发送函数也可返回 开销:消息需在缓冲区间拷贝 如果消息大小超过缓冲区容量,发送函数会返回错误 与标准模式的区别在于: 标准模式由MPI环境决定是否使用缓冲,缓冲区是MPI环境提供的,缓冲不足时发送函数将阻塞 缓冲通信模式由应用程序提供缓冲区,确保发送函数不阻塞,3.2 点到点通信,三、缓冲通信模式 缓冲通信模式使用的几个函数 发送函数:MPI_Bsend(),参数与MPI_Send()相同 发送前使用MPI_Pack_size()获取消息需要的缓冲区大小,并分配缓冲区 发送前使用MPI_Buffer_attach()装配缓冲区 发送后使用MPI_Buffer_detach()卸载缓冲区,3.

14、2 点到点通信,四、就绪通信模式(Ready) 仅当对方的接收操作启动并准备就绪时,才可发送数据 程序员必须保证发送方发送时,接收方已启动接收操作 如果违反了这种定时假设(发送时接收方未启动接收操作),将会导致错误 发送方使用MPI_Rsend()发送消息 优缺点讨论 就绪通信模式可省去消息的缓冲以及发送/接收双方的握手操作,提高通信效率 由于对定时的额外假设,就绪模式容易出错,3.2 点到点通信,五、同步通信模式(Sychronize) 发送端可在任意时刻启动发送动作,但发送端需等待接收端开始接收数据之后才返回 即发送/接收双方达到一个确定的同步点后,通信才结束 通信协议: 发送端首先向接收

15、端发送一个消息发送请求 接收端的MPI环境将该请求保存下来 待接收进程的接收动作启动后,接收端向发送端返回一个消息发送许可 发送端收到许可后发送消息,3.2 点到点通信,六、各种通信模式小结 关于接收操作 各种通信模式的发送函数各不相同,但接收函数均为MPI_Recv() MPI_Recv()是一个阻塞操作,即:仅当接收端进程缓冲区中收到了期待的数据才返回 如果接收操作早于发送操作启动,则接收操作将等待直到接到数据后返回,3.2 点到点通信,六、各种通信模式小结 发送/接收操作将配对 -存在死锁可能性 下例中,消息tag1发送后将缓存在进程1,直到进程1执行第2个接收操作;而第2个发送操作将与

16、进程1的第1个接收操作形成同步关于缓冲使用 缓冲模式下,由用户程序指定缓冲区,如缓冲区满,则会导致错误 标准模式下,由MPI环境提供缓冲区,缓冲区不足时,发送进程将等待直到接收操作启动(相当于同步模式),七、非阻塞式通信 MPI中消息传递时延较大,对程序性能影响很大 将通信和计算重叠可以在很大程度上隐藏通信时延 方法一:多线程 线程通信等待期间,处理器可切换至其他线程 方法二:非阻塞式通信 进程通信期间不阻塞,而是进行其他计算,3.2 点到点通信,七、非阻塞式通信 MPI_Isend()和MPI_Irecv()是标准发送/接收的非阻塞式版本 I:Immediately 函数将在本地操作完成前返回 非阻塞通信也可使用4种模式 标准、缓冲、就绪和同步 非阻塞式通信的使用方法 进程调用非阻塞式发送/接收函数,函数将立即返回 进程可进行计算或其他操作,并调用MPI_Wait()、MPI_Test()等结束测试函数检查发送/接收操作是否完成 注意:对于非阻塞式标准发送MPI_Isend(),在发送操作完成前,不应修改缓冲区中数据,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

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