Is it easy to update *ompi_datatype_is_valid* to judge invalid datatypes,
such as -1?

Dahai

On Fri, Jun 2, 2017 at 9:00 AM, Gilles Gouaillardet <
gilles.gouaillar...@gmail.com> wrote:

> MPI_Datatype is a opaque handler, and -1 is a (signed) integer, so
> what you are trying is very likely to have an undefined behavior per
> the standard.
>
> if this seems to work with MPICH, this is not portable anyway, and
> will very likely cause a crash with OpenMPI
>
>
> Cheers,
>
> Gilles
>
> On Fri, Jun 2, 2017 at 10:41 PM, Dahai Guo <dahai....@gmail.com> wrote:
> > so you are saying that a user should NOT define send/recv data type as
> -1,
> > in openmpi?
> >
> > Dahai
> >
> > On Thu, Jun 1, 2017 at 6:59 PM, Gilles Gouaillardet <gil...@rist.or.jp>
> > wrote:
> >>
> >> +1
> >>
> >>
> >> MPI_Datatype is an opaque handler, and in Open MPI, this is an
> >> ompi_datatype_t *
> >>
> >> so we can only test for NULL pointers or MPI_DATATYPE_NULL that cannot
> be
> >> used per the standard.
> >>
> >>
> >> fwiw, and iirc, MPICH made an other design choice and MPI_Datatype is a
> >> number, so the mpich equivalent of ompi_datatype_is_valid()
> >>
> >> might be able to handle random values without crashing.
> >>
> >>
> >> Cheers,
> >>
> >>
> >> Gilles
> >>
> >>
> >> On 6/2/2017 7:36 AM, George Bosilca wrote:
> >>>
> >>> You have to pass it an allocated datatype, and it tells you if the
> >>> pointer object is a valid MPI datatype for communications (aka it has a
> >>> corresponding type with a well defined size, extent and alignment).
> >>>
> >>> There is no construct in C able to tell you if a random number if a
> valid
> >>> C "object".
> >>>
> >>>   George.
> >>>
> >>>
> >>> On Thu, Jun 1, 2017 at 5:42 PM, Dahai Guo <dahai....@gmail.com
> >>> <mailto:dahai....@gmail.com>> wrote:
> >>>
> >>>     Hi,
> >>>
> >>>     if I insert following lines somewhere openmpi, such
> >>>     as ompi/mpi/c/iscatter.c
> >>>
> >>>       printf(" --- in MPI_Iscatter\n");
> >>>     //MPI_Datatype dt00 = (MPI_Datatype) MPI_INT;
> >>>     *MPI_Datatype dt00 = (MPI_Datatype) -1;*
> >>>     if(*!ompi_datatype_is_valid(dt00)* ) {
> >>>       printf(" --- dt00 is NOT valid \n");
> >>>     }
> >>>
> >>>     The attached test code will give the errors:
> >>>
> >>>     *** Process received signal ***
> >>>     Signal: Segmentation fault (11)
> >>>     Signal code: Address not mapped (1)
> >>>     Failing at address: 0xf
> >>>     [ 0] [0x3fff9d480478]
> >>>     ...
> >>>
> >>>     Is it a bug in the function *ompi_datatype_is_valid(..) *? or I
> >>>     miss something?
> >>>
> >>>     Dahai
> >>>
> >>>     _______________________________________________
> >>>     devel mailing list
> >>>     devel@lists.open-mpi.org <mailto:devel@lists.open-mpi.org>
> >>>     https://rfd.newmexicoconsortium.org/mailman/listinfo/devel
> >>>     <https://rfd.newmexicoconsortium.org/mailman/listinfo/devel>
> >>>
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> devel mailing list
> >>> devel@lists.open-mpi.org
> >>> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel
> >>
> >>
> >> _______________________________________________
> >> devel mailing list
> >> devel@lists.open-mpi.org
> >> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel
> >
> >
> >
> > _______________________________________________
> > devel mailing list
> > devel@lists.open-mpi.org
> > https://rfd.newmexicoconsortium.org/mailman/listinfo/devel
> _______________________________________________
> devel mailing list
> devel@lists.open-mpi.org
> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel
>
_______________________________________________
devel mailing list
devel@lists.open-mpi.org
https://rfd.newmexicoconsortium.org/mailman/listinfo/devel

Reply via email to