私は次の課題で宿題をしています:
すべてのプロセスは、入力として double を取ります。function
MPI_Sendrecv_replace()
swap all doubles を使用して、反対のランクのプロセス (最初と最後、2 番目と最後から 1 つ後、...) を使用します。すべてのプロセスで受信した数を出力します。
だからここに私が書いたコードがあります。
#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;
}
このコードは問題なくコンパイルされますが、停止することはありません。それで、問題はなぜですか?私は何を間違っていますか?