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.


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);

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