There's a thread about this on the MPI Forum mailing list already ;-) Jeff
On Tuesday, January 12, 2016, Gilles Gouaillardet <gil...@rist.or.jp> wrote: > Jim, > > if i understand correctly, George point is that OpenMPI is currently > correct with respect to the MPI standard : > MPI_DATATYPE_NULL is *not* a predefined datatype, hence it is not > (expected to be) a committed datatype, > and hence it cannot be used in MPI_Alltoallw (regardless the corresponding > count is zero). > > an other way to put this is mpich could/should have failed and/or you were > lucky it worked. > > George and Jeff, > > do you feel any need to ask MPI Forum to clarify this point ? > > > Cheers, > > Gilles > > On 1/13/2016 12:14 PM, Jim Edwards wrote: > > Sorry there was a mistake in that code, > stypes and rtypes should be of type MPI_Datatype not integer > however the result is the same. > > *** An error occurred in MPI_Alltoallw > > *** reported by process [204406785,1] > > *** on communicator MPI_COMM_WORLD > > *** MPI_ERR_TYPE: invalid datatype > > > > On Tue, Jan 12, 2016 at 7:55 PM, Jim Edwards <jedwa...@ucar.edu > <javascript:_e(%7B%7D,'cvml','jedwa...@ucar.edu');>> wrote: > >> Maybe the example is too simple. Here is another one which >> when run on two tasks sends two integers from each task to >> task 0. Task 1 receives nothing. This works with mpich and impi >> but fails with openmpi. >> >> #include <stdio.h> >> #include <mpi.h> >> >> my_mpi_test(int rank, int ntasks) >> { >> MPI_Datatype stype, rtype; >> int sbuf[2]; >> int rbuf[4]; >> >> int slen[ntasks], sdisp[ntasks], stypes[ntasks], rlen[ntasks], >> rdisp[ntasks], rtypes[ntasks]; >> sbuf[0]=rank; >> sbuf[1]=ntasks+rank; >> slen[0]=2; >> slen[1]=0; >> stypes[0]=MPI_INT; >> stypes[1]=MPI_DATATYPE_NULL; >> sdisp[0]=0; >> sdisp[1]=4; >> if(rank==0){ >> rlen[0]=2; >> rlen[1]=2; >> rtypes[0]=MPI_INT; >> rtypes[1]=MPI_INT; >> rdisp[0]=0; >> rdisp[1]=8; >> >> }else{ >> rlen[0]=0; >> rlen[1]=0; >> rtypes[0]=MPI_DATATYPE_NULL; >> rtypes[1]=MPI_DATATYPE_NULL; >> rdisp[0]=0; >> rdisp[1]=0; >> } >> >> MPI_Alltoallw(sbuf, slen, sdisp, stypes, rbuf, rlen, rdisp, rtypes, >> MPI_COMM_WORLD); >> if(rank==0){ >> printf("%d %d %d %d\n",rbuf[0],rbuf[1],rbuf[2],rbuf[3]); >> } >> >> int main(int argc, char **argv) >> { >> int rank, ntasks; >> >> MPI_Init(&argc, &argv); >> >> MPI_Comm_rank(MPI_COMM_WORLD,&rank); >> MPI_Comm_size(MPI_COMM_WORLD, &ntasks); >> >> printf("rank %d ntasks %d\n",rank, ntasks); >> >> my_mpi_test(rank,ntasks); >> >> >> MPI_Finalize(); >> } >> >> >> >> > > > -- > Jim Edwards > > CESM Software Engineer > National Center for Atmospheric Research > Boulder, CO > > > _______________________________________________ > users mailing listus...@open-mpi.org > <javascript:_e(%7B%7D,'cvml','us...@open-mpi.org');> > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users > Link to this post: > http://www.open-mpi.org/community/lists/users/2016/01/28258.php > > > -- Jeff Hammond jeff.scie...@gmail.com http://jeffhammond.github.io/