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