2MPI点到点通信探索.pptx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MPI点到点通信 MPI的消息传递过程三个阶段: (1)消息装配   (2)消息传递 (3)消息拆卸 编写一个简单的实现发送和接收功能的程序 #include “mpi.h” main(int argc, int **argv ) {   char message[20];   int myrank;   MPI_Init( argc, argv );   /* MPI程序的初始化*/   MPI_Comm_rank( MPI_COMM_WORLD, myrank );    /* 得到当前进程的标识*/   if (myrank == 0) /* 若是 0 进程*/   { strcpy(message,Hello, process 1); MPI_Send(message, strlen(message), MPI_CHAR, 1,      99,MPI_COMM_WORLD);   }     else if(myrank==1) /* 若是进程 1 */     { MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, status);       printf(received :%s:, message);     }   MPI_Finalize();     /* MPI程序结束*/   } MPI消息的组成 MPI消息包括信封和数据两个部分,信封指出了发送或接收消息的对象及相关信息,而数据是本消息将要传递的内容。信封和数据又分别包括三个部分。可以用一个三元组来表示。   信封:源/目,标识,通信域   数据:起始地址,数据个数,数据类型 MPI_SEND 语句的消息信封和消息数据 MPI_RECV语句的消息信封和消息数据 MPI消息(数据类型) MPI的消息类型分为两种:预定义类型和派生数据类型(Derived Data Type) 预定义数据类型:MPI支持异构计算(Heterogeneous Computing),它指在不同计算机系统上运行程序,每台计算可能有不同生产厂商,不同操作系统。 MPI通过提供预定义数据类型来解决异构计算中的互操作性问题,建立它与具体语言的对应关系。 派生数据类型:MPI引入派生数据类型来定义由数据类型不同且地址空间不连续的数据项组成的消息。 MPI消息(数据类型) MPI提供了两个附加类型:MPI_BYTE和MPI_PACKED 。 MPI_BYTE表示一个字节,所有的计算系统中一个字节都代表8个二进制位。 MPI_PACKED预定义数据类型被用来实现传输地址空间不连续的数据项 。 消息标签 为什么需要消息标签? 当发送者连续发送两个相同类型消息给同一个接收者,如果没有消息标签,接收者将无法区分这两个消息 这段代码打算传送A的前32个字节进入X,传送B的前16个字节进入Y。但是,尽管消息B后发送,但可能先到达进程Q,就会被第一个接收函数接收在X中。使用标签可以避免这个错误 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) 消息标签 添加标签使得服务进程可以对两个不同的用户进程分别处理,提高灵活性 通信域 通信域(Communicator)包括进程组(Process Group)和通信上下文(Communication Context)等内容,用于描述通信进程间的通信关系。 通信域分为组内通信域和组间通信域,分别用来实现MPI的组内通信(Intra-communication)和组间通信(Inter-communication)。 通信域 进程组是进程的有限、有序集。 有限意味着,在一个进程组中,进程的个数n是有限的,这里的n称为进程组大小(Group Size)。 有序意味着,进程的编号是按0,1,…,n-1排列的 一个进程用它在一个通信域(组)中的编号进行标识。组的大小和进程编号可以通过调用以下的MPI函数获得: MPI_Comm_size(communicator, group_size) MPI_Comm_rank(communicator, my_rank) 通信域 通信上下文:安全的区别不同的通信以免相互干扰 通信上下文不是显式的对象,只是作为通信域的一部分出现 进程组和通信上下文结合形成了通信域 MPI_COMM_WORLD是所有进程的集合 通信域

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档