Re: [mpich-discuss] Problem reproducing an example from the MPI standard
Nevermind. I was incorrectly using the MPI_REAL data type. After replacing it with the MPI_DOUBLE data type the program was as expected. On Sat, Jun 22, 2013 at 12:49 PM, Jiri Simsa <[email protected]> wrote:
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
participants (1)
-
Jiri Simsa