资源预览内容
第1页 / 共126页
第2页 / 共126页
第3页 / 共126页
第4页 / 共126页
第5页 / 共126页
第6页 / 共126页
第7页 / 共126页
第8页 / 共126页
第9页 / 共126页
第10页 / 共126页
亲,该文档总共126页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第十四章 分布存储系统并行编程分布存储系统并行编程 14.1 基于消息传递的编程 14.2 MPI并行编程 14.3 PVM并行编程 14.4 基于数据并行的并行编程 14.5 HPF并行编程基于消息传递的并行编程1 消息传递库 2 消息传递方式1 消息传递库(Message-Passing Libraries)建议: 一个终端用户在开发新的消息传递应用时使用MPI或PVM. 原因是: MPI和PVM都是公用软件, 易于得到 多数厂家支持 CMMD: 是一个用于Thinking Machines CM-5系统的消息传递库, 其特点是 基于主动消息(Active Message)机制在用户空间实现通信以减少通信延迟; Express: 是一个支持点到点和群集通信以及并行I/O的程序设计环境; Nx: 是为Intel MPP(例如, Hypercubes和 Paragon)开发的微核系统. 现在已 由用于Intel/Sandia ASCI TFLOPS 系统中的新的微核系统PUMA代替. Fortran-M: 是对Fortran77的扩展, 它在设计上既支持共享存储也支持消息 传递, 但当前只实现了对消息传递的支持. 该语言提供了许多机制用于支持 开发行为确定、模块化的并行程序. P4(Parallel Programs for Parallel Processors) : 是一组宏和子程序, 用于支持 共享存储和消息传递系统中的程序设计, 它可以移植到许多体系结构上. 其它的消息传递软件系统还有Vertex, PARMACS, Zipcode, UNIFY和PICL 等. 1 消息传递库(Message-Passing Libraries)在当前所有的消息传递软件中, 最重要最流行的是MPI和 PVM, 它们能运行在所有的并行平台上, 包括SMP和PVP. 二者已经在Windows NT 和Windows 95这样的非Unix平 台上实现. 程序设计语言支持C, Fortran和Java. 在国产的三大并行机系列神威、银河和曙光上都实现了 对MPI和PVM和支持.1 消息传递库(Message-Passing Libraries)1.1 MPI(Message Passing Interface) 简介1 消息传递库(Message-Passing Libraries)目标: 是提供一个实际可用的、可移植的、高效的和灵活的 消息传递接口标准. MPI以语言独立的形式来定义这个接口库 , 并提供了与C、Fortran和Java语言的绑定. 这个定义不包 含任何专用于某个特别的制造商、操作系统或硬件的特性. 由于这个原因, MPI在并行计算界被广泛地接受.MPI的实现 建立在厂家专用的环境之上 IBM SP2的POE/MPL, Intel Paragon的OSF/Nx 公共的MPI环境: CHIMP Edinburg 大学 LAN(Local Area Multicomputer) Ohio超级计算中心 MPICH Argonne国家实验室与Mississippi州立大学MPICH是MPI在各种机器上的可移植实现,可以安装在几乎所有的平台上: PC 工作站 SMP MPP COW1 消息传递库(Message-Passing Libraries)1.2 PVM(Parallel Virtual Machine) 简介开发时间: 始于1989年 开发单位: 美国Tennessee大学、Oak Ridge国家实验室和 Emory大学联合研制 特点: 具有较好的适应性、可扩展性、可移植性和易使用性等 特点, 源代码可以免费获取, 现已被用户广泛采纳. 现状: 目前对它的研究和开发工作仍在各大学和研究机构进行. 尽管已经有越来越多的人开始使用MPI, 但PVM仍然是做并行 处理最流行的软件之一. 随着它的不断流行, 已经被移植到 PVP, SMP, MPP, 工作站和PC组成的机群系统. 1 消息传递库(Message-Passing Libraries)PVM和MPI间的主要差别: (1)PVM是一个自包含的系统, 而MPI不是. MPI依赖于支持 它的平台提供对进程的管理和I/O功能. 而PVM本身就包含 这些功能. (2) MPI对消息传递提供了更强大的支持. (3) PVM不是一个标准, 这就意味着PVM可以更方便、更频 繁地进行版本更新. MPI和PVM在功能上现在正趋于相互包含. 例如, MPI-2增 加了进程管理功能, 而现在的PVM也提供了更多的群集通 信函数. 与MPI不同的是, 1 消息传递库(Message-Passing Libraries)1.2 Message-Passing Modes关于通信模式, 用户需要理解的有三个方面: 共有多少个进程? 进程间如何同步? 如何管理通信缓冲区?现在的消息传递系统多使用三种通信模式: 同步的消息传递 (Synchronous Message Passing) 阻塞的消息传递 (Blocking Message Passing) 非阻塞的消息传递 (Nonblocking Message Passing) 2 消息传递方式发送例程接收例程进程 Q接收返回点开始接收点R_syn1S_Block2S_Non_Block3进程 P开始发送点发送返回点S_syn1R_block2R_Non_Block3系统进程等待发送点2 消息传递方式Process P:M=10; L1: send M to Q; L2: M=20;goto L1;Process Q:L1: S= -100; L2: receive S from P;X=S+1;例2.1 消息传递中的发送和接收缓冲M 称为发送消息缓冲 (send message buffer, or send buffer)S 称为接收消息缓冲 (receive message buffer, or receive buffer)2 消息传递方式三种通信模式的比较2 消息传递方式Process P:M=10; send M to Q; do some computation which does not change M; wait for M to be sent; M=20;Process Q:S=-100; receive S from P; do some computation which does not use S; wait for S to be received; X=S+1;例2.2 非阻塞模式下, 强制进程等待直到安全时再继续执行非阻塞模式本身也会带来一些额外开销: 作为临时缓冲区用的内存空间 分配缓冲区的操作 将消息拷入和拷出临时缓冲区 执行一个额外的检测和等待函数2 消息传递方式消息传递的特点: 在消息传递模型中, 一个并行应用由一组进程组成, 每个进程的代码是本 地的, 只能访问私有数据, 进程之间通过传递消息实现数据共享和进 程同步. 优点: 用户可以对并行性的开发、数据分布和通信实现完全控制. 缺点: (1) 要求程序员显式地处理通信问题, 如, 消息传递调用的位置, 数据移 动, 数据复制, 数据操作, 数据的一致性等等. (2) 对大多数科学计算程序来说, 消息传递模型的真正困难还在于显式的 域分解, 也就是说, 将对相应数据的操作限定在指定的处理器上进行, 在每个处理器上只能看见整个分布数据的一部分. (3) 无法以渐进的方式、通过逐步将串行代码转换成并行代码而开发出来. 大量的散布在程序各处的域分解要求整个程序由串行到并行的转换一 次性实现, 而共享存储方法允许在现有的串行代码中插入并行说明从 而实现逐步转换.与之相比, 这是消息传递的一个明显的缺点. 2 消息传递方式分布存储系统并行编程 14.1 基于消息传递的编程 14.2 MPI并行编程 14.3 PVM并行编程 14.4 基于数据并行的并行编程 14.5 HPF并行编程MPI并行编程1 MPI中的消息2 MPI中的消息信封3 MPI中的四种通信模式4 点对点的通信5 群集通信6 MPI扩展7 例子:计算Pi的MPI程序1 MPI中的消息第五讲#include “mpi.h“ int foo(i) int i; . main(argc, argv) int argc; char* argv int i, tmp, sum=0, group_size, my_rank, N; MPI_Init( MPI_Comm_size(MPI_COMM_WORLD, MPI_Comm_rank(MPI_COMM_WORLD, if (my_rank=0) printf(“Enter N:“); scanf(“%d“, for (i=1;i #include #include long n, /*number of slices */i; /* slice counter */ double sum, /* running sum */pi, /* approximate value of pi */mypi,x, /* independent var. */h; /* base of slice */ int group_size,my_rank;main(argc,argv) int argc;char* argv; int group_size,my_rank; MPI_Status status; MPI_Init( MPI_Comm_rank( MPI_COMM_WORLD, MPI_Comm_size( MPI_COMM_WORLD, n=2000; /* Broadcast n to all other nodes */ MPI_Bcast( h = 1.0/(double) n; sum = 0.0; for (i = my_rank+1; i 它指示主机当前处于PVM控制台模式. pvmd 的启动方法 master pvmd: 必须手工启动 slave pvmds: 只能由master pvmd依次启动master pvmd启动slave pvmd的方法 用rsh, rexec(), 或其它方法启动一个slave1 并行虚拟机的构造主要的PVM命令1 并行虚拟机的构造启动文件: host_file 并行虚拟机的硬件配置在主机表(host table)文件中说明 . 它常驻在虚拟机的每台主机上. 主机表中有一项叫做主机 描述子(host descriptor), 对应于虚拟机中的每台主机. 主机 描述子中保存有主机配置信息, 以及packet queues 和通信信 息缓冲. 最初, 主机表只有master host一项. 当一个新的slave加 入到虚拟机后, master host的主机表被修改, 添加一个与新 加入的slave对应的新项. 然后, 修改后的主机表的信息被播 送到整个虚拟机, 包括新加入的slave hosts. 这样, 虚拟机中 所有主机的主机表被同步, 并且保持一致, 除非哪台机器不 转了或网络失效. 1 并行虚拟机的构造虚拟机的动态配置用户可以调用PVM库函数来动态配置虚
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号