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

Reply via email to