Jim,
your initial question was
i think that this is a bug in open-mpi - would you agree?
and so far, the answer is
we disagree, this is not an OpenMPI bug, this is the MPI 3.1 standard.
and your last question was
Can you make any argument in support of not allowing it (other that
that's the way you've interpreted the standard)?
one point was made against supporting MPI_DATATYPE_NULL with zero count
on the mpi forum mailing list :
changing this is not backward compatible since it has the potential to
break existing tools that
correctly assumes (at least for now) that a datatype *cannot* be
MPI_DATATYPE_NULL.
btw, Intel MPI (impi) is mpich based. so it is very likely this kind of
quite high level stuff is handled the same way.
Jeff,
OpenMPI does not allow MPI_DATATYPE_NULL, and from a performance point
of view, that is a pointer comparison. at first glance, allowing
MPI_DATATYPE_NULL *if and only if* count is zero looks more cpu intensive.
George and all.
Back to OpenMPI, now the question is :
"Is OpenMPI going to be updated (and when) in order to support an
intuitive and user friendly feature, that is currently explicitly
prohibited by the MPI 3.1 standard, but that might be part of the MPI-4
standard and that we already know is not backward compatible (*) ?
(*) fwiw, mpich already "implements" this, so backward incompatibility
would only affect tools currently working with OpenMPI but not with mpich."
i am a pragmatic guy, so i'd rather go for it, but here is what i am
gonna do :
unless George vetoes that, i will add this topic to the weekly call
agenda, and wait for the community to make a decision
(e.g. go / no go, and milestone if needed 1.10 series ? 2.0 ? 2.1 ?
master only ?)
Cheers,
Gilles
On 1/14/2016 12:23 AM, Jeff Hammond wrote:
Bill Gropp's statement on the Forum list is clear: null handles cannot
be used unless explicitly permitted. Unfortunately, there is no
exception for MPI_DATATYPE_NULL when count=0. Hopefully, we will add
one in MPI-4.
While your usage model is perfectly reasonable to me and something
that I would do in the same position, you need to use e.g. MPI_BYTE
instead to comply with the current MPI standard.
As to why Open-MPI wastes CPU cycles testing for datatype validity
when count=0, that is a question for someone else to answer.
Implementations have no obligation enforce every letter of the MPI
standard.
Jeff
On Wed, Jan 13, 2016 at 6:11 AM, Jim Edwards <jedwa...@ucar.edu
<mailto:jedwa...@ucar.edu>> wrote:
It seems to me that when there is a question of interpretation of
the standard one should ask the consequences of each potential
interpretation. It just makes sense that MPI_DATATYPE_NULL
should be allowed when the count is 0, otherwise you need to
insert some random datatype just to fill the array.
Can you make any argument in support of not allowing it (other
than that's the way you've interpreted the standard)?
On Tue, Jan 12, 2016 at 10:44 PM, Gilles Gouaillardet
<gilles.gouaillar...@gmail.com
<mailto:gilles.gouaillar...@gmail.com>> wrote:
Thanks Jeff,
i found it at
http://lists.mpi-forum.org/mpi-forum/2016/01/3152.php
i'd like to re-iterate what i wrote earlier about example 4.23
MPI_DATATYPE_NULL is used as a recv type on non root tasks,
and per the mpi 3.1 standard, recv type is "significant only
at root"
in the case of MPI_Gatherv, MPI_DATATYPE_NULL is *not*
significant,
but in the case of MPI_Alltoallw, it *is* significant.
as far as i am concerned, and to say the least, these are two
distinct
shades of grey.
IMHO, it would be more intuitive if the use of
MPI_DATATYPE_NULL was
allowed with a zero count, and in both MPI_Alltoallw *and*
MPI_Sendrecv.
i still believe George interpretation is the correct one, and Bill
Gropp agreed with him.
and btw, is example 4.23 correct ?
/* fwiw, i did copy/paste it and found several missing local
variable
myrank, i, and comm
and i'd rather have MPI_COMM_WORLD than comm */
and what if recvcount is negative on non root task ?
should it be an error (negative int) or not (not significant
value) ?
Cheers,
Gilles
On Wed, Jan 13, 2016 at 2:15 PM, Jeff Hammond
<jeff.scie...@gmail.com <mailto:jeff.scie...@gmail.com>> wrote:
> 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 <mailto: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 <mailto: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 list
>> us...@open-mpi.org <mailto: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 <mailto:jeff.scie...@gmail.com>
> http://jeffhammond.github.io/
>
> _______________________________________________
> users mailing list
> us...@open-mpi.org <mailto: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/28261.php
_______________________________________________
users mailing list
us...@open-mpi.org <mailto: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/28262.php
--
Jim Edwards
CESM Software Engineer
National Center for Atmospheric Research
Boulder, CO
_______________________________________________
users mailing list
us...@open-mpi.org <mailto: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/28266.php
--
Jeff Hammond
jeff.scie...@gmail.com <mailto:jeff.scie...@gmail.com>
http://jeffhammond.github.io/
_______________________________________________
users mailing list
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/28267.php