On Thu, Dec 10, 2009 at 4:26 PM, George Bosilca <bosi...@eecs.utk.edu> wrote: > Lisandro, > > This code is not correct from the MPI standard perspective. The reason is > independent of the datatype or count, it is solely related to the fact that > the MPI_Reduce cannot accept a sendbuf equal to the recvbuf (or one has to > use MPI_IN_PLACE). >
George, I have to disagree. Zero-length buffers are a very special case, and the MPI std is not very explicit about this limit case. Try the code pasted at the end. 1) In Open MPI, the only one of these failing for sbuf=rbuf=NULL is MPI_Reduce() 2) As reference, all the calls succeed in MPICH2. #include <mpi.h> #include <stdlib.h> int main( int argc, char ** argv ) { int ierr; MPI_Init(&argc, &argv); ierr = MPI_Scan( NULL, NULL, 0, MPI_INT, MPI_SUM, MPI_COMM_WORLD); ierr = MPI_Exscan( NULL, NULL, 0, MPI_INT, MPI_SUM, MPI_COMM_WORLD); ierr = MPI_Allreduce( NULL, NULL, 0, MPI_INT, MPI_SUM, MPI_COMM_WORLD); #if 1 ierr = MPI_Reduce( NULL, NULL, 0, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); #endif MPI_Finalize(); return 0; } -- Lisandro Dalcín --------------- Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC) Instituto de Desarrollo Tecnológico para la Industria Química (INTEC) Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET) PTLC - Güemes 3450, (3000) Santa Fe, Argentina Tel/Fax: +54-(0)342-451.1594