Мастер не ждет MPI_Reduce от спавна

У меня есть мастер-файл и ведомый файл, и мастер-файл не ждет MPI_Reduce перед выводом его результата. (4) рабы распечатывают строку и возвращают номер 10.0 и Мастер должен сложить их и отобразить результат.

Мастер должен вывести 40.0 но это не выход, который я получаю. Мастер выводит раньше, чем ведомые, заставляя меня поверить, что он не ждет MPI_Reduce Какие-либо предложения?

//  Master //

#include "mpi.h"#include <stdio.h>
#include <stdlib.h>#define MASTER 0        /* task ID of master task */
#define MAXPROCS 4  /* Max numbe of processes*/

int main(int argc, char *argv[])
{
double  homepi, sum, pi;
int taskid, numtasks, rc;
MPI_Status status;
MPI_Comm kids;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD, &taskid);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Comm_spawn("SpawnKids", MPI_ARGV_NULL, MAXPROCS,
MPI_INFO_NULL, 0, MPI_COMM_WORLD, &kids, MPI_ERRCODES_IGNORE);

rc = MPI_Reduce(&homepi, &sum, 0, MPI_DOUBLE, MPI_SUM, 0, kids);
printf("sum :%d\n", sum);

MPI_Finalize();

return(0);
}// Slave //

#include "mpi.h"#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int rank, rc;
double pisum, pi;

MPI_Status status;
MPI_Comm parent;
MPI_Init(&argc, &argv);
MPI_Comm_get_parent(&parent);
MPI_Comm_rank(parent, &rank);

pi = 10.0;
printf("Rank: %d\n", rank);

rc = MPI_Reduce(&pi, &pisum, 1, MPI_DOUBLE, MPI_SUM, 0, parent);

MPI_Finalize();
return 0;
}// OUTPUT //

sum :-1285360816
Rank: 3
Rank: 0
Rank: 1
Rank: 2

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]