分布存储系统并行编程课件.ppt

上传人(卖家):晟晟文业 文档编号:5182930 上传时间:2023-02-16 格式:PPT 页数:126 大小:607.04KB
下载 相关 举报
分布存储系统并行编程课件.ppt_第1页
第1页 / 共126页
分布存储系统并行编程课件.ppt_第2页
第2页 / 共126页
分布存储系统并行编程课件.ppt_第3页
第3页 / 共126页
分布存储系统并行编程课件.ppt_第4页
第4页 / 共126页
分布存储系统并行编程课件.ppt_第5页
第5页 / 共126页
点击查看更多>>
资源描述

1、整理ppt第十四章 分布存储系统并行编程整理ppt分布存储系统并行编程整理ppt基于消息传递的并行编程基于消息传递的并行编程1 消息传递库消息传递库2 消息传递方式消息传递方式整理ppt1 消息传递库消息传递库(Message-Passing Libraries)表 1.1 一些最流行的消息传递软件的例子NameOriginal CreatorDistinct FeaturesCMMDThinking MachinesUse Active Messages for low latencyExpressParasoftCollective communication and I/OFortran

2、-MArgonne National LabModularity and DeterminacyMPIMPI ForumA widely adopted standardNXIntelOriginated from the Intel hypercube MPPsP4Argonne National LabIntegrate shared memory and message passingPARMACSANL/GMDMainly used in EuropePVMOak Ridge National LabA widely used,stand-alone systemUNIFYMissis

3、sippi StateA system allowing both MPI and PVM callsZipcodeLivemore National LabContributed to the context concept建议建议:一个终端用户在开发新的消息传递应用时使用一个终端用户在开发新的消息传递应用时使用MPIMPI或或PVM.PVM.原因是原因是:MPI MPI和和PVMPVM都是都是公用软件公用软件,易于得到易于得到 多数厂家支持多数厂家支持整理pptCMMD:是一个用于Thinking Machines CM-5系统的消息传递库,其特点是基于主动消息(Active Messag

4、e)机制在用户空间实现通信以减少通信延迟;Express:是一个支持点到点和群集通信以及并行I/O的程序设计环境;Nx:是为Intel MPP(例如,Hypercubes和 Paragon)开发的微核系统.现在已由用于Intel/Sandia ASCI TFLOPS 系统中的新的微核系统PUMA代替.Fortran-M:是对Fortran77的扩展,它在设计上既支持共享存储也支持消息传递,但当前只实现了对消息传递的支持.该语言提供了许多机制用于支持开发行为确定、模块化的并行程序.P4(Parallel Programs for Parallel Processors):是一组宏和子程序,用于支

5、持共享存储和消息传递系统中的程序设计,它可以移植到许多体系结构上.其它的消息传递软件系统还有Vertex,PARMACS,Zipcode,UNIFY和PICL等.1 消息传递库消息传递库(Message-Passing Libraries)整理ppt在当前所有的消息传递软件中在当前所有的消息传递软件中,最重要最流行的是最重要最流行的是MPIMPI和和PVM,PVM,它们能运行在所有的并行平台上它们能运行在所有的并行平台上,包括包括SMPSMP和和PVP.PVP.二者二者已经在已经在Windows NT 和和Windows 95这样的非这样的非Unix平平台上实现台上实现.程序设计语言支持程序设

6、计语言支持C,Fortran和和Java.在国产的三大并行机系列神威、银河和曙光上都实现了在国产的三大并行机系列神威、银河和曙光上都实现了对对MPIMPI和和PVMPVM和支持和支持.1 消息传递库消息传递库(Message-Passing Libraries)整理ppt1.1 MPI1.1 MPI(Message Passing Interface)简介简介1 消息传递库消息传递库(Message-Passing Libraries)1992年4月 组建了一个制定消息传递接口标准的工作组 1992年10月 初稿形成,主要定义了点对点通信接口 1993年1月 第一届MPI会议在Dallas举行

