Takahiro, Good catches. It's absolutely amazing that some of these errors lasted for so long before being discovered (especially the extent issue in the MPI_ALLTOALL). Please feel free to apply your patch and add the correct copyright at the beginning of all altered files.
Thanks, George. On Sep 17, 2013, at 07:36 , "Kawashima, Takahiro" <t-kawash...@jp.fujitsu.com> wrote: > Hi, > > My colleague tested MPI_IN_PLACE for MPI_ALLTOALL, MPI_ALLTOALLV, > and MPI_ALLTOALLW, which was implemented two months ago in Open MPI > trunk. And he found three bugs and created a patch. > > Found bugs are: > > (A) Missing MPI_IN_PLACE support in self COLL component > > The attached alltoall-self-inplace.c fails with MPI_ERR_ARG. > self COLL component also must support MPI_IN_PLACE. > > (B) Incorrect rcount[] index > > A trivial bug in the following code. > > for (i = 0, max_size = 0 ; i < size ; ++i) { > size_t size = ext * rcounts[rank]; // should be rcounts[i] > > max_size = size > max_size ? size : max_size; > } > > This causes SEGV or something. > > (C) For MPI_ALLTOALLV, the unit of displacements is extent, not byte > > Though the unit of displacements is byte for MPI_ALLTOALLW, > the unit of displacements is extent for MPI_ALLTOALLV. > > MPI-2.2 (page 171) says: > > The outcome is as if each process sent a message to every > other process with, > MPI_Send(sendbuf + sdispls[i] · extent(sendtype), > sendcounts[i], sendtype, i, ...), > and received a message from every other process with a call to > MPI_Recv(recvbuf + rdispls[i] · extent(recvtype), > recvcounts[i], recvtype, i, ...). > > I attached his patch (alltoall-inplace.patch) to fix these three bugs. > > Takahiro Kawashima, > MPI development team, > Fujitsu > <alltoall-inplace.patch><alltoall-self-inplace.c>_______________________________________________ > devel mailing list > de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/devel