[mpi-21] Ballot 4 proposal: INOUT arguments

Jeff Squyres jsquyres at [hidden]
Wed Jan 30 20:34:31 CST 2008



1. Why do we need to indicate the INOUT status of the back-end MPI  
object in the language neutral bindings?  All the bindings --  
regardless of language -- only deal with the MPI handles, not the back- 
end MPI objects.

2. Adding qualifiers on what is supposed to happen to the back-end MPI  
object would seem to require additional semantics on the back-end MPI  
object.  Should we really be specifying what the implementation must/ 
must not do with the back-end MPI object?  Who benefits from that?

On Jan 29, 2008, at 12:07 PM, Rolf Rabenseifner wrote:

> Proposal:
> The current text in MPI 2.0 Sect. 2.3 Procedure Specification,
> page 6 lines 30-34 read:
>
>  There is one special case — if an argument is a handle to an
>  opaque object (these terms are defined in Section 2.5.1), and
>  the object is updated by the procedure call, then the argument
>  is marked OUT. It is marked this way even though the handle
>  itself is not modified — we use the OUT attribute to denote
>  that what the handle references is updated. Thus, in C++,
>  IN arguments are either references or pointers to const objects.
>
> but should read:
>
>  There is one special case — if an argument is a handle to an
>  opaque object (these terms are defined in Section 2.5.1), and
>  the object is updated by the procedure call
>  but the handle itself is not modified , then the argument
>  is marked IN/INOUT.
>  We use the first part (IN) to specify the use of the handle
>  and the second part (INOUT) to specify the use of the opaque
>  object.
>  Thus, in C++,
>  IN arguments are either references or pointers to const objects,
>  IN/INOUT arguments are references to const handles to non-const
>  objects.
>
> In all reoutines mentioned in the clarification below,
> the INOUT handle declaration (in MPI-2.0) and the IN handle  
> declaration
> (in MPI-1.1) ist modified into a IN/INOUT handle declaaration.
> ____________________________
>
> Rationale for this proposal:
>
> I have checked the total MPI 1.1 and 2.0 standard to find
> all routines with an argument specification according to
> the following declaration pattern:
>
>  Language independent interface:
>     INOUT   handle
>  C interface
>     MPI_handletype handle
>
> We can find this pattern only in MPI-2.0 at following
> routines:
>
>  MPI_INFO_SET / _DELETE
>  MPI_xxxx_SET_ERRHANDLER  with xxxx=COMM / TYPE / WIN
>  MPI_GREQUEST_COMPLETE
>  MPI_xxxx_SET_NAME        with xxxx=COMM / TYPE / WIN
>  MPI_xxxx_SET_ATTR        with xxxx=COMM / TYPE / WIN
>  MPI_xxxx_DELETE_ATTR     with xxxx=COMM / TYPE / WIN
>  MPI_FILE_SET_SIZE / _PREALLOCATE  / _SET_INFO  / _SET_VIEW
>  MPI_FILE_WRITE_AT / _WRITE_AT_ALL / _IWRITE_AT
>  MPI_FILE_READ     / _READ_ALL     / _WRITE     / _WRITE_ALL
>  MPI_FILE_IREAD    / _IWRITE
>  MPI_FILE_SEEK
>  MPI_FILE_READ_SHARED              / _WRITE_SHARED
>  MPI_FILE_IREAD_SHARED             / _IWRITE_SHARED
>  MPI_FILE_READ_ORDERED             / _WRITE_ORDERED
>  MPI_FILE_SEEK_SHARED
>  MPI_FILE_WRITE_AT_ALL_BEGIN       / MPI_FILE_WRITE_AT_ALL_END
>  MPI_FILE_READ_ALL_BEGIN           / MPI_FILE_READ_ALL_END
>  MPI_FILE_WRITE_ALL_BEGIN          / MPI_FILE_WRITE_ALL_END
>  MPI_FILE_READ_ORDERED_BEGIN       / MPI_FILE_READ_ORDERED_END
>  MPI_FILE_WRITE_ORDERED_BEGIN      / MPI_FILE_WRITE_ORDERED_END
>  MPI_FILE_SET_ATOMICITY            / _SYNC
>
> All these routines keep the handle itself unchanged, but the
> opaque object is modified in a way, that with oother MPI routines
> this change can be detected.
> For example, an attribute is cached or changed, a file pointer
> is moved, the content of a file was modified.
>
> The current text in MPI 2.0 Sect. 2.3 Procedure Specification,
> page 6 lines 30-34 read:
>
>  There is one special case — if an argument is a handle to an
>  opaque object (these terms are defined in Section 2.5.1), and
>  the object is updated by the procedure call, then the argument
>  is marked OUT. It is marked this way even though the handle
>  itself is not modified — we use the OUT attribute to denote
>  that what the handle references is updated. Thus, in C++,
>  IN arguments are either references or pointers to const objects.
>
> With this definition (that I want to change later on) the use
> of INOUT is correct.
>
> In MPI-1.1 we have several of such routines, but in all cases,
> the handle is declared only as IN.
>
> I hope, I could find all of them:
>
>  MPI_ATTR_PUT / _ DELETE
>  MPI_ERRHANDLER_SET
>    (these routines are now deprecated, but compare with use of
>     INOUT in MPI_COMM_SET_ATTR and MPI_COMM_DELETE_ATTR in MPI-2.0)
>
> The following proposal should remove this inconsistency and
> should be a basis for correct definition of const.
> ____________________________
>
> I hope, with this proposal, the INOUT handle problem can be really  
> solved.
>
> Best regards
> Rolf
>
>
> Dr. Rolf Rabenseifner . . . . . . . . . .. email rabenseifner_at_[hidden]
> High Performance Computing Center (HLRS) . phone ++49(0)711/685-65530
> University of Stuttgart . . . . . . . . .. fax ++49(0)711 / 685-65832
> Head of Dpmt Parallel Computing . . . www.hlrs.de/people/rabenseifner
> Nobelstr. 19, D-70550 Stuttgart, Germany . (Office: Allmandring 30)
> _______________________________________________
> mpi-21 mailing list
> mpi-21_at_[hidden]
> http://lists.cs.uiuc.edu/mailman/listinfo/mpi-21


-- 
Jeff Squyres
Cisco Systems




More information about the Mpi-21 mailing list