7、 1993年2月 公布了MPI-1修定版本 1993年11月 MPI的草稿和概述发表在Supercomputing93的会议论文集中 1994年5月 MPI标准正式发布 1994年7月 发布了MPI标准的勘误表 1997年 MPI论坛发布了一个修订的标准,叫做MPI-2,同时,原来的MPI更名为MPI-1 目标目标:是提供一个实际可用的、可移植的、高效的和灵活的是提供一个实际可用的、可移植的、高效的和灵活的消息传递接口标准消息传递接口标准.MPI.MPI以语言独立的形式来定义这个接口库以语言独立的形式来定义这个接口库,并提供了与并提供了与C C、FortranFortran和和JavaJava

8、语言的绑定语言的绑定.这个定义不包含这个定义不包含任何专用于某个特别的制造商、操作系统或硬件的特性任何专用于某个特别的制造商、操作系统或硬件的特性.由由于这个原因于这个原因,MPI,MPI在并行计算界被广泛地接受在并行计算界被广泛地接受.整理pptMPI的实现的实现 建立在厂家专用的环境之上建立在厂家专用的环境之上IBM SP2的的POE/MPL,Intel Paragon的的OSF/Nx 公共的公共的MPI环境环境:CHIMP Edinburg 大学大学LAN(Local Area Multicomputer)Ohio超级计算中心超级计算中心 MPICH Argonne国家实验室与国家实验室

9、与Mississippi州立大学州立大学 MPICH是是MPI在各种机器上的可移植实现在各种机器上的可移植实现,可以安装在几乎所有的平台上可以安装在几乎所有的平台上:PC 工作站工作站 SMP MPP COW1 消息传递库消息传递库(Message-Passing Libraries)整理ppt1.2 PVM(Parallel Virtual Machine)简介简介开发时间开发时间:始于始于1989年年开发单位开发单位:美国美国Tennessee大学、大学、Oak Ridge国家实验室和国家实验室和Emory大学联合研制大学联合研制特点特点:具有较好的适应性、可扩展性、可移植性和易使用性等具

10、有较好的适应性、可扩展性、可移植性和易使用性等特点特点,源代码可以免费获取源代码可以免费获取,现已被用户广泛采纳现已被用户广泛采纳.现状现状:目前对它的研究和开发工作仍在各大学和研究机构进行目前对它的研究和开发工作仍在各大学和研究机构进行.尽管已经有越来越多的人开始使用尽管已经有越来越多的人开始使用MPI,但但PVM仍然是做并行仍然是做并行处理最流行的软件之一处理最流行的软件之一.随着它的不断流行随着它的不断流行,已经被移植到已经被移植到PVP,SMP,MPP,工作站和工作站和PC组成的机群系统组成的机群系统.1 消息传递库消息传递库(Message-Passing Libraries)整理p

11、ptPVMPVM和和MPIMPI间的主要差别间的主要差别:(1)PVM(1)PVM是一个自包含的系统是一个自包含的系统,而而MPIMPI不是不是.MPI.MPI依赖于支持依赖于支持它的平台提供对进程的管理和它的平台提供对进程的管理和I/OI/O功能功能.而而PVMPVM本身就包含本身就包含这些功能这些功能.(2)MPI(2)MPI对消息传递提供了更强大的支持对消息传递提供了更强大的支持.(3)PVM(3)PVM不是一个标准不是一个标准,这就意味着这就意味着PVMPVM可以更方便、更频可以更方便、更频繁地进行版本更新繁地进行版本更新.MPIMPI和和PVMPVM在功能上现在正趋于相互包含在功能上

12、现在正趋于相互包含.例如例如,MPI-2,MPI-2增增加了进程管理功能加了进程管理功能,而现在的而现在的PVMPVM也提供了更多的群集通也提供了更多的群集通信函数信函数.与与MPIMPI不同的是不同的是,1 消息传递库消息传递库(Message-Passing Libraries)整理ppt1.2 Message-Passing Modes关于通信模式关于通信模式,用户需要理解的有三个方面用户需要理解的有三个方面:共有多少个进程共有多少个进程?进程间如何同步进程间如何同步?如何管理通信缓冲区如何管理通信缓冲区?现在的消息传递系统多使用三种通信模式现在的消息传递系统多使用三种通信模式:同步的消

