// MPI1.cpp : 定义控制台应用程序的入口点。
//MPI点对点通信
#include "stdafx.h"
#include "mpi.h"
#include <stdio.h>
#include <string.h>
#define BUFLEN 512
int main(int argc, char * argv[])
{
int myid,numprocs,next;
char buffer[BUFLEN];
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
printf("Process %d of %d\n",myid,numprocs); //输出进程号
memset(buffer,0,BUFLEN*sizeof(char)); //将buffer清空
//告诉每个进程号的下一个进程号
if(myid==numprocs-1)
next=0;
else
next=myid+1;
if(myid==0)
{
strcpy(buffer,"hello there");
printf("%d sending '%s' \n",myid,buffer); //通知发送buffer内容
fflush(stdout);
MPI_Send(buffer,strlen(buffer)+1,MPI_CHAR,next,99,MPI_COMM_WORLD);
printf("%d receiving \n",myid); //通知正在接收buffer内容
fflush(stdout);
MPI_Recv(buffer,BUFLEN,MPI_CHAR,MPI_ANY_SOURCE,99,MPI_COMM_WORLD,&status);
printf("%d received '%s' \n",myid,buffer); //通知已接收buffer内容
fflush(stdout);
}
else
{
printf("%d receiving \n",myid); //通知正在接收buffer内容
fflush(stdout);
MPI_Recv(buffer,BUFLEN,MPI_CHAR,MPI_ANY_SOURCE,99,MPI_COMM_WORLD,&status);
printf("%d received '%s' \n",myid,buffer); //通知已接收buffer内容
fflush(stdout);
MPI_Send(buffer,strlen(buffer)+1,MPI_CHAR,next,99,MPI_COMM_WORLD);
printf("%d sent '%s' \n",myid,buffer); //通知已发送的buffer内容
fflush(stdout);
}
MPI_Finalize();
return (0);
}
两个处理器:
运行结果: