并行程序设计导论课件.ppt
《并行程序设计导论课件.ppt》由会员分享,可在线阅读,更多相关《并行程序设计导论课件.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Message Passing ProgrammingLi XiSchool of Information Science&EngineeringCentral South University消息传递编程消息传递编程 主要介绍采用主要介绍采用2个非专利的、广为接受的消息传递个非专利的、广为接受的消息传递系统系统 PVM和和MPI的设计思想和功能特点,以及借助其的设计思想和功能特点,以及借助其实现并行处理的一般过程。实现并行处理的一般过程。MPI:Massage Passing Interface PVM:Parallel Virtual Machine (http:/lib.org/pvm3
2、/index.html)消息传递范例消息传递范例 介绍开发分布式并行性的消息传递方法所具介绍开发分布式并行性的消息传递方法所具有的特征。有的特征。消息传递软件包消息传递软件包 研究并推出的基于消息传递的软件包较多,研究并推出的基于消息传递的软件包较多,其中包括专有软件和非专利软件。目前,大多数其中包括专有软件和非专利软件。目前,大多数并行计算机供应商已将最流行的并行计算机供应商已将最流行的PVM和和MPI作为作为对消息传递的自然支持。对消息传递的自然支持。PVM and MPIMPI:是由是由MPI论坛开发的有关函数库的标准论坛开发的有关函数库的标准规范,通过提供一个独立于平台的消息传递规范,
3、通过提供一个独立于平台的消息传递库达到其可移植性的目的。库达到其可移植性的目的。PVM:是一个软件系统,主要功能是将网络上是一个软件系统,主要功能是将网络上各种各种同构同构或或异构异构的计算机利用起来,给用户的计算机利用起来,给用户提供一个统一的、灵活的并行计算资源。已提供一个统一的、灵活的并行计算资源。已被移植到被移植到SMP、PVP、MPP、COW和和PC上。上。两者都提供与两者都提供与Fortran和和C的捆绑。的捆绑。Massage-Passing Modes通信:通信:表示消息传递系统中所有交互操作,包括:表示消息传递系统中所有交互操作,包括:通信通信_Communication 同
4、步同步_Synchronization 聚集聚集_Aggregation 一般地,通信在同组进程间进行,通信进一般地,通信在同组进程间进行,通信进程需要了解的内容有:程需要了解的内容有:参与通信的进程数;参与通信的进程数;采用何种方式保证进程间的同步;采用何种方式保证进程间的同步;如何管理通信缓冲区;如何管理通信缓冲区;例例:消息传递中的发送和接收缓冲区消息传递中的发送和接收缓冲区进程P M=10;L1:send M to Q;L2:M=20;goto L1;进程Q S=-100;L1:receive S from P;L2:X=S+1;发送缓冲区发送缓冲区接收缓冲区接收缓冲区说明:说明:同步
5、和锁定方式中,代码执行后同步和锁定方式中,代码执行后X的值为的值为11;非锁定方式中,代码执行后非锁定方式中,代码执行后X的值的值可能可能为为11、21或或-99。消息传递系统中的通信方式消息传递系统中的通信方式同步消息传递:同步消息传递:Synchronous Message Passing 发送发送/接收进程必须等待发送接收进程必须等待发送/接收后才能返回。接收后才能返回。锁定发送锁定发送/接收:接收:Blocking Send/Receive 锁定发送时,发送进程只有等待消息发送返回后才锁定发送时,发送进程只有等待消息发送返回后才能继续。需要能继续。需要临时缓冲区临时缓冲区暂存消息。暂存
6、消息。非锁定发送非锁定发送/接收:接收:NonBlocking Send/Receive 非锁定发送时,发送进程通知系统消息非锁定发送时,发送进程通知系统消息M已经发出已经发出后即可返回,此时消息后即可返回,此时消息M并不一定已经离开并不一定已经离开M,因此重,因此重写写M是不安全的。可能需要一个是不安全的。可能需要一个临时缓冲区临时缓冲区三种通信方式比较三种通信方式比较三种通信方式比较三种通信方式比较(续续)同步方式:同步方式:优点:优点:清晰、可靠;无需系统临时缓冲区;清晰、可靠;无需系统临时缓冲区;缺点:缺点:发送方和接收方互为等待,导致周期浪费。发送方和接收方互为等待,导致周期浪费。异
7、步方式:异步方式:该方式几乎存在于所有消息传递系统中。该方式几乎存在于所有消息传递系统中。优点:优点:无周期浪费(等待时间少);无周期浪费(等待时间少);缺点:缺点:需设缓冲,且无法知道缓冲区应设大小;需设缓冲,且无法知道缓冲区应设大小;导致结果的不确定性;导致结果的不确定性;为正确接收,需附加状态检测或等待函数;为正确接收,需附加状态检测或等待函数;需要管理缓冲区,导致系统消耗需要管理缓冲区,导致系统消耗(Overhead)。采用何种算法、机制,如何更有效地采用何种算法、机制,如何更有效地隐藏通信时延隐藏通信时延,是异步方式是异步方式研究内容之一研究内容之一。下页例下页例通过等待函数保证消息
8、安全接收通过等待函数保证消息安全接收进程P M=10;L1:send M to Q;某些不改变Q的计算;Wait for M to be sent;L2:M=20;goto L1;进程Q S=-100;Receive S from P;某些不使用S的计算;Wait for S to be received;X=S+1;Massage Passing Interface MPI MPI是消息传递函数库的标准规范,是消息传递函数库的标准规范,9494年公年公布,布,9797年推出年推出MPI-2MPI-2的修订版,增加了动态进程、的修订版,增加了动态进程、非阻塞消息等功能。非阻塞消息等功能。MPI
9、 MPI已经在已经在WindowsWindows、UnixUnix及主要的并行计及主要的并行计算机上得到实现,所以,对于用标准算机上得到实现,所以,对于用标准C/FortranC/Fortran编程、使用编程、使用MPIMPI进行消息传递的程序,可不加改进行消息传递的程序,可不加改变地在变地在PCPC、工作站、工作站网络、工作站、工作站网络、MPPMPP和任何和任何OSOS上执行。上执行。MPI功能设计基础功能设计基础MPI功能设计,基于功能设计,基于4个正交的概念:个正交的概念:Massage Data Types (消息数据类型)(消息数据类型)Communicator (通信子)(通信子
10、)Communication Operation(通信操作)(通信操作)Virtual Topology (虚拟拓扑)(虚拟拓扑)其中,前其中,前3个是最基本、最常用的,主要讨论。个是最基本、最常用的,主要讨论。MPI提供了提供了200多个多个函数,由于正交性设计,函数,由于正交性设计,使其较使其较PVM更容易学习、使用。更容易学习、使用。MPI并行性讨论并行性讨论 MPI MPI假设进程是静态的,即所有并行进程在假设进程是静态的,即所有并行进程在装入时被创建,直到程序结束。装入时被创建,直到程序结束。MPI MPI设置一个由所有进程组成的缺省进程组,设置一个由所有进程组成的缺省进程组,组标识
11、为组标识为MPI_COMM_WORLDMPI_COMM_WORLD。MPI MPI由由6 6个函数构成编写完整消息传递程序的个函数构成编写完整消息传递程序的最小集:最小集:MPI_Comm_Size;MPI_Comm_rank;MPI_Comm_Size;MPI_Comm_rank;MPI_Send;MPI_Recv;MPI_Send;MPI_Recv;MPI_Init;MPI_Finalize;MPI_Init;MPI_Finalize;缺省组大小缺省组大小每个进程秩每个进程秩终止终止MPI环境环境MPI消息传递程序示例消息传递程序示例例:一个例:一个SPMDSPMD类型的计算类型的计算fo
12、o(i)foo(i)的消息传递程序。的消息传递程序。foo(i)foo(i)说明:说明:设共有设共有N N个整数,个整数,foo(i)foo(i)完成完成i*ii*i操作,最后操作,最后汇总;汇总;假设有假设有n n个结点并行处理,则一般处理方案为:个结点并行处理,则一般处理方案为:n=3n=3时时 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9.N.N进程进程0 0处理:处理:foo(0)+foo(n)+foo(2*n)+.foo(0)+foo(n)+foo(2*n)+.进程进程k(0kn)k(0kn)处理:处理:foo(k)+foo(n+k)+foo(2*n
13、+k)+.foo(k)+foo(n+k)+foo(2*n+k)+.各进程处理结果发送到各进程处理结果发送到0 0进程,由其完成最后汇总进程,由其完成最后汇总。SPMD类型的类型的MPI程序程序 myprog.c#include“mpi.h”int foo int i;main(argc,argv)int argc;char*argv;int i,tmp,sum=0,group_size,my_rank,N;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&group_size);MPI_Comm_rank(MPI_COMM_WORLD,&m
14、y_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+foo(i);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 MPI_Recv(&N
15、,1,MPI_INT,0,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();消息标志消息标志目的进程目的进程结构指针结构指针源进程源进程程序程序myprog.c执行说明执行说明1 用并行编译器用并行编译器mpicc编译;编译;mpicc myprog.c-o myprog2 将可执行文件装到将可执行文件装到n个结点上运行;个结点上运行;MPIRUN-np n myprog3 每个结点
16、执行相同的程序代码,构成每个结点执行相同的程序代码,构成SPMD方式。方式。MPI Messages MPI中进程的地址空间相互分离,一中进程的地址空间相互分离,一个进程不能访问另一个地址空间中的数个进程不能访问另一个地址空间中的数据,所以通信采用消息传递方式完成。据,所以通信采用消息传递方式完成。消息一般由消息头消息一般由消息头(Head)及消息正及消息正文文(Text)组成。组成。MPI中消息发送中消息发送/接收语句格式接收语句格式 MPI_Send(address,count,datatype,destination,tag,communicator)MPI_Recv(address,c
17、ount,datatype,source,tag,communicator,status)例如:将数组例如:将数组double A100发送发送 MPI_Send(A,100,MPI_DOUBLE,DEST,.);MPI_Recv(B,100,MPI_DOUBLE,source,.);发送发送A2,A3:MPI_Send(A+16,2,MPI_DOUBLE,DEST,.)如何发送如何发送A中下标为偶数的元素?中下标为偶数的元素?双精度每项双精度每项8字节字节MPI设置数据类型的原因设置数据类型的原因支持异构计算;支持异构计算;便于从发送缓冲区中非连续、非均匀地取数据。便于从发送缓冲区中非连续、
18、非均匀地取数据。例例:发送不同类型的数据发送不同类型的数据 将字符串将字符串char String1000char String1000的前的前100100个字符从洛杉矶个字符从洛杉矶的一台工作站发送到北京的一台工作站,若用如下格式:的一台工作站发送到北京的一台工作站,若用如下格式:USA:send(String,100,China);China:recv(String,100,USA);两地的字符表示长度不同:两地的字符表示长度不同:1/21/2字节,导致结果不正确。字节,导致结果不正确。改进:改进:USA:MPI_Send(String,100,MPI_CHAR,China);China:
19、MPI_Recv(String,100,MPI_CHAR,USA);MPI_CHARMPI_CHAR在美国在美国/中国分别以中国分别以8/168/16位实现,接收时转换。位实现,接收时转换。类型为类型为MPI_CHAR的数据项数的数据项数MPI附加数据类型附加数据类型 MPI MPI包括包括C/FortranC/Fortran所有基本数据类型,并增加所有基本数据类型,并增加2 2个附加个附加类型:类型:MPI_BYTEMPI_BYTE和和MPI_PACKEDMPI_PACKED。例例:利用附加类型完成利用附加类型完成A100A100中偶数元素发送中偶数元素发送 double A100;MPI_
20、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,dest,.);确定打包缓冲区大小确定打包缓冲区大小缓冲区大小返回值缓冲区大小返回值打包项打包项计数计数MPI派生数据类型派生数据类型例例:发送一个数
21、组中的所有偶数项元素发送一个数组中的所有偶数项元素 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,);说明:说明:MPI_Type_vector (count,blocklength,stride,oldtype,&newtype)派生数据项数派生数据项数按按oldtype的每块长度的每块长度块间跨度块间跨度MPI数据类型数据类型
22、Massage Buffer 消息缓冲区由系统或程序员说明,用于暂存收发消息缓冲区由系统或程序员说明,用于暂存收发的消息数据值。消息缓冲可以是如下的消息数据值。消息缓冲可以是如下3 3种之一:种之一:用户说明的一个消息变量地址;用户说明的一个消息变量地址;系统创建管理的一个暂存消息区;系统创建管理的一个暂存消息区;用户创建管理的一个暂存消息区;用户创建管理的一个暂存消息区;3种缓冲区类型示意种缓冲区类型示意 进程进程P P 进程进程Q Qdouble A100;double B32;MPI_Send(A,32,MPI_DOUBLE,Q,.);MPI_Recv(B,32,MPI_DOUBLE,P
23、,);进程进程PAMM进程进程QB进程进程QB进程进程PAMMS进程进程QB进程进程PAMMT优点:优点:消息在消息在2进程间直接同步传递;进程间直接同步传递;缺点:缺点:接收进程缓冲区容量应足够大;接收进程缓冲区容量应足够大;优点:优点:支持异步通信;支持异步通信;缺点:缺点:使用缓冲区增加系统消耗;使用缓冲区增加系统消耗;若系统缓冲若系统缓冲S太大,可能异常;太大,可能异常;缺点:缺点:若系统不能容纳缓冲区若系统不能容纳缓冲区T,将,将产生错误消息通知应用程序,产生错误消息通知应用程序,并体面终止。并体面终止。Message Envelope in MPI 消息信封表示一个接收者的信息,消
24、息信封表示一个接收者的信息,MPI中由中由3部分组成:部分组成:destination、tag和和communicator。消息标志消息标志tag:整数,标识不同类型消息并整数,标识不同类型消息并限定消息接收。设置原因:限定消息接收。设置原因:避免消息后发先至,造成接收错误;避免消息后发先至,造成接收错误;服务进程通过判定消息标志,可完成相应服务进程通过判定消息标志,可完成相应处理。处理。消息标志使用示例消息标志使用示例Process P:send(request1,32,Q,tag1);Process R:send(request2,32,Q,tag2);Process Q:while(tr
25、ue)recv(received_request,Any_Process,32,Any_tag,Status);if(Status.Tag=tag1)process received_request in one way;if(Status.Tag=tag2)process received_request in another way;通配进程通配进程ID通配标志通配标志MPI_Statustypedef struct MPI_Status int count;int cancelled;int MPI_SOURCE;int MPI_TAG;int MPI_ERROR;MPI_Status;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 并行 程序设计 导论 课件
限制150内