13、息传递同步的消息传递(Synchronous Message Passing)阻塞的消息传递阻塞的消息传递(Blocking Message Passing)非阻塞的消息传递非阻塞的消息传递(Nonblocking Message Passing)2 消息传递方式消息传递方式整理ppt发送例程接收例程进程 Q接收返回点开始接收点R_syn1S_Block2S_Non_Block3进程 P开始发送点发送返回点S_syn1R_block2R_Non_Block3系统进程等待发送点2 消息传递方式消息传递方式整理pptProcess P:M=10;L1:send M to Q;L2:M=20;got

14、o L1;Process Q:L1:S=-100;L2:receive S from P;X=S+1;例例2.1 2.1 消息传递中的发送和接收缓冲消息传递中的发送和接收缓冲M 称为发送消息缓冲称为发送消息缓冲(send message buffer,or send buffer)S 称为接收消息缓冲称为接收消息缓冲(receive message buffer,or receive buffer)2 消息传递方式消息传递方式整理ppt三种通信模式的比较 通通信信事事件件 同同步步通通信信 阻阻塞塞的的通通信信 非非阻阻塞塞的的通通信信 发发送送开开始始的的条条件件 双方都到达了发送和接收点

15、发送方到达发送点 发送方到达发送点 发发送送返返回回意意味味着着 消息已被收到 消息已被发送完 通知完系统某个消息要被发送 接接收收开开始始的的条条件件 双方都到达了发送和接收点 接收方到达发送点 接收方到达发送点 接接收收返返回回意意味味着着 消息已被收到 消息已被收到 通知完系统某个消息要被接收 语语义义 明确 二者之间 需做错误探测 是是 否否 需需 要要 系系 统统 提提 供供临临时时的的消消息息缓缓冲冲区区 不需要 需要 需要 状状态态检检查查 不需要 不需要 需要 等等待待的的时时间间开开销销 最高 二者之间 最低 通通信信与与计计算算、通通信信与与通通信信的的重重迭迭 不重迭 重

16、迭 重迭 X X 11 11 11,21,-99 2 消息传递方式消息传递方式整理pptProcess 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.22.2 非阻塞模式下非阻塞模式下,强制进程等待直到安全时再继续执行强制进程等待直到安全时再继

17、续执行非阻塞模式本身也会带来一些额外开销非阻塞模式本身也会带来一些额外开销:作为临时缓冲区用的内存空间作为临时缓冲区用的内存空间 分配缓冲区的操作分配缓冲区的操作 将消息拷入和拷出临时缓冲区将消息拷入和拷出临时缓冲区 执行一个额外的检测和等待函数执行一个额外的检测和等待函数2 消息传递方式消息传递方式整理ppt消息传递的特点消息传递的特点:在消息传递模型中在消息传递模型中,一个并行应用由一组进程组成一个并行应用由一组进程组成,每个进程的代码是本每个进程的代码是本地的地的,只能访问私有数据只能访问私有数据,进程之间通过传递消息实现数据共享和进进程之间通过传递消息实现数据共享和进程同步程同步.优点

18、优点:用户可以对并行性的开发、数据分布和通信实现完全控制用户可以对并行性的开发、数据分布和通信实现完全控制.缺点缺点:要求程序员显式地处理通信问题要求程序员显式地处理通信问题,如如,消息传递调用的位置消息传递调用的位置,数据移数据移动动,数据复制数据复制,数据操作数据操作,数据的一致性等等数据的一致性等等.对大多数科学计算程序来说对大多数科学计算程序来说,消息传递模型的真正困难还在于显式的消息传递模型的真正困难还在于显式的域分解域分解,也就是说也就是说,将对相应数据的操作限定在指定的处理器上进行将对相应数据的操作限定在指定的处理器上进行,在每个处理器上只能看见整个分布数据的一部分在每个处理器上

