




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第章章消消息息传传递递编编程程 消息传递模型的特征消息传递模型的特征 多线程化多线程化 由多个进程组成,每个进程有自己的控制线程,可执行不同代码,由多个进程组成,每个进程有自己的控制线程,可执行不同代码,支持控制并行(支持控制并行(MPMD)和数据并行()和数据并行(SPMD)。)。 异步并行性异步并行性 各进程异步执行,使用专用操作如路障、锁定通信等专用操作对各进程异步执行,使用专用操作如路障、锁定通信等专用操作对进程加以同步。进程加以同步。 分离的地址空间分离的地址空间 各进程留驻在不同的地址空间,一个进程中的数据对另一个进程各进程留驻在不同的地址空间,一个进程中的数据对另一个进程是不可
2、见的,进程间通过执行专用的消息传递操作实现交互。是不可见的,进程间通过执行专用的消息传递操作实现交互。 显式交互显式交互 程序员负责解决所有的交互问题,包括数据映射、通信、同步和程序员负责解决所有的交互问题,包括数据映射、通信、同步和聚集。聚集。 显式分配显式分配 工作负载和数据均需用户用显式方法分配给进程。工作负载和数据均需用户用显式方法分配给进程。第第章章消消息息传传递递编编程程 编程工具的选择编程工具的选择 专用并行编程语言专用并行编程语言 如如occam语言语言 对现有语言扩展语法来处理消息传递对现有语言扩展语法来处理消息传递 如如CC+语言、语言、Fortran M语言语言 专门的并
3、行编译器专门的并行编译器 不适用于消息传递机制不适用于消息传递机制 使用现有语言,配备消息传递外部过程库使用现有语言,配备消息传递外部过程库 如如PVM、MPI。必须提供至少两类基本方法:。必须提供至少两类基本方法:1、创建分离进程以使它们能在不同的计算机上运行的方、创建分离进程以使它们能在不同的计算机上运行的方法;法;2、发送和接收消息的方法。、发送和接收消息的方法。第第章章消消息息传传递递编编程程 进程的创建进程的创建 静态创建静态创建所有进程在执行前必须加以指定,系统将执行固所有进程在执行前必须加以指定,系统将执行固定数目的进程。程序员通常需在进程或程序执行定数目的进程。程序员通常需在进
4、程或程序执行之前用命令行显式标识它们。通常有一个主进程之前用命令行显式标识它们。通常有一个主进程(控制进程),其余的为从进程(工作进程)。(控制进程),其余的为从进程(工作进程)。SPMD模型将所有的进程融合到一个程序中,由模型将所有的进程融合到一个程序中,由控制语句选择不同的执行部分。控制语句选择不同的执行部分。SPMD是是MPI所所采用的主要方法采用的主要方法第第章章消消息息传传递递编编程程 进程的创建进程的创建 动态创建动态创建可在其他进程的执行期间创建进程并启动执行它可在其他进程的执行期间创建进程并启动执行它们,也可以撤销它们。在执行过程中进程数可以们,也可以撤销它们。在执行过程中进程
5、数可以发生变化。发生变化。动态进程创建功能更为强大,但在创建进程时也动态进程创建功能更为强大,但在创建进程时也会导致显著的开销。会导致显著的开销。动态进程创建最通用的模型是动态进程创建最通用的模型是MPMD模型。通常模型。通常采用主从方法,由一个处理器执行主程序(主进采用主从方法,由一个处理器执行主程序(主进程),而其余进程在主进程中启动。程),而其余进程在主进程中启动。第第章章消消息息传传递递编编程程 消息传递方式消息传递方式 同步消息传递同步消息传递消息传递过程结束后调用才返回的传递方式。消息传递过程结束后调用才返回的传递方式。同步消息传递不需要消息缓冲存储器。同步消息传递不需要消息缓冲存
6、储器。同步发送和接收操作过程中通常需要某种形式的同步发送和接收操作过程中通常需要某种形式的同步信号。同步信号。P同步发送同步发送M到到Q,等待,等待Q同步从同步从P接收接收S,直到消息,直到消息M已被发送和接收,已被发送和接收,发送和接收调用才返回,这时发送和接收调用才返回,这时X被赋值为被赋值为11。进程进程PM = 10;send M to Q;M = 20;进程进程QS = -100;receive S from P;X = S+1;第第章章消消息息传传递递编编程程使用三路协议的同步使用三路协议的同步send和和recv调用调用send();recv();进程进程1进程进程2请求发送,唤
7、醒进程请求发送,唤醒进程2确认确认开始发送开始发送进程进程2挂起挂起recv在在send之前调用之前调用send();recv();进程进程1进程进程2请求发送,进程请求发送,进程1挂起挂起确认,唤醒进程确认,唤醒进程1开始消息发送过程开始消息发送过程send在在recv之前调用之前调用第第章章消消息息传传递递编编程程 消息传递方式消息传递方式 锁定消息传递锁定消息传递使用消息缓冲区并在本地操作完成后就返回例程使用消息缓冲区并在本地操作完成后就返回例程称为锁定的,或本地锁定的。称为锁定的,或本地锁定的。消息缓冲区用来保存在消息缓冲区用来保存在recv接收之前发送的消接收之前发送的消息。息。发送
8、例程当本地操作结束,消息已经安全上路,发送例程当本地操作结束,消息已经安全上路,就可以继续执行后继工作。就可以继续执行后继工作。接收例程需要消息时,从缓冲区中获得消息。接收例程需要消息时,从缓冲区中获得消息。若消息缓冲区是空的,接收例程进入等待状态。若消息缓冲区是空的,接收例程进入等待状态。当缓冲区已满时,发送例程将进入等待状态。当缓冲区已满时,发送例程将进入等待状态。第第章章消消息息传传递递编编程程进程进程PM = 10;send M to Q;M = 20;进程进程QS = -100;receive S from P;X = S+1;在锁定发送在锁定发送/接收方式下:接收方式下:当当P发送
9、发送M到到Q,消息离开,消息离开M时,调用即返回,此时消息可能还未时,调用即返回,此时消息可能还未到达到达Q,而是暂时缓冲在网络中的某处,或者已经到达接收结点,而是暂时缓冲在网络中的某处,或者已经到达接收结点的缓冲区。的缓冲区。当当Q准备从准备从P接收消息到接收消息到S中时,如果缓冲中已经有消息,不用等中时,如果缓冲中已经有消息,不用等待相应的发送操作,就可执行锁定接收,然而在消息未被接收前,待相应的发送操作,就可执行锁定接收,然而在消息未被接收前,它不能返回。它不能返回。X将被赋值为将被赋值为11。第第章章消消息息传传递递编编程程 消息传递方式消息传递方式 非锁定消息传递非锁定消息传递进程不
10、必等相应接收,立即返回的例程称为非锁进程不必等相应接收,立即返回的例程称为非锁定的。定的。进程执行非锁定发送进程执行非锁定发送/接收,非锁定发送接收,非锁定发送/接收接收在告知系统发送在告知系统发送/接收请求之后,便立即返回,接收请求之后,便立即返回,此时消息并不一定已发出此时消息并不一定已发出/接收。接收。非锁定的消息传递需由程序员保证用于传送的数非锁定的消息传递需由程序员保证用于传送的数据在传送之前不能被后继的语句所修改。据在传送之前不能被后继的语句所修改。第第章章消消息息传传递递编编程程进程进程PM = 10;send M to Q;执行某些不会改变执行某些不会改变Q的计算的计算wait
11、 for M to be sentM = 20;进程进程QS = -100;receive S from P;执行某些不会使用执行某些不会使用S的计算的计算wait for S to be receivedX = S+1;在非锁定发送在非锁定发送/接收方式下:接收方式下:依赖于两个进程的速度,依赖于两个进程的速度,X可能被赋为可能被赋为11、21、-99。进程进程PM = 10;send M to Q;M = 20;进程进程QS = -100;receive S from P;X = S+1;第第章章消消息息传传递递编编程程 消息传递方式消息传递方式 三种方式的比较三种方式的比较同步方式表述清
12、晰且易用,不需设置额外的数据同步方式表述清晰且易用,不需设置额外的数据缓冲区,但可能导致某些周期的浪费。缓冲区,但可能导致某些周期的浪费。在几乎所有的现行消息传递系统中,都使用锁定在几乎所有的现行消息传递系统中,都使用锁定和非锁定方式,且需要足够的临时缓冲区空间。和非锁定方式,且需要足够的临时缓冲区空间。非锁定方式可使等待时间减到最小,但可能需要非锁定方式可使等待时间减到最小,但可能需要利用等待操作进行协调。额外缓冲区和等待操作利用等待操作进行协调。额外缓冲区和等待操作的使用可能抵销所带来的好处。的使用可能抵销所带来的好处。第第章章消消息息传传递递编编程程 消息传递方式消息传递方式 群组消息传
13、递群组消息传递广播广播(broadcast) 向所有与求解问题有关的进程发送相同的信息。向所有与求解问题有关的进程发送相同的信息。散播散播(scatter) 根进程的数据数组中的每个元素分别发送给各个进程。根进程的数据数组中的每个元素分别发送给各个进程。汇集汇集(gather) 一个进程从一组进程中的每一个进程处收集一个数据。一个进程从一组进程中的每一个进程处收集一个数据。汇集是散播的逆操作。汇集是散播的逆操作。 有时汇集操作与一个计算操作组合在一起,对各个值有时汇集操作与一个计算操作组合在一起,对各个值进行汇总,称为归约进行汇总,称为归约(reduce)操作操作第第章章消消息息传传递递编编程
14、程 消息选择消息选择 源进程和目的进程标记源进程和目的进程标记在发送和接收例程中须指定目的进程和源进程。在发送和接收例程中须指定目的进程和源进程。可以使用特殊符号或数字作为通配源地址,即允可以使用特殊符号或数字作为通配源地址,即允许接收来自任何源进程的消息。许接收来自任何源进程的消息。XXXX 收收第第章章消消息息传传递递编编程程 消息选择消息选择 消息标记消息标记(Message Tag)由用户选定的正整数,对不同类型的消息进行区由用户选定的正整数,对不同类型的消息进行区分,附于消息之上,用于消息的选择。分,附于消息之上,用于消息的选择。进程进程P:send(A, double, Q)sen
15、d(B, int, Q)进程进程Q:recv(X, P, double)recv(Y, P, int)进程进程P:send(A, double, Q, tag1)send(B, int, Q, tag2)进程进程Q:recv(X, P, tag1, double)recv(Y, P, tag2, int)XXXX 收收第第章章消消息息传传递递编编程程 MPI简介简介 MPI是由是由MPI论坛开发的一个非专利且独立于平台论坛开发的一个非专利且独立于平台的消息传递函数库的与语言无关的标准规范。的消息传递函数库的与语言无关的标准规范。 MPI已在多种机型、系统和所有主要的并行计算机已在多种机型、系统
16、和所有主要的并行计算机上得到了实现。上得到了实现。 MPI基于四个正交概念(消息数据类型、通信子、基于四个正交概念(消息数据类型、通信子、通信操作和虚拟拓扑)提供了二百多个函数。通信操作和虚拟拓扑)提供了二百多个函数。第第章章消消息息传传递递编编程程 MPI的实现的实现 MPI不是独立、自含式的软件系统,在自然不是独立、自含式的软件系统,在自然并行编程环境之上,由它提供一个消息传递并行编程环境之上,由它提供一个消息传递通信层,由它来确定诸如进程管理和通信层,由它来确定诸如进程管理和I/O的的必要性。必要性。 最流行的非专利实现是最流行的非专利实现是MPICH,是由,是由Argonne国家实验室
17、和密西西比州立大学联国家实验室和密西西比州立大学联合开发。合开发。第第章章消消息息传传递递编编程程 MPI中的并行性问题中的并行性问题 MPI对进程的生成未作说明,留给实现去处理。对进程的生成未作说明,留给实现去处理。 MPI假设进程是静态的,当并行进程装入时,创建假设进程是静态的,当并行进程装入时,创建所有的进程,一直存在直至整个程序终止。所有的进程,一直存在直至整个程序终止。 缺省进程组由所有进程组成,用缺省进程组由所有进程组成,用MPI_COMM_WORLD加以标识。加以标识。 在程序执行中途,不允许创建和终止进程。在程序执行中途,不允许创建和终止进程。第第章章消消息息传传递递编编程程
18、MPI中最基本的六个例程中最基本的六个例程 MPI_Init MPI_Init(&argc, &argv); MPI_Comm_size MPI_Comm_size(communicator, &group_size); MPI_Comm_rank MPI_Comm_rank(communicator, &my_rank); MPI_Send MPI_Send(address,count,datatype,dest,tag,communicator); MPI_Recv MPI_Recv(address,count,datatype,dest,tag,communicator,&status)
19、; MPI_Finalize MPI_Finalize();第第章章消消息息传传递递编编程程 MPI消息消息 MPI进程是单线程进程,有分离的地址空间,进程是单线程进程,有分离的地址空间,进程不能直接访问另一个进程地址空间中的进程不能直接访问另一个进程地址空间中的变量,需通过消息传递实现进程间的通信。变量,需通过消息传递实现进程间的通信。 消息由内容和信封组成。消息由内容和信封组成。MPI_Send(address,count,datatype,dest,tag,communicator);消息内容消息内容消息信封消息信封第第章章消消息息传传递递编编程程 MPI消息消息 数据类型数据类型 预定
20、义的数据类型预定义的数据类型 以以C绑定的预定义数据类型绑定的预定义数据类型 MPI_BYTE, MPI_CHAR, MPI_DOUBLE, MPK_FLOAT, MPI_INT, MPI_LONG, MPI_LONG_DOUBLE, MPI_PACKED, MPI_SHORT, MPI_UNSIGNED_CHAR, MPI_UNSIGNED, MPI_UNSIGNED_LONG, MPI_UNSIGNED_SHORT 预定义数据类型的信息内容结构预定义数据类型的信息内容结构 (address, count, datatype)第第章章消消息息传传递递编编程程 MPI消息消息 数据打包数据打包
21、为了表述由非连续数据项或由混合数据类型的数为了表述由非连续数据项或由混合数据类型的数据项组成的信息,可使用数据打包例程,将数据据项组成的信息,可使用数据打包例程,将数据先打包到一个发送缓冲区中。先打包到一个发送缓冲区中。MPI_Pack_size MPI_Pack_size(n,datatype,communicators,&Buffersize);MPI_Pack MPI_Pack(srcaddress,n,datatype,destaddress,buffersize, &Position,commnicator);第第章章消消息息传传递递编编程程 MPI消息消息 数据打包数据打包doub
22、le A100;MPI_Pack_size(50, MPI_DOUBLE, comm, &BufferSize);TempBuffer = malloc(BufferSize);Position = 0;for (i=0; i100; i+=2)MPI_Pack(A+i,1,MPI_DOUBLE,TempBuffer,BufferSize,&Position,comm);MPI_Send(TempBuffer,Position,MPI_PACKED,destination,tag,comm);第第章章消消息息传传递递编编程程 MPI消息消息 派生数据类型派生数据类型为了表述由非连续数据项或由混
23、合数据类型的数为了表述由非连续数据项或由混合数据类型的数据项组成的信息,可使用派生数据类型,即消息据项组成的信息,可使用派生数据类型,即消息中的每一项都有一个地址和数据类型。中的每一项都有一个地址和数据类型。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,st
24、ride,oldtype,&newtype);第第章章消消息息传传递递编编程程 MPI通信子通信子Communicator 一个通信子是一个进程组加上一个现场。一个通信子是一个进程组加上一个现场。 进程组是进程的有限定序集。进程组是进程的有限定序集。 MPI_Comm_size MPI_Comm_size(communicator,&group_size); MPI_Comm_rank MPI_Comm_rank(communicator,&my_rank); 不同通信子中的通信是相互分开的,以及任何集合不同通信子中的通信是相互分开的,以及任何集合通信是与任何点对点通信分开的。通信是与任何点对
25、点通信分开的。第第章章消消息息传传递递编编程程 MPI通信子通信子Communicator进程进程0:MPI_Send(msg1,count1,MPI_INT,1,tag1,comm1);parallel_fft(.);进程进程1:MPI_Recv(msg1,count1,MPI_INT,0,tag1,comm1,&status);parallel_fft(.);parallel_fft:if (my_rank=0)MPI_Send(msg2,count1,MPI_INT,1,tag2,comm2);第第章章消消息息传传递递编编程程 MPI通信子通信子Communicator 预定义通信子预定
26、义通信子 MPI_COMM_WORLD MPI_COMM_SELF 通信子的管理通信子的管理 MPI_Comm_dup(comm1,&comm2); MPI_Comm_split(comm1,Color,Key,&comm2);例如:例如:MPI_Comm_split( comm, rank%3, rank/3, &comm2 );第第章章消消息息传传递递编编程程 MPI的消息缓冲区的消息缓冲区 MPI允许三种缓冲区的用法:允许三种缓冲区的用法: 只需用户缓冲区只需用户缓冲区 消息在用户缓冲区之间直接传送,两者均在应用程序中说明,消息在用户缓冲区之间直接传送,两者均在应用程序中说明,接收缓冲区
27、必须有足够大的容量。接收缓冲区必须有足够大的容量。 使用系统缓冲区使用系统缓冲区 消息存放到用户接收缓冲区之前,先暂时拷贝到一个动态创消息存放到用户接收缓冲区之前,先暂时拷贝到一个动态创建的系统缓冲区中。这会造成附加的开销,而且无法保证系建的系统缓冲区中。这会造成附加的开销,而且无法保证系统缓冲区有足够的大小。统缓冲区有足够的大小。 使用用户级暂存缓冲区使用用户级暂存缓冲区 由用户说明一个有足够容量的暂时缓冲区,消息在存入用户由用户说明一个有足够容量的暂时缓冲区,消息在存入用户接收缓冲区之前,先暂时拷贝到这个缓冲区中。接收缓冲区之前,先暂时拷贝到这个缓冲区中。第第章章消消息息传传递递编编程程
28、MPI通信通信 MPI提供较多的发送和接收例程,支持锁定和非锁定发送提供较多的发送和接收例程,支持锁定和非锁定发送/接收操作接收操作和多种缓冲区方式。和多种缓冲区方式。 锁定发送锁定发送/接收在消息缓冲区可安全重写之前不能返回,而非锁定发接收在消息缓冲区可安全重写之前不能返回,而非锁定发送送/接收则可立即返回。接收则可立即返回。 同步发送同步发送 在相应的接收未开始之前,发送不能返回,因此在接收方需要有应用缓在相应的接收未开始之前,发送不能返回,因此在接收方需要有应用缓冲区以保存到达的消息。非锁定同步是指接收方不需要附加的缓冲,发冲区以保存到达的消息。非锁定同步是指接收方不需要附加的缓冲,发送
29、方可能需要系统缓冲区。送方可能需要系统缓冲区。 缓冲发送缓冲发送 假设有一定容量的缓冲区空间可供使用,但必须由用户程序通过例程预假设有一定容量的缓冲区空间可供使用,但必须由用户程序通过例程预先加以说明。先加以说明。 标准发送标准发送 由具体实现自行决定。由具体实现自行决定。 就绪发送就绪发送 在肯定相应的接收已开始后进行发送,不需要象同步方式那样等待。在肯定相应的接收已开始后进行发送,不需要象同步方式那样等待。第第章章消消息息传传递递编编程程 MPI通信通信通信原语通信原语锁定锁定非锁定非锁定标准发送标准发送MPI_SendMPI_Isend同步发送同步发送MPI_SsendMPI_Issen
30、d缓冲发送缓冲发送MPI_BsendMPI_Ibsend就绪发送就绪发送MPI_RsendMPI_Irsend接收接收MPI_RecvMPI_Irecv完成检查完成检查MPI_WaitMPI_Test第第章章消消息息传传递递编编程程 MPI集合通信集合通信 广播广播 MPI_Bcast(Address,Count,Datatype,Root,Comm) 汇集汇集 MPI_Gather(SendAddr,SendCount,SendDatatype,RecvAddr, RecvCount,RecvDatatype,Root,Comm) 散射散射 MPI_Scatter(SendAddr,Send
31、Count,SendDatatype,RecvAddr, RecvCount,RecvDatatype,Root,Comm) 全交换全交换 MPI_Alltoall(SendAddr,SendCount,SendDatatype,RecvAddr, RecvCount,RecvDatatype,Comm) 聚集聚集 MPI_Reduce(SendAddr,RecvAddr,Count,Datatype,Op,Root,Comm) MPI_Scan(SendAddr,RecvAddr,Count,Datatype,Op,Comm) 路障路障MPI_Barrier(Comm)第第章章消消息息传传递
32、递编编程程第第章章消消息息传传递递编编程程设有三个进程,执行如下代码:设有三个进程,执行如下代码:int i, j, my_rank, group_size, A3, B3, tag=1, root=0;MPI_Comm comm;MPI_Init( &argc, &argv );comm = MPI_COMM_WORLD;MPI_Comm_rank( comm, &my_rank );MPI_Comm_size( comm, &group_size );for (i=0; i3; i+)Ai = Bi = my_rank*group_size+i;MPI_Bcast( A, 3, MPI_I
33、NT, root, comm );MPI_Scatter( A, 1, MPI_INT, B, 1, MPI_INT, root, comm );MPI_Scan( A, B, 1, MPI_INT, MPI_SUM, comm ); BA1120B20AP1445353P27786B86AP3BA1120B20AP1415320P27186B20AP3BA1120B20AP1445353P27789B86AP3BA1120B20AP1445153P27782B86AP3第第章章消消息息传传递递编编程程 MPI集合通信集合通信 通信子中所有进程必须调用集合通信例程。若某些成员调用通信子中所有进
34、程必须调用集合通信例程。若某些成员调用集合例程而其余的没有调用,该代码是错误的,其行为是未集合例程而其余的没有调用,该代码是错误的,其行为是未定义的。定义的。 集合通信采用标准锁定通信方式,即进程完成集合操作中的集合通信采用标准锁定通信方式,即进程完成集合操作中的参与动作后便立刻从集合例程中返回,此时发送缓冲区为安参与动作后便立刻从集合例程中返回,此时发送缓冲区为安全可重用的,而其他进程可能还未开始相应的集合通信。全可重用的,而其他进程可能还未开始相应的集合通信。 集合通信的同步性依赖于具体的实现,因此要求用户负责代集合通信的同步性依赖于具体的实现,因此要求用户负责代码的正确性。码的正确性。
35、在集合通信中的在集合通信中的Count和和Datatype必须是兼容的。必须是兼容的。 集合例程没有消息标志参数,消息信封由通信子和源集合例程没有消息标志参数,消息信封由通信子和源/目的进目的进程说明构成。程说明构成。第第章章消消息息传传递递编编程程#include “mpi.h”int foo(int i) . main( int argc, char *argv )int i, tmp, sum=0, group_size, my_rank, N; MPI_Status status;MPI_Init( &argc, &argv );MPI_Comm_size( MPI_COMM_WORL
36、D, &group_size );MPI_Comm_rank( MPI_COMM_WORLD, &my_rank );if (my_rank=0)printf( “N=“ ); scanf( “%d”, &N );for (i=1; igroup_size; i+)S1:MPI_Send( &N, 1, MPI_INT, i, i, MPI_COMM_WORLD; );for (i=my_rank; iN; i+=group_size)sum += foo(i);for (i=1; igroup_size; i+)S2:MPI_Recv( &tmp, 1, MPI_INT, i, i, MPI
37、_COMM_WORLD, &status );sum += tmp;printf (“nThe result=%dn”, sum );elseS3:MPI_Recv( &N, 1, MPI_INT, 0, my_rank, MPI_COMM_WORLD, &status );for (i=my_rank; iN; i+=group_size)sum += foo(i);S4:MPI_Send( &sum, 1, MPI_INT, 0, i, MPI_COMM_WORLD );MPI_Finalize();return 1;10)(niifoo第第章章消消息息传传递递编编程程#include #
38、include #define N 1000000main()double sum=0, local, mypi, pi, dx;long i, taskid, numtask;A:dx = 1.0/N;MPI_Init( &argc, &argv );MPI_Comm_rank( MPI_COMM_WORLD, &taskid );MPI_COMM_size( MPI_COMM_WORLD, &numtask );B:for (i=taskid; iN; i+=numtask)P:local = (i+0.5)*dx;Q:sum += 4.0/(1.0+local*local);mypi =
39、 sum*dx;C:MPI_Reduce( &mypi, &pi, 1, MPI_DOUBLE,MPI_SUM, 0, MPI_COMM_WORLD );D:if (taskid=0) printf( “pi is %lfn”, pi );MPI_Finalize();4)(1110102xarctgdxx第第章章消消息息传传递递编编程程 PVM简介简介 PVM也许是第一个被广泛接受的、将工作站集群作也许是第一个被广泛接受的、将工作站集群作为多计算机平台的并行编程软件包。为多计算机平台的并行编程软件包。 它是由美国橡树岭国家实验室开发的,而且仍是一它是由美国橡树岭国家实验室开发的,而且仍是一个
40、在研项目。个在研项目。 支持同构和异构计算机间的消息传递。支持同构和异构计算机间的消息传递。 它有一个库例程集,用户可以在它有一个库例程集,用户可以在C或或FORTRAN中调中调用它们。用它们。 用户可用用户可用PVM构造一个全互连结点集的虚拟机。构造一个全互连结点集的虚拟机。第第章章消消息息传传递递编编程程 虚拟机结构虚拟机结构 PVM系统由两部分组成:留驻于虚拟机中每台计算机上的称为系统由两部分组成:留驻于虚拟机中每台计算机上的称为pvmd的的PVM守护进程,以及用户可调用的称为守护进程,以及用户可调用的称为libpvm3.a的的库。库。 PVM系统中通常含有一个控制台程序,用来管理虚拟机
41、、调用系统中通常含有一个控制台程序,用来管理虚拟机、调用PVM应用作业以及监控作业的执行。应用作业以及监控作业的执行。 虚拟机也可由用户应用程序调用虚拟机也可由用户应用程序调用PVM库函数库函数pvm_addhosts和和pvm_delhosts动态地加以管理。动态地加以管理。 手动的第一个手动的第一个pvmd称为主称为主pvmd,其他,其他pvmd守护进程是由主守护进程是由主pvmd来启动的,称为从来启动的,称为从pvmd。主。主pvmd和从和从pvmd及其主机的及其主机的集合形成了虚拟机。集合形成了虚拟机。 在每一个主机上驻留着一个称为主机表的数据结构,保留主在每一个主机上驻留着一个称为主
42、机表的数据结构,保留主机的构造信息以及用作通信的报文队列和缓冲区。主机表的机的构造信息以及用作通信的报文队列和缓冲区。主机表的更新通过广播方式传播到整个虚拟机。更新通过广播方式传播到整个虚拟机。第第章章消消息息传传递递编编程程 主要的主要的PVM控制台命令控制台命令命令命令操作定义操作定义add XXXX将主机将主机XXXX加入虚拟机加入虚拟机delete XXXX从虚拟机中删去主机从虚拟机中删去主机XXXXconf列出虚拟机的配置列出虚拟机的配置spawn_count n app在虚拟机上启动在虚拟机上启动n个任务运行个任务运行appjobs列出在虚拟机中运行的任务列出在虚拟机中运行的任务h
43、alt终止所有终止所有PVM进程并关闭进程并关闭PVM第第章章消消息息传传递递编编程程 PVM中的进程管理中的进程管理 PVM允许静态并行化和动态并行化。允许静态并行化和动态并行化。 可通过可通过PVM控制台的控制台的spawn_count命令启命令启动一个静态并行程序。动一个静态并行程序。 进程在执行过程中也可以通过调用进程在执行过程中也可以通过调用PVM例程例程pvm_spawn动态创建新的并行进程。动态创建新的并行进程。第第章章消消息息传传递递编编程程 PVM中的进程管理函数中的进程管理函数PVM函数调用函数调用含义含义tid=pvm_mytid();获取调用任务的任务获取调用任务的任务
44、IDtid=pvm_parentv();获取父任务的任务获取父任务的任务IDinfo=pvm_exit();调用任务离开调用任务离开PVM,但任务仍继续执行,但任务仍继续执行numt=pvm_spawn(.);派生一个派生一个PVM任务任务info=pvm_kill(tid);终止一个终止一个PVM任务任务tstat=pvm_pstat(tid);获得获得PVM任务状态任务状态info=pvm_tasks(.);获得运行在虚拟机上所有任务的信息获得运行在虚拟机上所有任务的信息mstat=pvm_mstat(host); 获得一台主机的状态获得一台主机的状态info=pvm_config(.);
45、获得整个虚拟机的配置信息获得整个虚拟机的配置信息第第章章消消息息传传递递编编程程 pvm_spawn函数函数int pvm_spawn( char *progm, char *argv, int flag, char *where, int ntask, int *tid );参数参数意义意义char *progm可执行的文件名可执行的文件名char *argv指向参变量数组的指针指向参变量数组的指针int flag说明在哪些主机上派生等说明在哪些主机上派生等char *where在特定在特定flag下,指定一个主机下,指定一个主机int ntask要启动的可执行的拷贝数要启动的可执行的拷贝数
46、int *tid保存派生任务的任务识别符保存派生任务的任务识别符第第章章消消息息传传递递编编程程 编组编组(Grouping) 为支持集合操作,为支持集合操作,PVM使用了一个分离库。使用了一个分离库。 PVM守护进程不处理编组函数,而由名为组服务器的分离守护守护进程不处理编组函数,而由名为组服务器的分离守护进程完成分组操作。当第一个编组函数调用时,该守护进程进程完成分组操作。当第一个编组函数调用时,该守护进程被自动启动。被自动启动。 PVM支持动态编组,一个任务可以同时属于不同的组;一个任支持动态编组,一个任务可以同时属于不同的组;一个任务可以在任何时间加入或离开一个组,而无须通知其他组员;
47、务可以在任何时间加入或离开一个组,而无须通知其他组员;一个一个PVM任务在离开和重新加入一个组时,可能被分配不同的任务在离开和重新加入一个组时,可能被分配不同的成员号;一个任务可以向一个组广播消息,也可以向非组员成员号;一个任务可以向一个组广播消息,也可以向非组员广播此消息。广播此消息。 动态编组增加了程序的非确定性行为,当一个任务正在加入动态编组增加了程序的非确定性行为,当一个任务正在加入或离开一个组时,一个广播操作可能会有不同的结果。或离开一个组时,一个广播操作可能会有不同的结果。第第章章消消息息传传递递编编程程 PVM编组函数编组函数PVM函数调用函数调用含义含义inum=pvm_joi
48、ngrou(groupname);加入一个组,并获得成员号加入一个组,并获得成员号info=pvm_lvgroup(groupname);离开一个组离开一个组tid=pvm_gettid(groupname,inum);从成员号获得任务从成员号获得任务IDinum=pvm_getinst(groupname,tid); 从任务从任务ID获得成员号获得成员号gsize=pvm_gsize(groupname);获得组的大小获得组的大小info=pvm_barrier(groupname,n);任务阻塞直到组中的任务阻塞直到组中的n个成员均已调用个成员均已调用pvm_barrierinfo=pvm
49、_bcast(groupname,tag);向组中(除自身外)广播由向组中(除自身外)广播由tag标识的标识的消息消息info=pvm_reduce(.);归约归约第第章章消消息息传传递递编编程程 任务识别符任务识别符 PVM使用一个使用一个32位整数对虚拟机中的任务、组或位整数对虚拟机中的任务、组或pvmd进行编址,称为任务标识符。进行编址,称为任务标识符。31302918170SGHLpvmd组组主机字段主机字段本地字段本地字段第第章章消消息息传传递递编编程程 PVM通信通信 PVM中有三类通信:守护进程之间、守护进中有三类通信:守护进程之间、守护进程进任务之间、任务与任务之间的通信。程进任务之间、任务与任务之间的通信。 PVM假设虚拟机中各主机间能通过假设虚拟机中各主机间能通过TCP和和UDP相连接。相连接。pvmd1pvmd2task1task2UDPTCPTCPTCP第第章章消消息息传传递递编编程程 PVM通信函数通信函数 PVM用户通过一组高层通信函数进行通信,用户通过一组高层通信函数进行通信,而不须知道具体的通信类型。而不须知道具体的通信类型。 在任务给定时间,在任务给定时间,PVM任务只有一个活动发任务只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 不锈钢清洁操作流程培训
- 《症状解析:心悸的诊断学要点》课件
- 《神经外科术后并发症》课件
- 绿色施工综合报告总结模版
- 乡镇蔬菜种植专业合作社工作总结模版
- 双眼上斜肌麻痹的临床护理
- 《当代安全管理策略》课件
- 《大脑解剖及神经网络》课件
- 产科健康教育培训
- 小儿支气管炎的临床护理
- 光伏发电站施工规范完整版2025年
- 煤矿防洪专项应急预案
- 2025年陕西省初中学业水平考试英语 例析与指导 试卷示例题
- 汽轮机保护装置原理与应用考核试卷
- 2025年防诈骗面试题及答案
- 2025年春季学期 形势与政策 第四讲 厚植绿色底色 建设美丽中国讲义
- 2025发展对象考试试题库及参考答案(完整版)
- 浙江省2025年1月首考高考英语试卷试题真题(含答案)
- 工程量清单和招投标控制价编制服务方案
- 全国青少年人工智能创新挑战赛技能知识竞赛题库(含答案)
- 2025年电控高压共轨市场分析现状
评论
0/150
提交评论