#include <mpi.h>
#include <cstdio>
#define n 10
int main(int argc,char **argv){
int myid,size;
double a[n]={0},b[n]={0};
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Comm_size(MPI_COMM_WORLD,&size);
for(int i=0;i<n;i++){
a[i]=myid;
b[i]=0;
}
int next=(myid+1)%size;
int front=(myid-1+size)%size;
MPI_Request request,request1;
MPI_Isend(a,n,MPI_DOUBLE,next,0,MPI_COMM_WORLD,&request);
MPI_Irecv(b,n,MPI_DOUBLE,front,0,MPI_COMM_WORLD,&request1);
// MPI_Send(a,n,MPI_DOUBLE,next,0,MPI_COMM_WORLD);
// MPI_Recv(b,n,MPI_DOUBLE,front,0,MPI_COMM_WORLD,&status);
printf("b[0]=%f in process %d\n",b[0], myid);
MPI_Finalize();
return 0;
}
非阻塞式MPI_Isend&MPI_Irecv
最新推荐文章于 2024-07-01 00:07:07 发布
该代码展示了一个使用MPI(MessagePassingInterface)进行并行计算的例子。程序初始化后,每个进程发送自己的ID到下一个进程,并接收来自前一个进程的数据。使用了MPI_Isend和MPI_Irecv进行非阻塞通信,然后打印出b[0]的值。
摘要由CSDN通过智能技术生成