19、只能看见整个分布数据的一部分.(1)(1)无法以渐进的方式、通过逐步将串行代码转换成并行代码而开发出来无法以渐进的方式、通过逐步将串行代码转换成并行代码而开发出来.大量的散布在程序各处的域分解要求整个程序由串行到并行的转换一大量的散布在程序各处的域分解要求整个程序由串行到并行的转换一次性实现次性实现,而共享存储方法允许在现有的串行代码中插入并行说明从而共享存储方法允许在现有的串行代码中插入并行说明从而实现逐步转换而实现逐步转换.与之相比与之相比,这是消息传递的一个明显的缺点这是消息传递的一个明显的缺点.2 消息传递方式消息传递方式整理ppt分布存储系统并行编程整理pptMPI并行编程1 MPI

20、中的消息中的消息2 MPI中的消息信封中的消息信封3 MPI中的四种通信模式中的四种通信模式4 点对点的通信点对点的通信5 群集通信群集通信6 MPI扩展扩展7 例子例子:计算计算Pi的的MPI程序程序整理ppt1 MPI中的消息中的消息第五讲#include mpi.hint foo(i)int i;.main(argc,argv)int argc;char*argvint i,tmp,sum=0,group_size,my_rank,N;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&group_size);MPI_Comm_rank

21、(MPI_COMM_WORLD,&my_rank);if(my_rank=0)printf(Enter N:);scanf(%d,&N);for(i=1;igroup_size;i+)MPI_Send(&N,1,MPI_INT,i,i,MPI_COMM_WORLD);for(i=my_rank;iN;i=i+group_size)sum=sum+tmp;for(i=1;igroup_size;i+)MPI_Recv(&tmp,1,MPI_INT,i,i,MPI_COMM_WORLD,&status);sum=sum+tmp;printf(n The result=%d,sum);else MP

22、I_Recv(&N,1,MPI_INT,i,i,MPI_COMM_WORLD,&status);for(i-my_rank;iN;i=i+group_size)sum=sum+foo(i);MPI_Send(&sum,1,MPI_INT,0,i,MPI_COMM_WORLD);MPI_Finalize();例例1.1 一个计算一个计算foo(i)的的MPI SPMD消消息传递程序息传递程序,存放在文件存放在文件“myprog.c”中中初始化初始化MPI环境环境得到缺省的进程组大小得到缺省的进程组大小得到每个进程在组得到每个进程在组中的编号中的编号发送消息发送消息接收消息接收消息终止终止MPIM

23、PI环境环境整理ppt这个程序用以下并行C编译器mpcc来编译:执行下列命令将可执行程序myprog加载到n个节点上:mpcc myprog.c o myprogMPIRUN myprog np n MPI进程是重型的单线进程.它们拥有不同的地址空间.因此,一个进程不能直接访问另一个进程地址空间的中的变量.进程间的通信用消息传递来实现.1 MPI中的消息中的消息整理ppt为什么为什么MPI中的发送和接收操作要做得这么复杂呢中的发送和接收操作要做得这么复杂呢?MPI消息的组成消息的组成:消息的内容消息的内容(即即,信的内容信的内容),称为消息缓冲称为消息缓冲(message buffer)消息的

24、接收者消息的接收者(即即,写在信封上面的东西写在信封上面的东西),称为消息信封称为消息信封(message envelop)MPI_Send(&N,1,MPI_INT,i,i,MPI_COMM_WORLD)MPI_Recv(&N,1,MPI_INT,0,i,MPI_COMM_WORLD,&status)send M to Q;receive S from P 1 MPI中的消息中的消息整理ppt考虑一个用考虑一个用C语言声明的由语言声明的由N个复数组成的数组个复数组成的数组 double A100假定进程假定进程P要把这个数组发送给进程要把这个数组发送给进程Q:例例1 用用MPI发送一个数据数

