Hi, I am confused about the syntax of the "in place" variant of MPI_Reduce, in particular about the significance of the recvbuf for the non-root processes. I.e., is the following legal?
buf = (double *)malloc(l*sizeof(double); random(buf, l); /* fill buf with something */ if (myid == 0) { MPI_Reduce(MPI_IN_PLACE, buf, l, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); } else { MPI_Reduce(buf, NULL, l, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); } This appears to violate the standard: http://www.mpi-forum.org/docs/mpi22-report/node103.htm#Node103 "The routine is called by all group members using the same arguments for count, datatype, op, root and comm. Thus, all processes provide input buffers and output buffers of the same length, with elements of the same type." However, this "same length" requirement is already violated at the root process where I can specify MPI_IN_PLACE. Unfortunately, the standard says nothing about the other processes in this case. Do I need a valid receive buffer there? Cheers, Martin -- Martin Siegert Head, Research Computing WestGrid Site Lead IT Services phone: 778 782-4691 Simon Fraser University fax: 778 782-4242 Burnaby, British Columbia email: sieg...@sfu.ca Canada V5A 1S6