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/

Reply via email to