并行程序设计基础——MPI通信模式

目录

一、标准通信模式

二、缓存通信模式

1、MPI_BUFFER_ATTACH

2、MPI_BUFFER_DETACH

三、同步通信模式

四、就绪通信模式

五、小结


        MPI是消息传递接口的简称,顾名思义,通信是MPI并行程序中的关键所在。MPI共有四种通信模式:标准通信模式(standard mode)、缓存通信模式(buffered mode)、同步通信模式(synchronous mode)、就绪通信模式(ready mode)。前面章节介绍的程序都属于标准通信模式。这几种通信模式对应于不同的通信需求,MPI为用户提供功能相近的不同通信方式。

        这四种通信模式主要是根据以下不同情况来区分的:

        1、是否需要对发送的数据进行缓存?

        2、是否只有当接收调用执行后才可以执行发送操作?

        3、何时发送调用可以正确返回?

        4、发送调用正确返回是否意味着发送已完成,即发送缓冲区是否可以被覆盖?

        针对这些情况,MPI给出不同的通信模式。

通信模式 发送 接收
标准通信模式 MPI_SEND MPI_RECV
缓存通信模式 MPI_BSEND
同步通信模式 MPI_SSEND
就绪通信模式 MPI_RSEND

        对于非标准的通信模式,只有发送操作,而没有相应的接收操作。MPI对不同的通信模式,在调用的命名上加以区别,标准通信模式不加特殊字母,而其它三种通信模式提供三个附加的发送函数,用一个字母前缀表示通信模式:B用于缓存通信模式,S用于同步通信模式,R用于就绪通信模式。接下来对其一一进行介绍。

一、标准通信模式

        对于标准通信模式,是否对发送的数据进行缓存是由MPI自身决定的,而不是由程序员控制的。如果MPI决定缓存将要发出的数据,发送操作不管接收操作是否执行,都可以进行,而且发送操作可以正确返回而不要求接收操作收到发送的数据。

        由于缓存数据需要代价,会延长数据通信时间,而且缓冲区也不并是总可以得到的,这样MPI也可以不缓存将要发送的数据,这样只有当相应的接收调用被执行后,并且发送数据完全到达接收缓冲区后,发送操作才算完成。对于非阻塞通信,发送操作虽然没有完成,但是发送调用可以正确返回,程序可以继续执行其它操作。

二、缓存通信模式

        如果需要直接对通信缓冲区进行控制,可采用缓存通信模式。在这种模式下,由用户直接对通信缓冲区进行申请、使用和释放,因此,缓存模式下对通信缓冲区的合理与正确使用是由程序员来保证的。

MPI_BSEND(buf, count, datatype, dest, tag, comm)
IN    buf       发送缓冲区的起始地址(可选数据类型)
IN    count     发送数据的个数(整型)
IN    datatype  发送数据的数据类型(句柄)
IN    dest      目标进程标识号(整型)
IN    tag       消息标志(整型)
IN    comm      通信域(句柄)


//c语言的说明
int MPI_Bsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
//Fortran语言的说明
MPI_BSEND(BUF, COUNT, DATATYPE, DEST,
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猿核试Bug愁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值