[mpiwg-abi] Tuesday (20 February 2023) meeting agenda

Jeff Hammond jeff.science at gmail.com
Mon Feb 20 13:01:40 CST 2023



>>>> On Mon, Feb 20, 2023 at 6:53 PM Zhou, Hui <zhouh at anl.gov> wrote:
>>>>  >> While it works and means I can avoid predefined handle translations 
>>>> in the forward direction, I still have it in the backwards direction, 
>>>> and it's not exactly simple to resolve all the symbols.
>>>> > 
>>>> > Can you elaborate a bit on the backward translation? I'm not sure I 
>>>> understand what you mean by that.
>>>> 
>>>> I think Jeff meant for output parameters such as in MPI_Comm_create. I believe all handle constants are input only except for NULL handles.
>> 
>> MPI_GROUP_EMPTY is the valid output for all group manipulation functions (they do not return MPI_GROUP_NULL).
>>  
>> 
>> Yeah, NULL handle outputs, but also MPI_Type_get_contents, because "If these were predefined datatypes, then the returned datatype is equal to that (constant) predefined datatype and cannot be freed." 
>>  
>>> >> The second question is whether to #define MPI_HANDLE_NULL 
>>> (MPI_Handle*)0.  Lisandro argues for this, and it would make a lot of 
>>> things easy.
>>> 
>>> > I believe OMPI uses special null objects for nearly all its null handles 
>>> to avoid checking for NULL on every call.
>>> 
>>> From the user's point of view, using 0 as NULL is convenient. Uninitialized static variables are zero-filled. It is also convenient to zero-fill an array.
> 
> Convenient but error prone. If users want a NULL object they need to set it clearly, not rely on assumptions about zero-filled memory regions. OMPI has been doing this for years and no users complained, because it is good practice.
> 

Can you give an example of how it’s error prone? What errors is OMPI catching because it’s not null?

Jeff


>   George.
> 
>  
>> 
>> Indeed.  It would be nice to have zero initialization be equivalent to null handle initialization.
>> 
>> Jeff 
>> 
>>  
>>> -- 
>>> Hui
>>> From: mpiwg-abi <mpiwg-abi-bounces at lists.mpi-forum.org> on behalf of Joseph Schuchart <schuchart at icl.utk.edu>
>>> Sent: Monday, February 20, 2023 8:53 AM
>>> To: mpiwg-abi at lists.mpi-forum.org <mpiwg-abi at lists.mpi-forum.org>
>>> Subject: Re: [mpiwg-abi] Tuesday (20 February 2023) meeting agenda
>>>  
>>> Jeff,
>>> 
>>> You said:
>>> 
>>>  > While it works and means I can avoid predefined handle translations 
>>> in the forward direction, I still have it in the backwards direction, 
>>> and it's not exactly simple to resolve all the symbols.
>>> 
>>> Can you elaborate a bit on the backward translation? I'm not sure I 
>>> understand what you mean by that.
>>> 
>>>  > The second question is whether to #define MPI_HANDLE_NULL 
>>> (MPI_Handle*)0.  Lisandro argues for this, and it would make a lot of 
>>> things easy.
>>> 
>>> I believe OMPI uses special null objects for nearly all its null handles 
>>> to avoid checking for NULL on every call. A null request handle for 
>>> example is a valid input into `MPI_WAIT` and we can get the empty status 
>>> from the null request just like we do from any other request. NULL 
>>> function pointers (MPI_TYPE_NULL_DELETE_FN) can point to an empty 
>>> function that we can simply invoke. NULL pointers require special 
>>> treatment, which is tedious and error prone and has UB lurking around 
>>> the corner. With null objects, we will never receive (or hand out) an 
>>> invalid pointer, which is safe engineering.
>>> 
>>> I'm curious what the benefits are from an application's (or middleware) 
>>> standpoint?
>>> 
>>> Cheers
>>> Joseph
>>> 
>>> On 2/20/23 03:55, Jeff Hammond wrote:
>>> > For the meeting tomorrow, I would like you all to consider the following:
>>> >
>>> > There is consensus regarding the following to get type safety:
>>> > typedef struct MPI_ABI_Handle * MPI_Handle;
>>> >
>>> > We have two choices for predefined handles:
>>> >
>>> > Option 1:
>>> > #define MPI_INT (MPI_Datatype)0x3
>>> >
>>> > Option 2:
>>> > #define MPI_INT (MPI_Datatype)&MPI_ABI_INT
>>> >
>>> > Option 1 relies on implementation defined behavior regarding the 
>>> > casting of integers to pointers, but it is safe.  Gonzalo and I had a 
>>> > long discussion of this, and the only issue is that (intptr_t)MPI_INT 
>>> > == 0x3 is not guaranteed to be true, but (intptr_t)MPI_INT == 
>>> > (intptr_t)(void*)0x3 is.  Both MPICH and Open-MPI already rely on this 
>>> > technique for MPI_IN_PLACE, among others.
>>> >
>>> > The advantage of Option 1 - assuming we use a sensible set of 
>>> > integer values - is that ABI compatibility layers can do translation 
>>> > via a table.  This is most useful for datatypes, where there are ~100 
>>> > predefined handles, and to a lesser extent ops.  For all other 
>>> > handles, there are no more than 3 predefined handles (IIRC).
>>> >
>>> > Option 2 allows run-time resolution of predefined handles, which I 
>>> > thought was good until I implemented it in 
>>> > https://github.com/jeffhammond/mukautuva. While it works and means I 
>>> > can avoid predefined handle translations in the forward direction, I 
>>> > still have it in the backwards direction, and it's not exactly simple 
>>> > to resolve all the symbols.  I think Hui also implemented this in his 
>>> > compatibility layer, although I don't know if he hates it as much as I do.
>>> >
>>> > The second question is whether to #define MPI_HANDLE_NULL 
>>> > (MPI_Handle*)0.  Lisandro argues for this, and it would make a lot of 
>>> > things easy.
>>> >
>>> > I hope that we can decide these two questions today.  For the second 
>>> > meeting, we will address predefined integer constants.
>>> >
>>> > Jeff
>>> >
>>> > -- 
>>> > Jeff Hammond
>>> > jeff.science at gmail.com
>>> > http://jeffhammond.github.io/
>>> >
>>> 
>>> -- 
>>> mpiwg-abi mailing list
>>> mpiwg-abi at lists.mpi-forum.org
>>> https://lists.mpi-forum.org/mailman/listinfo/mpiwg-abi
>>> -- 
>>> mpiwg-abi mailing list
>>> mpiwg-abi at lists.mpi-forum.org
>>> https://lists.mpi-forum.org/mailman/listinfo/mpiwg-abi
>> 
>> 
>> -- 
>> Jeff Hammond
>> jeff.science at gmail.com
>> http://jeffhammond.github.io/
>> -- 
>> mpiwg-abi mailing list
>> mpiwg-abi at lists.mpi-forum.org
>> https://lists.mpi-forum.org/mailman/listinfo/mpiwg-abi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-abi/attachments/20230220/0ddbd370/attachment.html>


More information about the mpiwg-abi mailing list