On Thu, Dec 10, 2009 at 4:26 PM, George Bosilca <bosilca_at_[hidden]> 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
|