I have a little program which initializes, calls MPI_Bcast, prints a
message, waits five seconds, and finalized.  I sure thought that each
participating process would print the message immediately, then all would
wait and exit - thats what happens with mvapich 1.0.0.  On OpenMPI 1.2.5,
though, I get the message immediately from proc 0, then 5 seconds later,
from proc 1, and then 5 seconds later, it exits- as if MPI_Finalize on proc
0 flushed the MPI_Bcast.  If I add a MPI_Barrier after the MPI_Bcast, it
works as I'd expect.  Is this behavior correct?  If so, I so I have a bunch
of code to change in order to work correctly on OpenMPI.

Greg

Here's the code:

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

main(int argc, char *argv[])
{
    char hostname[256]; int r, s;
    MPI_Init(&argc, &argv);

    gethostname(hostname, sizeof(hostname));

    MPI_Comm_rank(MPI_COMM_WORLD, &r);
    MPI_Comm_size(MPI_COMM_WORLD, &s);

    fprintf(stderr, "%d of %d: %s\n", r, s, hostname);

    int i = 99999;
    MPI_Bcast(&i, sizeof(i), MPI_UNSIGNED_CHAR, 0, MPI_COMM_WORLD);
    // MPI_Barrier(MPI_COMM_WORLD);

    fprintf(stderr, "%d: got it\n", r);

    sleep(5);

    MPI_Finalize();
}

Reply via email to