MPI的缓冲通讯

MPI的缓冲通讯提供了一种自定义缓冲区的方法,以提高通讯效率和安全性。当消息大小超过缓冲区时,标准通讯可能会报错,而缓冲通讯则能避免这种问题。通过MPI_Pack_size计算消息大小,结合MPI_BSEND_OVERHEAD确定缓冲区上限,并使用MPI_Buffer_attach装载。为了保证通讯安全,建议采用同步方式进行,并在发送方使用MPI_Buffer_detach清空缓冲区,防止数据混乱。MPI_Buffer_detach是阻塞调用,待所有使用该缓冲区的消息发送完毕后返回,允许再次使用或释放缓冲区。
摘要由CSDN通过智能技术生成

MPI的缓冲通讯 我们可以通过自定义缓冲区 然后进行通讯操作 但是这种方式类似标准通讯方式 但是却还是有区别 当我们的消息大小大于缓冲区时候就会报错 但是标准通讯 不会 他会阻塞等到接受动作开启时候进行发送 为了更加的安全 我们可以采缓冲通讯 这样可以保证通讯缓冲区 可以手动计算 通过MPI_Pack_size 最后通过n*MPI_BSEND_OVERHEAD+计算出来的消息缓冲区上界限 通过MPI_Buffer_attach进行装载 缓冲区 当我们通信的时候会出现很多情况 我就不一一例举了 这种情况可以忽略因为那么多的情况 其实 我们只要保证安全性就可以了 就是通过同步的方式 而且也可以避免缓冲区报错 下面举个例子
#include"mpi.h"
#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int main(int argc,char**argv)

{

int procnum,rank;

MPI_Comm comm=MPI_COMM_WORLD;

MPI_Init(&argc,&argv);

MPI_Comm_rank(comm,&rank);

MPI_Comm_size(comm,&procnum);







int src=0,des=1;

char* buf;

int s1,s2;

int buffsize;

char msg1[112],msg2[7],rmsg1[12],rmsg2[12];

MPI_Pack_size(17,MPI_CHAR,comm,&s1);

MPI_Pack_size(7,MPI_CHAR,comm,&s2);

buffsize=2*MPI_BSEND_OVERHEAD+s1+s2;

buf=(char*)malloc(buffsize);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值