[mpi-21] Ballot 4 proposal: INOUT arguments
Rolf Rabenseifner
rabenseifner at [hidden]
Tue Jan 29 11:07:18 CST 2008
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)
More information about the Mpi-21
mailing list