25、组发送一个数据数组1 MPI中的消息中的消息整理ppt 要发送的消息要发送的消息 可用的消息传递系统可用的消息传递系统 说说 明明(1)发送整个数组A 理论的消息传递理论的消息传递 send A to Q 消息缓冲由数组 A 标识,信封就是进程名 Q.(2)发送数组A的头两个元素,即:A0和A1 商用的消息传递商用的消息传递(假定在一台计算机上,一个双精度数是 64 位,即 8 个字节.)send(A,16,Q,tag)使用的发送例程形式如下:send(address,length,destination,tag)(address,length)定义消息缓冲,(destination,tag)

26、定义消息信封.(3)发送数组 A中所有偶数编号的元素,即:A0,A2,A4,.MPI 的消息传递的消息传递 double A100;MPI_Data_type EvenElements;.MPI_Type_vector (50,1,2,MPI_DOUBLE,&EvenElements);MPI_Type_commit(&EvenElements);MPI_Send(A,1,EvenElements,destination,.);(1)需要定义导出数据类型导出数据类型(2)使用发送例程形式如下:MPI_Send(buffer,count,datatype,destination,tag,comm

27、unicator)(buffer,count,datatype)定义了消息缓冲,(destination,tag,communicator)构成消息信封.1 MPI中的消息中的消息整理pptMPI_Send(&N,1,MPI_INT,i,i,MPI_COMM_WORLD)子程序名消息地址消息长度消息数据类型接收进程标识号消息标签通信子MPI_Send(buffer,count,datatype,destination,tag,communicator)(buffer,count,datatype)消息缓冲消息缓冲(destination,tag,communicator)消息信封消息信封1 M

28、PI中的消息中的消息整理ppt消息数据类型消息数据类型(message data types)通信子通信子(communicators)通信操作通信操作(communication operations)虚拟拓扑虚拟拓扑(virtual topology)MPI的的 四个重要概念四个重要概念:1 MPI中的消息中的消息整理ppt理由有两个理由有两个:一是支持异构计算一是支持异构计算 另一是允许非连续另一是允许非连续,非均匀内存区中的消息非均匀内存区中的消息.异构计算异构计算(heterogeneous computing):指的是在由不同计算机指的是在由不同计算机,如工作站网络如工作站网络,组

29、成的系统上运行应用程序组成的系统上运行应用程序.系统中的每台计算系统中的每台计算机可能由不同的厂商生产、使用不同的处理器和操作系统机可能由不同的厂商生产、使用不同的处理器和操作系统当这些计算机使用不同的数据表示时如何保证互操作性当这些计算机使用不同的数据表示时如何保证互操作性.为什么需要定义消息数据类型为什么需要定义消息数据类型?1 MPI中的消息中的消息整理ppt1 MPI中的消息中的消息整理ppt例例2 发送非连续数据项发送非连续数据项例例 程程 说说 明明 MPI_Pack_size 决决定定需需要要一一个个多多大大的的临临时时缓缓冲冲区区来来存存放放50个个MPI_DOUBLE数数据据

30、项项 malloc(BufferSize)为为缓缓冲冲区区 TempBuffer 动动态态分分配配内内存存 for 循循环环 将将数数组组 A 的的 50 个个偶偶序序数数元元素素打打成成一一个个包包,放放在在 TempBuffer中中 MPI_Pack (A+i*j,1,MPI_DOUBLE,TempBuffe,BufferSize,&Position,comm);第第一一个个参参数数是是被被打打包包的的数数组组元元素素的的地地址址.第第三三个个参参数数是是被被打打包包的的数数组组元元素素的的数数据据类类型型,position 用用于于跟跟踪踪已已经经有有多多少少个个数数据据项项被被打打包包

