Hello, Currently I am investigating the new nonblocking collectives introduced in MPI-3 which are implemented in Open MPI 1.7.1. As a first try I took MPI_Ibcast.
According to the MPI-3 spec my understanding is that MPI_Ibcast + MPI_Wait should be equivalent to a MPI_Bcast - except, that the algorithms used within the the MPI implementation may differe. I wrote a simple example code: #include <stdio.h> #include <mpi.h> int main(int argc, char *argv[9]) { MPI_Init(&argc, &argv); MPI_Comm comm = MPI_COMM_WORLD /* MPI_COMM_SELF */; int root = 0; int array[100]; MPI_Request request; MPI_Status status; MPI_Ibcast(array, 100, MPI_INT, root, comm, &request); MPI_Wait(&request, &status /* MPI_STATUS_IGNORE */); int count = -1; MPI_Get_count(&status, MPI_INT, &count); printf("%d - %d\n", 100, count); MPI_Finalize(); return 0; } I run the example with "mpirun -np 2 <app>" And here the questions: 1) Is it allowed to use a status in the wait for this nonblocking bcast? The spec does only show MPI_STATUS_IGNORE in the examples. And what should be the count returned by Get_count when applied to the final status? Using the MPI_Bcast does not provide to posibility to get this info at all. The example output from all ranks is "100 - 0" - I would have expecte "100 - 100". Is this a bug in Open MPI 1.7.1? 2) When using MPI_COMM_SELF the code deadlocks while it does not do so when using a normal MPI_Bcast. I did not have a look inside the Open MPI code yet but I expect two different algorithms for MPI_Ibcast and MPI_Bcast where the former may have a problem. Thanks in advance for your feedback. Best regards Christoph