我正在做以下作业:
每个进程都需要一个 double 作为输入。使用函数
MPI_Sendrecv_replace()
交换所有双打与相反等级的进程(第一个和最后一个,第二个和最后一个,...)。在每个过程中输出收到的数字。
所以这是我写的代码。
#include "mpi.h"
#include <stdio.h>
#include "pt4.h"
int main(int argc, char *argv[])
{
MPI_Init(&argc,&argv);
int flag;
MPI_Initialized(&flag);
if (flag == 0)
return;
int rank, size;
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
double n;
pt >> n; // pt is a stream provided by side library (works perfectly fine)
int oppositeRank = (size - 1) - rank;
if (rank != oppositeRank)
{
MPI_Status status;
MPI_Sendrecv_replace(&n, 1, MPI_DOUBLE, oppositeRank, 0,
rank, 0, MPI_COMM_WORLD, &status);
}
pt << n;
MPI_Finalize();
return 0;
}
虽然这段代码编译没有任何问题,但它永远不会停止。那么问题是为什么?我究竟做错了什么?