31、.position的的最最后后值值在在接接下下来来的的MPI_Send中中被被用用作作消消息息计计数数.double A100;MPI_Pack_size(50,MPI_DOUBLE,comm,&BufferSize);TempBuffer=malloc(BufferSize);j=sizeof(MPI_DOUBLE);Position=0;for(i=0;i50;i+)MPI_Pack(A+i*j,1,MPI_DOUBLE,TempBuffer,BufferSize,&Position,comm);MPI_Send(TempBuffer,Position,MPI_PACKED,destina

32、tion,tag,comm);整理ppt在下面的消息中在下面的消息中,假定每个双精度数有假定每个双精度数有8 8字节长字节长,一个字符是一个字符是1 1字节字节,一个一个整型数是整型数是4 4字节字节.序序号号要要发发送送的的消消息息消消息息的的性性质质与与定定义义方方法法(1)由数组 A 的所有元素组成的消息.A 有 100 个元素,每个元素是一个双精度数.这个消息由 100 项组成,每项有一个 double 数据类型,决定了每一项的大小是 8 字节.第 i 项的起始地址是 A+8(i-1).(2)由数组 A 的第 3 和第 4 项组成消息.这个消息由两项 A2和 A3组成.每项是一个 do

33、uble 数据类型,第一项始于 A+16,第二项始于 A+24.这两个消息有两个性质:数据项的存放是连续的;所有的数据项具有相同的数据类型.这类消息可以方便地用三元组(address,count,datatype)来定义.第(1)个消息可以用(A,100,MPI_DOUBLE)来定义.第(2)个消息可以用(A+16,2,MPI_DOUBLE)来定义.(3)由数组 A 的所有偶序数项组成的消息.这个消息由 50 项 A0,A2,A4,.,A98组成.每一项有一个 double 数据类型.第 i 项的起始地址是 A+16(i-1).(4)由数组 A 的第 3 项,后跟一个字符 c,再跟一个整型数

34、k.这个消息由三个不同类型的数据组成.假定它是一个数据结构:struct double A100;char b,c;int j,k;S的一部分.那么第一项 A2的地址是 S+16,第二项 c 的地址是 S+801,第三项 k 的地址是 S+806.第(3)个消息的性质:数据项没有放在一个连续的存储区中.第(4)个消息的性质:数据不仅没有连续存放,而且是混合数据类型.上述简单的方法不能处理第(3)和第(4)个消息.MPI 引入导出数据类型(derived data type)的概念,允许定义可能是由混合数据类型、非连续存放的数据项组成的消息.导出数据类型由用户的应用程序在运行时从基本的数据类型构

35、造.MPI 提供了强大而全面的构造复杂数据类型的子例程.例例 3 在消息传递中发送一个混合数据类型在消息传递中发送一个混合数据类型整理ppt例例4 发送一数组的发送一数组的所有偶序数元素所有偶序数元素例 程 说 明 MPI_Data_type 声明一个新的数据类型 EvenElements.MPI_Type_vector(50,1,2,MPI_DOUBLE,&EvenElements)产生一个导出数据类型 EvenElements,它由 50 个块组成.每个块的组成是一个双精度数,后跟一个 8 字节的间隔,接在后面的是下一块.stride 是两个双精度数的大小,即16 字节.8 字节的间隔用于

36、跳过数组 A 的奇序数元素.MPI_Type_commit(&EvenElements)这个新类型必须在被发送例程使用前交付使用.MPI_Send(A,1,EvenElements,destination,.)注意:EvenElements 的一个元素包含 A 的所有 50 个偶序数元素.因此,MPI_Send 的 count 域值为 1.double A100;MPI_Data_type EvenElements;.MPI_Type_vector(50,1,2,MPI_DOUBLE,&EvenElements);MPI_Type_commit(&EvenElements);MPI_Send(

37、A,1,EvenElements,destination,.);整理ppt说明说明:MPI_Type_vector(count,blocklength,stride,oldtype,&newtype)是构造导出数据类型的MPI例程.导出类型newtype由blocks的拷贝count份组成.每块(blocks)由已有的数据类型oldtype的blocklength份连续项的拷贝组成.stride定义每两个连续的块之间的oldtype元素个数.因此,(stride-blocklength)即是两个块之间的间隔.1 MPI中的消息中的消息整理ppt消息缓冲消息缓冲(message buffer,简

38、称简称buffer),在不同的消息传递使用场合有不同在不同的消息传递使用场合有不同的含义的含义.下面给出一些例子下面给出一些例子:消息缓冲指的是由程序员定义的应用程序的存储区域消息缓冲指的是由程序员定义的应用程序的存储区域,用于存放消用于存放消息的数据值息的数据值.例如例如,在在Send(A,16,Q,tag)中中,缓冲缓冲A是在用户应用程序中声明的变量是在用户应用程序中声明的变量.该缓冲的起始地址在消息例程中被使用该缓冲的起始地址在消息例程中被使用.消息缓冲也可以指由消息传递系统消息缓冲也可以指由消息传递系统(而非用户而非用户)创建和管理的一些内创建和管理的一些内存区存区,它用于发送消息时暂

