Мастер не ждет 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

person jsan    schedule 03.10.2014    source источник
comment
возможный дубликат MPI_Comm_spawn и MPI_Reduce   -  person Jonathan Dursi    schedule 03.10.2014
comment
Добавить барьер синхронизации   -  person OmarAsifShaikh    schedule 04.10.2014