并行程序设计基础——MPI消息

目录

一、消息组成

二、任意源和任意标识

三、通信域


一、消息组成

        MPI消息组成包括两部分:信封数据

        信封指出了发送或接收消息的对象及相关信息。数据是是本消息需要传递的内容。信封和消息分别包括三部分,可以用一个三元组来表示:

信封:<源/目的,标识,通信域>

数据:<起始地址,数据个数,数据类型>

        以MPI_SEND和MPI_RECV为例,对其消息组成进行分解:

        消息信封中tag存在的意义:当发送方发送两个相同类型的数据给同一个接收方时,如果没有消息标识,接收方将无法区别两个消息。

二、任意源和任意标识

        接收操作对消息的选择是由消息的信封决定的,如果消息信封与接收操作所指定的值source、tag、comm相匹配,则这个接收操作可以接收这个消息。接收方可以给source指定一个任意值MPI_ANY_SOURCE,表示任何进程发送的消息都可以接收,即本接收操作可以匹配任何进程发送的消息,但是其它要求还需要满足,比如tag的匹配。如果给tag指定一个任意值MPI_ANY_TAG,表示任何tag的消息都可以接收,这种方式类似于通配符。MPI_ANY_SOURCE和MPI_ANY_TAG可以同时使用或单独使用,但不能给comm指定任意值。如果一个消息被发送到接收进程,接收进程有相匹配的通信域,有匹配的source(或source=MPI_ANY_SOURCE),有匹配的tag(或tag=MPI_ANY_TAG),那么这个消息能被这个接收方接收。

        由于MPI_ANY_SOURCE和MPI_ANY_TAG的存在,使得发送操作和接收操作间存在不对称性,即一个接收操作可以接收任何发送方的消息,但是对于一个发送操作,必须指明一个单独的接收方。

        MPI允许发送方=接收方,即Source=Destination,一个进程可以给自己发送消息,但是这种操作可能会产生死锁

三、通信域

        MPI通信域包括两部分:进程组通信上下文

        进程组是所有参加通信的进程的集合,如果一共有N个进程参加通信,则进程的编号从0到N-1。通信上下文提供一个相对独立的通信区域,不同的消息在不同的上下文中进行传递,不同上下文的消息互不干涉,通信上下文可以将不同的通信区分开来。

        MPI_COMM_WORLD是MPI预定义的通信域,MPI初始化后,便会产生这一个通信域,它包括了初始化时可得到的全部进程,进程是由他们在MPI_COMM_WORLD组中的进程号标识。

        用户可以在原有的通信域基础上自定义新的通信域。通信域为库和通信模式提供了一种重要的封装机制。其允许各模式有自己的独立的通信域和自己的进程计数方案。

        本节简单介绍了MPI通信中消息的结构和通信域,下一节将开始MPI程序的设计。

        

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿核试Bug愁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值