Re: [OMPI devel] about ompi_datatype_is_valid

2017-06-02 Thread gilles
out of curiosity, why would you want to do that ?

- Original Message -

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  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  
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 
> 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 >> > 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 
>>> 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

Re: [OMPI devel] about ompi_datatype_is_valid

2017-06-02 Thread Clement FOYER
As George pointed out earlier, there is no construct in C able to tell 
you if a random number is a valid C pointer, i.e., is a valid memory 
address. -1, once casted to a pointer, would correspond to the adress 
0x...f .


It would probably be better to ajust the initial code in order to use 
MPI_DATATYPE_NULL, which would be more standard compliant, and less 
implementation dependant. Also, this stands as well for any MPI_*_NULL, 
as these handlers are opaque, and corresponding to differents types 
depending on the library you are using.


The standard does not define what these handlers are corresponding to, 
letting the implementor defining these symbols. So using them is the 
only way to ensure portability through implementations.


Clément


On 06/02/2017 04:46 PM, Dahai Guo wrote:
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 
> 
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 > 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
>
> 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 
>>> >> 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 
>
>>> 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 

Re: [OMPI devel] about ompi_datatype_is_valid

2017-06-02 Thread Dahai Guo
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  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 
> > 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  >>> > 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 
> >>> 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

Re: [OMPI devel] about ompi_datatype_is_valid

2017-06-02 Thread Gilles Gouaillardet
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  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 
> 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 >> > 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 
>>> 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


Re: [OMPI devel] about ompi_datatype_is_valid

2017-06-02 Thread Dahai Guo
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 
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>> 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 
>> 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

Re: [OMPI devel] about ompi_datatype_is_valid

2017-06-01 Thread Gilles Gouaillardet

+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 > 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 
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


Re: [OMPI devel] about ompi_datatype_is_valid

2017-06-01 Thread George Bosilca
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  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
> https://rfd.newmexicoconsortium.org/mailman/listinfo/devel
>
___
devel mailing list
devel@lists.open-mpi.org
https://rfd.newmexicoconsortium.org/mailman/listinfo/devel

Re: [OMPI devel] about ompi_datatype_is_valid

2017-06-01 Thread gilles
Hi,

did you check the source code for ompi_datatype_is_valid() ?

MPI_Datatype is an opaque handler.

in Open MPI, this is an ompi_datatype_t *;

iirc, ompi_datatype_is_valid() test for a NULL pointer, or MPI_DATATYPE_
NULL.

in your case, you forced an invalid pointer, so the behavior is 
undefined

(and i am not so surprised it crashes)

Cheers,

Gilles

- Original Message -

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
https://rfd.newmexicoconsortium.org/mailman/listinfo/devel