Is the following a standards-conformant MPI-3 C program? #include <mpi.h>int main(int argc, char** argv){  int dlocalouter=1, dglobalouter=0, dlocalinner=1, dglobalinner=0;  MPI_Request router, rinner;  MPI_Init(&argc,&argv);  MPI_Iallreduce(&dlocalouter,&dglobalouter,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD,&router);  MPI_Iallreduce(&dlocalinner,&dglobalinner,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD,&rinner);  MPI_Wait(&rinner,MPI_STATUS_IGNORE);  MPI_Wait(&router,MPI_STATUS_IGNORE);  MPI_Finalize();  return 0;}
Is it valid MPI-3 to nest non-blocking collectives?
c;mpi
Yes.The reason I asked was that with a particular implementation (cray-mpich 7.0.4), in a particular environment on a particular system, the second MPI_Wait call would not return. This was likely due to a bug somewhere in the MPI library or a dependent communication library, and was remedied by upgrading to a newer version of the MPI implementation (cray-mpich 7.1.1).