MPI_Send与MPI_Recv小例子

访问本站观看效果更佳
函数原型
MPI_Send

int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

参数:
buf:发送缓冲区的首地址
count:需要发送的字节数
datatype:每个发送元素的数据类型
dest:目标的rank(id)
tag:消息标识(integer)
comm:通信域

MPI_Recv

 int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,MPI_Comm comm, MPI_Status *status)

输出参数:
buf:接收缓冲区的首地址
status:status对象(Status)
输入参数:
count:接收缓冲区最多存放字节数(integer)
datatype:每个接收元素的数据类型
source:发送者的rank (integer)
tag:消息标识(integer)
comm:通信域

先将字符串拷贝到发送缓冲区message中,然后调用MPI_Send语句将它发出,用strlen(message)指定消息的长度,用MPI_CHAR指定消息的数据类型1,指明发往进程1, 使用的消息标识是99 ,MPI_COMM_WORLD是包含本进程进程0 和接收消息的进程进程1 的通信域,发送方和接收方必须在同一个通信域中,由通信域来统一协调和控制消息的发送和接收。
进程1直接执行接收消息的操作,这里它使用message作为接收缓冲区,由此可见,对于同一个变量在发送进程和接收进程中的作用是不同的,它指定接收消息的最大长度为20 ,消息的数据类型为MPI_CHAR字符型,接收的消息来自进程0 ,而接收消息携带的标识必须为99,使用的通信域也是MPI_COMM_WORLD, 接收完成后的各种状态信息存放在status中,接收完成后它直接将接收到的字符串打印在屏幕上。

#include"mpi.h"
int main(int argc,char *argv[])
{
       char message[20]="";
       int myrank;
       MPI_Status status;
       MPI_Init(&argc,&argv);
       MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
       if(myrank==0)
       {
              strcpy(message,"Hello,process 1");
              MPI_Send(message,strlen(message),MPI_CHAR,1,99,MPI_COMM_WORLD);
       }
       else if(myrank==1)
       {
              MPI_Recv(message,20,MPI_CHAR,0,99,MPI_COMM_WORLD,&status);
              printf("received:%s/n",message);
       }
       MPI_Finalize();            
       return 0;
}

猜你喜欢

转载自blog.csdn.net/zcgyq/article/details/83088233
mpi