22.4.2. Changes in MPI-3.0

PreviousUpNext
Up: Changes from Version 2.2 to Version 3.0 Next: Changes from Version 2.1 to Version 2.2 Previous: Fixes to Errata in Previous Versions of MPI

    1. Section Deprecated and Removed Interfaces on page Deprecated and Removed Interfaces, Section C++ Bindings on page C++ Bindings and all other chapters.
    The C++ bindings were removed from the standard. See errata in Section Fixes to Errata in Previous Versions of MPI on page Fixes to Errata in Previous Versions of MPI for the latest changes to the MPI C++ binding defined in MPI-2.2.
    This change may affect backward compatibility.


    2. Section Deprecated and Removed Interfaces on page Deprecated and Removed Interfaces, Section Deprecated since MPI-2.0 on page Deprecated since MPI-2.0 and Section Removed MPI-1 Bindings on page Removed MPI-1 Bindings.
    The deprecated functions MPI_TYPE_HVECTOR, MPI_TYPE_HINDEXED, MPI_TYPE_STRUCT, MPI_ADDRESS, MPI_TYPE_EXTENT, MPI_TYPE_LB, MPI_TYPE_UB, MPI_ERRHANDLER_CREATE (and its callback function prototype MPI_Handler_function), MPI_ERRHANDLER_SET, MPI_ERRHANDLER_GET, the deprecated special datatype handles MPI_LB, MPI_UB, and the constants MPI_COMBINER_HINDEXED_INTEGER, MPI_COMBINER_HVECTOR_INTEGER, MPI_COMBINER_STRUCT_INTEGER were removed from the standard.
    This change may affect backward compatibility.


    3. Section Procedure Specification on page Procedure Specification.
    Clarified parameter usage for IN parameters. C bindings are now const-correct where backward compatibility is preserved.


    4. Section Named Constants on page Named Constants and Section Distributed Graph Constructor on page Distributed Graph Constructor.
    The recommended C implementation value for MPI_UNWEIGHTED changed from NULL to non-NULL. An additional weight array constant ( MPI_WEIGHTS_EMPTY) was introduced.


    5. Section Named Constants on page Named Constants and Section Version Inquiries on page Version Inquiries.
    Added the new routine MPI_GET_LIBRARY_VERSION to query library specific versions, and the new constant MPI_MAX_LIBRARY_VERSION_STRING.


    6. Sections Counts, Message Data, 4, Predefined Reduction Operations, on pages Counts, Message Data, 4, Predefined Reduction Operations, Sections Derived Datatypes,Extent and Bounds of Datatypes,True Extent of Datatypes,Use of General Datatypes in Communication,Host Rankon pages Derived Datatypes,Extent and Bounds of Datatypes,True Extent of Datatypes,Use of General Datatypes in Communication,Host Rank,and Annex Defined Constants on page Defined Constants.
    New inquiry functions, MPI_TYPE_SIZE_X, MPI_TYPE_GET_EXTENT_X, MPI_TYPE_GET_TRUE_EXTENT_X, and MPI_GET_ELEMENTS_X, return their results as an MPI_Count value, which is a new type large enough to represent element counts in memory, file views, etc. A new function, MPI_STATUS_SET_ELEMENTS_X, modifies the opaque part of an MPI_Status object so that a call to MPI_GET_ELEMENTS_X returns the provided MPI_Count value (in Fortran, INTEGER(KIND=MPI_COUNT_KIND) ). The corresponding predefined datatype is MPI_COUNT.


    7. Chapter Point-to-Point Communication on page Point-to-Point Communication through Chapter Language Bindings on page Language Bindings.
    In the C language bindings, the array-arguments' interfaces were modified to consistently use [] instead of *.

    Exceptions are MPI_INIT, which continues to use char ***argv (correct because of subtle rules regarding the use of the & operator with char *argv[]), and MPI_INIT_THREAD, which is changed to be consistent with MPI_INIT.


    8. Sections Return Status,Address and Size Procedures,Use of General Datatypes in Communication,Pack and Unpackon pages Return Status, Address and Size Procedures, Use of General Datatypes in Communication, Pack and Unpack.
    The functions MPI_GET_COUNT and MPI_GET_ELEMENTS were defined to set the count argument to MPI_UNDEFINED when that argument would overflow. The functions MPI_PACK_SIZE and MPI_TYPE_SIZE were defined to set the size argument to MPI_UNDEFINED when that argument would overflow. In all other MPI-2.2 routines, the type and semantics of the count arguments remain unchanged, i.e., int or INTEGER.


    9. Section Passing MPI_STATUS_IGNORE for Status on page Passing MPI_STATUS_IGNORE for Status, and Section Probe and Cancel on page Probe and Cancel.
    MPI_STATUS_IGNORE can also be used in MPI_IPROBE, MPI_PROBE, MPI_IMPROBE, and MPI_MPROBE.


    10. Section Probe and Cancel on page Probe and Cancel and Section Null MPI Processes on page Null MPI Processes.
    The use of MPI_PROC_NULL in probe operations was clarified. A special predefined message MPI_MESSAGE_NO_PROC was defined for the use of matching probe (i.e., the new MPI_MPROBE and MPI_IMPROBE) with MPI_PROC_NULL.


    11. Sections Matching Probe, Matched Receives, Transfer of Handles, Defined Constants on pages Matching Probe, Matched Receives, Transfer of Handles, Defined Constants.
    Like MPI_PROBE and MPI_IPROBE, the new MPI_MPROBE and MPI_IMPROBE operations allow incoming messages to be queried without actually receiving them, except that MPI_MPROBE and MPI_IMPROBE provide a mechanism to receive the specific message with the new routines MPI_MRECV and MPI_IMRECV regardless of other intervening probe or receive operations. The opaque object MPI_Message, the null handle MPI_MESSAGE_NULL, and the conversion functions MPI_Message_c2f and MPI_Message_f2c were defined.


    12. Section Datatype Constructors on page Datatype Constructors and Section Decoding a Datatype on page Decoding a Datatype.
    The routine MPI_TYPE_CREATE_HINDEXED_BLOCK and constant MPI_COMBINER_HINDEXED_BLOCK were added.


    13. Chapter Collective Communication on page Collective Communication and Section Nonblocking Collective Operations on page Nonblocking Collective Operations.
    Added nonblocking interfaces to all collective operations.


    14. Sections Communicator Constructors, Communicator Info,Window Info,on pages Communicator Constructors, Communicator Info,Window Info.
    The new routines MPI_COMM_DUP_WITH_INFO, MPI_COMM_SET_INFO, MPI_COMM_GET_INFO, MPI_WIN_SET_INFO, and MPI_WIN_GET_INFO wereadded. The routine MPI_COMM_DUP must also duplicate info hints.


    15. Section Communicator Constructors on page Communicator Constructors.
    Added MPI_COMM_IDUP.


    16. Section Communicator Constructors on page Communicator Constructors.
    Added the new communicator construction routine MPI_COMM_CREATE_GROUP, which is invoked only by the processes in the group of the new communicator being constructed.


    17. Section Communicator Constructors on page Communicator Constructors.
    Added the MPI_COMM_SPLIT_TYPE routine and the communicator split type constant MPI_COMM_TYPE_SHARED.


    18. Section Inter-Communicator Operations on page Inter-Communicator Operations.
    In MPI-2.2, communication involved in an MPI_INTERCOMM_CREATE operation could interfere with point-to-point communication on the parent communicator with the same tag or MPI_ANY_TAG. This interference has been removed in MPI-3.0.


    19. Section Naming Objects on page Naming Objects.
    Section 6.8 on page 238. The constant MPI_MAX_OBJECT_NAME also applies for type and window names.


    20. Section Low-Level Topology Functions on page Low-Level Topology Functions.
    MPI_CART_MAP can also be used for a zero-dimensional topologies.


    21. Section Neighborhood Collective Communication on Virtual Topologies on page Neighborhood Collective Communication on Virtual Topologies and Section Nonblocking Neighborhood Communication on Process Topologies on page Nonblocking Neighborhood Communication on Process Topologies.
    The following neighborhood collective communication routines were added to support sparse communication on virtual topology grids: MPI_NEIGHBOR_ALLGATHER, MPI_NEIGHBOR_ALLGATHERV, MPI_NEIGHBOR_ALLTOALL, MPI_NEIGHBOR_ALLTOALLV, MPI_NEIGHBOR_ALLTOALLW and the nonblocking variants MPI_INEIGHBOR_ALLGATHER, MPI_INEIGHBOR_ALLGATHERV, MPI_INEIGHBOR_ALLTOALL, MPI_INEIGHBOR_ALLTOALLV, and MPI_INEIGHBOR_ALLTOALLW. The displacement arguments in MPI_NEIGHBOR_ALLTOALLW and MPI_INEIGHBOR_ALLTOALLW were defined as address size integers. In MPI_DIST_GRAPH_NEIGHBORS, an ordering rule was added for communicators created with MPI_DIST_GRAPH_CREATE_ADJACENT.


    22. Section Starting MPI Processes on page Starting MPI Processes and Section Starting MPI Processes on page Starting MPI Processes.
    The use of MPI_INIT, MPI_INIT_THREAD and MPI_FINALIZE was clarified. After MPI is initialized, the application can access information about the execution environment by querying the new predefined info object MPI_INFO_ENV.


    23. Section Starting MPI Processes on page Starting MPI Processes.
    Allow calls to MPI_T routines before MPI_INIT and after MPI_FINALIZE.


    24. Chapter One-Sided Communications on page One-Sided Communications.
    Substantial revision of the entire One-sided chapter, with new routines for window creation, additional synchronization methods in passive target communication, new one-sided communication routines, a new memory model, and other changes.


    25. Section The MPI Tool Information Interface on page The MPI Tool Information Interface.
    A new MPI Tool Information Interface was added.

    The following changes are related to the Fortran language support.


    26. Section Procedure Specification on page Procedure Specification, and Sections Overview, Fortran Support Through the mpi_f08 Module, Requirements on Fortran Compilers on pages Overview, Fortran Support Through the mpi_f08 Module, and Requirements on Fortran Compilers.
    The new mpi_f08 Fortran module was introduced.


    27. Section Opaque Objects on page Opaque Objects, and Sections Fortran Support Through the mpi_f08 Module, Fortran Support Through the mpi Module, Requirements on Fortran Compilers on pages Fortran Support Through the mpi_f08 Module, Fortran Support Through the mpi Module, and Requirements on Fortran Compilers.
    Handles to opaque objects were defined as named types within the mpi_f08 Fortran module. The operators .EQ., .NE., ==, and /= were overloaded to allow the comparison of these handles. The handle types and the overloaded operators are also available through the mpi Fortran module.


    28. Sections Named Constants, Choice on pages Named Constants, Choice, Sections Overview, Problems With Fortran Bindings for MPI, Problems Due to Strong Typing, Problems Due to Data Copying and Sequence Association with Subscript Triplets, Problems Due to Data Copying and Sequence Association with Vector Subscripts on pages Overview, Problems With Fortran Bindings for MPI, Problems Due to Strong Typing, Problems Due to Data Copying and Sequence Association with Subscript Triplets, Problems Due to Data Copying and Sequence Association with Vector Subscripts, and Sections Fortran Support Through the mpi_f08 Module, Fortran Support Through the mpi Module, Requirements on Fortran Compilers on pages Fortran Support Through the mpi_f08 Module, Fortran Support Through the mpi Module, Requirements on Fortran Compilers.
    Within the mpi_f08 Fortran module, choice buffers were defined as assumed-type and assumed-rank according to Fortran 2008 with TS 29113 [47], and the compile-time constant MPI_SUBARRAYS_SUPPORTED was set to .TRUE.. With this, Fortran subscript triplets can be used in nonblocking MPI operations; vector subscripts are not supported in nonblocking operations. If the compiler does not support this Fortran TS 29113 feature, the constant is set to .FALSE..


    29. Section Fortran Binding Issues on page Fortran Binding Issues, Section Fortran Support Through the mpi_f08 Module on page Fortran Support Through the mpi_f08 Module, and Section Requirements on Fortran Compilers on page Requirements on Fortran Compilers.
    The ierror dummy arguments are OPTIONAL within the mpi_f08 Fortran module.


    30. Section Return Status on page Return Status, Sections Fortran Support Through the mpi_f08 Module, Fortran Support Through the mpi Module, Requirements on Fortran Compilers, on pages Fortran Support Through the mpi_f08 Module, Fortran Support Through the mpi Module, Requirements on Fortran Compilers, and Section Status on page Status.
    Within the mpi_f08 Fortran module, the status was defined as TYPE(MPI_Status). Additionally, within both the mpi and the mpi_f08 modules, the constants MPI_STATUS_SIZE, MPI_SOURCE, MPI_TAG, MPI_ERROR, and TYPE(MPI_Status) are defined. New conversion routines were added: MPI_STATUS_F2F08, MPI_STATUS_F082F, MPI_Status_c2f08, and MPI_Status_f082c, In mpi.h, the new type MPI_F08_status, and the external variables MPI_F08_STATUS_IGNORE and MPI_F08_STATUSES_IGNORE were added.


    31. Section Buffer Allocation and Usage on page Buffer Allocation and Usage.
    In Fortran with the mpi module or mpif.h, the type of the buffer_addr argument of MPI_BUFFER_DETACH is incorrectly defined and the argument is therefore unused.


    32. Section Derived Datatypes on page Derived Datatypes, Section Lower-Bound and Upper-Bound Markers on page Lower-Bound and Upper-Bound Markers, and Section Fortran Derived Types on page Fortran Derived Types.
    The Fortran alignments of basic datatypes within Fortran derived types are implementation dependent; therefore it is recommended to use the BIND(C) attribute for derived types in MPI communication buffers. If an array of structures (in C/C++) or derived types (in Fortran) is to be used in MPI communication buffers, it is recommended that the user creates a portable datatype handle and additionally applies MPI_TYPE_CREATE_RESIZED to this datatype handle.


    33. SectionsDuplicating a Datatype, User-Defined Reduction Operations, MPI Process-Local Reduction, Datatypes, Naming Objects, Error Handlers for Communicators, Error Handlers for Windows, Error Handlers for Files, Deprecated since MPI-2.0, Additional Support for Fortran Numeric Intrinsic Types on pagesDuplicating a Datatype, User-Defined Reduction Operations, MPI Process-Local Reduction, Datatypes, Naming Objects, Error Handlers for Communicators, Error Handlers for Windows, Error Handlers for Files, Deprecated since MPI-2.0, and Additional Support for Fortran Numeric Intrinsic Types. In some routines, the dummy argument names were changed because they were identical to the Fortran keywords TYPE and FUNCTION. The new dummy argument names must be used because the mpi and mpi_f08 modules guarantee keyword-based actual argument lists. The argument name type was changed in MPI_TYPE_DUP, the Fortran USER_FUNCTION of MPI_OP_CREATE, MPI_TYPE_SET_ATTR, MPI_TYPE_GET_ATTR, MPI_TYPE_DELETE_ATTR, MPI_TYPE_SET_NAME, MPI_TYPE_GET_NAME, MPI_TYPE_MATCH_SIZE, the callback prototype definition MPI_Type_delete_attr_function, and the predefined callback function MPI_TYPE_NULL_DELETE_FN; function was changed in MPI_OP_CREATE, MPI_COMM_CREATE_ERRHANDLER, MPI_WIN_CREATE_ERRHANDLER, MPI_FILE_CREATE_ERRHANDLER, and MPI_ERRHANDLER_CREATE. For consistency reasons, INOUBUF was changed to INOUTBUF in MPI_REDUCE_LOCAL, and intracomm to newintracomm in MPI_INTERCOMM_MERGE.


    34. Section Communicators on page Communicators.
    It was clarified that in Fortran, the flag values returned by a comm_copy_attr_fn callback, including MPI_COMM_NULL_COPY_FN and MPI_COMM_DUP_FN, are .FALSE. and .TRUE.; see MPI_COMM_CREATE_KEYVAL.


    35. Section Memory Allocation on page Memory Allocation.
    With the mpi and mpi_f08 Fortran modules, MPI_ALLOC_MEM now also supports TYPE(C_PTR) C-pointers instead of only returning an address-sized integer that may be usable together with a nonstandard Cray-pointer.


    36. Section Fortran Derived Types on page Fortran Derived Types, and Section Requirements on Fortran Compilers on page Requirements on Fortran Compilers.
    Fortran SEQUENCE and BIND(C) derived application types can now be used as buffers in MPI operations.


    37. Section Optimization Problems, an Overview on page Optimization Problems, an Overview to Section Permanent Data Movement on page Permanent Data Movement, Section Requirements on Fortran Compilers on page Requirements on Fortran Compilers, and Section Additional Support for Fortran Register-Memory-Synchronization on page Additional Support for Fortran Register-Memory-Synchronization.
    The sections about Fortran optimization problems and their solutions were partially rewritten and new methods are added, e.g., the use of the ASYNCHRONOUS attribute. The constant MPI_ASYNC_PROTECTS_NONBLOCKING tells whether the semantics of the ASYNCHRONOUS attribute is extended to protect nonblocking operations. The Fortran routine MPI_F_SYNC_REG is added. MPI-3.0 compliance for an MPI library together with a Fortran compiler is defined in Section Requirements on Fortran Compilers.


    38. Section Fortran Support Through the mpi_f08 Module on page Fortran Support Through the mpi_f08 Module.
    Within the mpi_f08 Fortran module, dummy arguments are now declared with INTENT=IN, OUT, or INOUT as defined in the mpi_f08 interfaces.


    39. Section Fortran Support Through the mpi Module on page Fortran Support Through the mpi Module, and Section Requirements on Fortran Compilers on page Requirements on Fortran Compilers.
    The existing mpi Fortran module must implement compile-time argument checking.


    40. Section Fortran Support Through the mpif.h Include File on page Fortran Support Through the mpif.h Include File.
    The use of the mpif.h Fortran include file is now strongly discouraged.


    41. Section Defined Constants, Table Predefined functions on page Defined Constants, Section Prototype Definitions on page Prototype Definitions, and Section Groups, Contexts, Communicators, and Caching Fortran 2008 Bindings on page Groups, Contexts, Communicators, and Caching Fortran 2008 Bindings.
    Within the new mpi_f08 module, all callback prototype definitions are now defined with explicit interfaces PROCEDURE(MPI_...) that have the BIND(C) attribute; user-written callbacks must be modified if the mpi_f08 module is used.


    42. Section Prototype Definitions on page Prototype Definitions.
    In some routines, the Fortran callback prototype names were changed from ..._FN to ..._FUNCTION to be consistent with the other language bindings.


PreviousUpNext
Up: Changes from Version 2.2 to Version 3.0 Next: Changes from Version 2.1 to Version 2.2 Previous: Fixes to Errata in Previous Versions of MPI


Return to MPI-4.1 Standard Index
Return to MPI Forum Home Page

(Unofficial) MPI-4.1 of November 2, 2023
HTML Generated on November 19, 2023