[mpich-discuss] Problem reproducing an example from the MPI standard

Jiri Simsa jsimsa at cs.cmu.edu
Sat Jun 22 11:49:10 CDT 2013


Hi,

I tried implementing the Example 3.17 from the MPI 3.0 specification
document using as follows:

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

int main(int argc, char *argv[]) {
  int myrank, size;
  MPI_Status status;
  MPI_Init(&argc, &argv );
  MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
  MPI_Comm_size(MPI_COMM_WORLD, &size);
  assert(size == 3);
  if (myrank == 0) {
    /* code for process zero */
    int i = 1;
    MPI_Send(&i, 1, MPI_INTEGER, 2, 99, MPI_COMM_WORLD);
  }
  if (myrank == 1) {
    /* code for process one */
    double d = 3.14;
    MPI_Send(&d, 1, MPI_REAL, 2, 99, MPI_COMM_WORLD);
  }
  if (myrank == 2) {
    /* code for process two */
    for (int i = 0; i < 2; i++) {
      MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
      printf("Probe matched %lld bytes from source %d.\n",
             status.count, status.MPI_SOURCE);
      if (status.MPI_SOURCE == 0) {
int i;
MPI_Recv(&i, 1, MPI_INTEGER, 0, 99, MPI_COMM_WORLD, &status);
printf("Received integer '%d' from %d.\n", i, status.MPI_SOURCE);
      } else {
double d;
MPI_Recv(&d, 1, MPI_REAL, 1, 99, MPI_COMM_WORLD, &status);
printf("Received real '%f' from %d.\n", d, status.MPI_SOURCE);
      }
    }
  }
  MPI_Finalize();
  return 0;
}

This example compiles without any warning with the MPICH-3.0.4 library.
However, running:

$ mpiexec -n 3 ./example

leads to the following output:

Probe matched 4 bytes from source 1.
Received real '0.000000' from 1.
Probe matched 4 bytes from source 0.
Received integer '1' from 0.

Could someone please let me know what is the problem with my program? I
failed to see a problem there. Thank you.

Best,

--Jiri Simsa
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpich.org/pipermail/discuss/attachments/20130622/70ca8d04/attachment.html>


More information about the discuss mailing list