39、存消息它用于发送消息时暂存消息.这种缓冲不在用户的应用程序中出这种缓冲不在用户的应用程序中出现现,有时被称为系统消息缓冲有时被称为系统消息缓冲(或系统缓冲或系统缓冲).MPI允许第三种可能的定义允许第三种可能的定义.用户可以划出一定大小的内存区用户可以划出一定大小的内存区,作为作为出现在其应用中的任意消息的中间缓冲出现在其应用中的任意消息的中间缓冲.消息缓冲消息缓冲1 MPI中的消息中的消息整理ppt考虑下列代码考虑下列代码,由进程由进程P传送一个存放在数组传送一个存放在数组A中的消息中的消息M,到到进程进程Q的数组的数组B中中.例5 在一对进程间发送消息1 MPI中的消息中的消息整理pptP

40、rocess PAMProcess QBProcess PAMProcess QBSProcess PAMProcess QBT(a)只使用用户缓冲(b)使用系统缓冲S(c)使用了用户级的临时缓冲TProcess P:double A2000000;send(A,32,Q,tag);Process Q:double B32;recv(B,32,P,tag)整理ppt用户如何来定义消息的接收者呢?在下面列出的MPI发送例程中,消息信封由三项组成.MPI_Send(address,count,datatype,destination,tag,communicator)destination 域是一

41、个整数,标识消息的接收进程.消息标签(message tag),也称为消息类型(message type),是程序员用于标识不同类型消息、限制消息接收者的一个整数.2 MPI中的消息信封中的消息信封整理ppt为什么要使用消息标签为什么要使用消息标签(Tag)?Process P:send(A,32,Q)send(B,16,Q)Process Q:recv(X,32,P)recv(Y,16,P)未使用标签 Process P:send(A,32,Q,tag1)send(B,16,Q,tag2)Process Q:recv(X,32,P,tag1)recv(Y,16,P,tag2)使用了标签为了说

42、明为什么要用标签为了说明为什么要用标签,我们我们先来看右面一段没有使用标签先来看右面一段没有使用标签的代码的代码:这段代码打算传送这段代码打算传送A的前的前32个字节进入个字节进入X,传送传送B的前的前16个字个字节进入节进入Y.但是但是,如果消息如果消息B尽管尽管后发送但先到达进程后发送但先到达进程Q,就会被就会被第 一 个第 一 个 r e c v()接 收 在接 收 在 X 中中.使用标签可以避免这个错误使用标签可以避免这个错误.2 MPI中的消息信封中的消息信封整理ppt使用标签的另一个原因使用标签的另一个原因是可以简化对下列情形是可以简化对下列情形的处理的处理.假定有两个客户进程假定

43、有两个客户进程P和和R,每个发送一个服务每个发送一个服务请求消息给服务进程请求消息给服务进程Q.例例6 在消息传递中使用标签在消息传递中使用标签Process P:send(request1,32,Q)Process R:send(request2,32,Q)Process Q:while(true)recv(received_request,32,Any_Process);process received_request;Process P:send(request1,32,Q,tag1)Process R:send(request2,32,Q,tag2)Process Q:while(tr

44、ue)recv(received_request,32,Any_Process,Any_Tag,Status);if(Status.Tag=tag1)process received_request in one way;if(Status.Tag=tag2)process received_request in another way;未使用标签未使用标签使用了标签使用了标签整理ppt通信子通信子(communicator):一个进程组一个进程组(process group)+上下文上下文(context).进程组进程组:是进程的有限有序集是进程的有限有序集.有限意味着有限意味着,在一个进程

