ISO/IEC JTC1/SC22/WG5 N1755 Request for new features from MPI Forum Craig Rasmussen References: 08-185r1, 08-255 The MPI Forum has been restarted in order to update the Message Passing Interface (MPI) standard. As part of this standardization effort, a new Fortran binding will be created for version 3.0 of the MPI standard. The MPI Forum has requested that J3 consider modifying the Fortran standard (or provide guidance) to accomplish the following: 1. A mechanism to suppress copy-in/copy-out semantics for MPI asynchronous operations. 2. Suppress argument checking for MPI choice buffers (C void * formal parameters). A series of straw votes were taken at J3 meeting 184 to determine how to address the request from the MPI Forum. The results were: 1. The VOLATILE attribute should be given to both the actual and dummy arguments to suppress copy-in/copy-out. 2. J3 voted to consider three different candidates for suppressing argument checking of C void * formal parameters. The results of the vote were mixed. At a later date, the HPC subgroup decided on one of the options: a. Create new syntax, TYPE(*) and DIMENSION(:), to allow any type, kind, and rank of actual argument. A TYPE(*) dummy can be argument associated with any type and kind of actual argument. A dummy argument with the DIMENSION(:) attribute can be argument associated with any rank actual argument, including a scalar. WG5 is asked to consider TYPE(*) and DIMENSION(:) as a work item for the C Interop TR. Regarding straw vote 1: A problem with using VOLATILE attribute is that it can have performance implications. Therefore Aleksandar Donev in paper 08-255 proposed the following: We should explicitly allow a variable with the ASYNCHRONOUS attribute to be modified or examined by means external to the processor, similarly to VOLATILE variables. If such a variable is modified or examined externally during a segment, that variable must not be referenced or define during that segment. This simple modification solves an existing problem with MPI non-blocking transfer, namely, the need to prevent movement of code across calls to MPI_Wait. The programmer can use SYNC MEMORY to indicate to the compiler that ASYNCHRONOUS variables may be affected and therefore old copies in registers should be discarded and new values written to memory. This is exactly as for coarrays and TARGETs (which may be modified by other images) and also just like SYNC MEMORY needs to be put around external synchronization routines such as MPI_Barrier (see Note 8.39). This idea was subsequently tabled in subgroup as being too substantial a change for the 2008 standard. MPI 3.0 Interface ----------------- An example of a possible interface for MPI 3.0 is shown below for the asynchronous recv function: interface subroutine MPI_Irecv(buf, count, datatype, source, tag, comm, request, err) import :: MPI_Comm, MPI_Datatype, MPI_Request TYPE(*), DIMENSION(*), VOLATILE, intent(inout) :: buf integer, intent(in) :: count type(MPI_Datatype), intent(in) :: datatype integer, intent(in) :: source integer, intent(in) :: tag type(MPI_Comm), intent(in) :: comm type(MPI_Request), intent(out) :: request integer, optional, intent(out) :: err end subroutine MPI_Irecv end interface