Я делаю свою домашнюю работу ти следующего задания:MPI_Sendrecv_replace() проблема мертвой блокировки
Каждый процесс имеет двойной как вход. Использование функции
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;
}
Хотя этот код не содержит никаких проблем, он никогда не останавливается. Итак, почему? Что я делаю не так?
Спасибо! Оно работает. Я пропустил понимание значения параметра источника. – DaZzz