45、组中在一个进程组中,进程的个数进程的个数n是有限的是有限的,这里的这里的n称为进程组的大小称为进程组的大小(group size).有序意味着有序意味着n 个进程是按整数个进程是按整数0,1,.,n-1进行编号的进行编号的.一个进程在一个通信子一个进程在一个通信子(组组)中用它的编号进行标识中用它的编号进行标识.组的组的大小和进程编号可以通过调用以下的大小和进程编号可以通过调用以下的MPI例程获得例程获得:MPI_Comm_size(communicator,&group_size)MPI_Comm_rank(communicator,&my_rank)什么是通信子什么是通信子?2 MPI中的

46、消息信封中的消息信封MPI_Send(address,count,datatype,destination,tag,communicator)整理ppt例7通信子的使用2 MPI中的消息信封中的消息信封Process 0:MPI_Send(msg1,count1,MPI_INT,1,tag1,comm1);parallel_fft(.);Process 1:MPI_Recv(msg1,count1,MPI_INT,0,tag1,comm1);parallel_fft(.);if(my_rank=0)MPI_Send(msg2,count1,MPI_INT,1,tag2,comm2);含代码含代

47、码含代码含代码整理ppt存在问题存在问题:不可能保证不可能保证tag1 和和tag2一定取了不同的值一定取了不同的值:标签是由用户定义的整数值标签是由用户定义的整数值,用户可能会出错用户可能会出错.即使用户不会弄错即使用户不会弄错,也难以或不可能保证也难以或不可能保证tag1 和和tag2有不同有不同的值的值.函数函数parallel_fft()可能是由其它用户写的可能是由其它用户写的,或者它是一或者它是一个库例程个库例程.这样这样,用户可能不知道用户可能不知道tag2的值的值.即使用户总能知道即使用户总能知道tag2的值的值,仍然可能出错仍然可能出错.因为因为MPI_Recv 例程可能决定使

48、用一个通配的例程可能决定使用一个通配的(wildcard)标签标签MPI_Any_tag.解决办法解决办法:在在parallel_fft()中的通信使用不同的通信子中的通信使用不同的通信子,它可能它可能包含相同的进程组包含相同的进程组(如如,进程进程0和和1),但每个通信子有系统指定的但每个通信子有系统指定的不同的上下文不同的上下文,与与comm1的不同的不同.因此因此,MPI_Recv 不再有偶然会不再有偶然会从从parallel_fft()的的MPI_Send中接收中接收msg2的危险了的危险了.2 MPI中的消息信封中的消息信封整理ppt考虑如下由考虑如下由10个进程执行的代码个进程执行

49、的代码:例例8 MPI中的新通信子中的新通信子2 MPI中的消息信封中的消息信封MPI_Comm MyWorld,SplitWorld;int my_rank,group_size,Color,Key;MPI_Init(&argc,&argv);MPI_Comm_dup(MPI_COMM_WORLD,&MyWorld);MPI_Comm_rank(MyWorld,&my_rank);MPI_Comm_size(MyWorld,&group_size);Color=my_rank%3;Key=my_rank/3;MPI_Comm_split(MyWorld,Color,Key,&SplitWor

50、ld);整理pptMPI_Comm_dup(MPI_COMM_WORLD,&MyWorld)将创建一个新的通信子将创建一个新的通信子MyWorld,它是包含与原始它是包含与原始的的MPI_COMM_WORLD相同的相同的10个进程的进程组个进程的进程组,但但有不同的上下文有不同的上下文.表表 分分裂裂一一个个通通信信子子 MyWorld Rank in MyWorld 0 1 2 3 4 5 6 7 8 9 Color 0 1 2 0 1 2 0 1 2 0 Key 0 0 0 1 1 1 2 2 2 3 Rank in SplitWorld(Color=0)0 1 2 3 Rank in S

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(分布存储系统并行编程课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|