- •Contents
- •List of Figures
- •List of Tables
- •Acknowledgments
- •Introduction to MPI
- •Overview and Goals
- •Background of MPI-1.0
- •Background of MPI-1.1, MPI-1.2, and MPI-2.0
- •Background of MPI-1.3 and MPI-2.1
- •Background of MPI-2.2
- •Who Should Use This Standard?
- •What Platforms Are Targets For Implementation?
- •What Is Included In The Standard?
- •What Is Not Included In The Standard?
- •Organization of this Document
- •MPI Terms and Conventions
- •Document Notation
- •Naming Conventions
- •Semantic Terms
- •Data Types
- •Opaque Objects
- •Array Arguments
- •State
- •Named Constants
- •Choice
- •Addresses
- •Language Binding
- •Deprecated Names and Functions
- •Fortran Binding Issues
- •C Binding Issues
- •C++ Binding Issues
- •Functions and Macros
- •Processes
- •Error Handling
- •Implementation Issues
- •Independence of Basic Runtime Routines
- •Interaction with Signals
- •Examples
- •Point-to-Point Communication
- •Introduction
- •Blocking Send and Receive Operations
- •Blocking Send
- •Message Data
- •Message Envelope
- •Blocking Receive
- •Return Status
- •Passing MPI_STATUS_IGNORE for Status
- •Data Type Matching and Data Conversion
- •Type Matching Rules
- •Type MPI_CHARACTER
- •Data Conversion
- •Communication Modes
- •Semantics of Point-to-Point Communication
- •Buffer Allocation and Usage
- •Nonblocking Communication
- •Communication Request Objects
- •Communication Initiation
- •Communication Completion
- •Semantics of Nonblocking Communications
- •Multiple Completions
- •Non-destructive Test of status
- •Probe and Cancel
- •Persistent Communication Requests
- •Send-Receive
- •Null Processes
- •Datatypes
- •Derived Datatypes
- •Type Constructors with Explicit Addresses
- •Datatype Constructors
- •Subarray Datatype Constructor
- •Distributed Array Datatype Constructor
- •Address and Size Functions
- •Lower-Bound and Upper-Bound Markers
- •Extent and Bounds of Datatypes
- •True Extent of Datatypes
- •Commit and Free
- •Duplicating a Datatype
- •Use of General Datatypes in Communication
- •Correct Use of Addresses
- •Decoding a Datatype
- •Examples
- •Pack and Unpack
- •Canonical MPI_PACK and MPI_UNPACK
- •Collective Communication
- •Introduction and Overview
- •Communicator Argument
- •Applying Collective Operations to Intercommunicators
- •Barrier Synchronization
- •Broadcast
- •Example using MPI_BCAST
- •Gather
- •Examples using MPI_GATHER, MPI_GATHERV
- •Scatter
- •Examples using MPI_SCATTER, MPI_SCATTERV
- •Example using MPI_ALLGATHER
- •All-to-All Scatter/Gather
- •Global Reduction Operations
- •Reduce
- •Signed Characters and Reductions
- •MINLOC and MAXLOC
- •All-Reduce
- •Process-local reduction
- •Reduce-Scatter
- •MPI_REDUCE_SCATTER_BLOCK
- •MPI_REDUCE_SCATTER
- •Scan
- •Inclusive Scan
- •Exclusive Scan
- •Example using MPI_SCAN
- •Correctness
- •Introduction
- •Features Needed to Support Libraries
- •MPI's Support for Libraries
- •Basic Concepts
- •Groups
- •Contexts
- •Intra-Communicators
- •Group Management
- •Group Accessors
- •Group Constructors
- •Group Destructors
- •Communicator Management
- •Communicator Accessors
- •Communicator Constructors
- •Communicator Destructors
- •Motivating Examples
- •Current Practice #1
- •Current Practice #2
- •(Approximate) Current Practice #3
- •Example #4
- •Library Example #1
- •Library Example #2
- •Inter-Communication
- •Inter-communicator Accessors
- •Inter-communicator Operations
- •Inter-Communication Examples
- •Caching
- •Functionality
- •Communicators
- •Windows
- •Datatypes
- •Error Class for Invalid Keyval
- •Attributes Example
- •Naming Objects
- •Formalizing the Loosely Synchronous Model
- •Basic Statements
- •Models of Execution
- •Static communicator allocation
- •Dynamic communicator allocation
- •The General case
- •Process Topologies
- •Introduction
- •Virtual Topologies
- •Embedding in MPI
- •Overview of the Functions
- •Topology Constructors
- •Cartesian Constructor
- •Cartesian Convenience Function: MPI_DIMS_CREATE
- •General (Graph) Constructor
- •Distributed (Graph) Constructor
- •Topology Inquiry Functions
- •Cartesian Shift Coordinates
- •Partitioning of Cartesian structures
- •Low-Level Topology Functions
- •An Application Example
- •MPI Environmental Management
- •Implementation Information
- •Version Inquiries
- •Environmental Inquiries
- •Tag Values
- •Host Rank
- •IO Rank
- •Clock Synchronization
- •Memory Allocation
- •Error Handling
- •Error Handlers for Communicators
- •Error Handlers for Windows
- •Error Handlers for Files
- •Freeing Errorhandlers and Retrieving Error Strings
- •Error Codes and Classes
- •Error Classes, Error Codes, and Error Handlers
- •Timers and Synchronization
- •Startup
- •Allowing User Functions at Process Termination
- •Determining Whether MPI Has Finished
- •Portable MPI Process Startup
- •The Info Object
- •Process Creation and Management
- •Introduction
- •The Dynamic Process Model
- •Starting Processes
- •The Runtime Environment
- •Process Manager Interface
- •Processes in MPI
- •Starting Processes and Establishing Communication
- •Reserved Keys
- •Spawn Example
- •Manager-worker Example, Using MPI_COMM_SPAWN.
- •Establishing Communication
- •Names, Addresses, Ports, and All That
- •Server Routines
- •Client Routines
- •Name Publishing
- •Reserved Key Values
- •Client/Server Examples
- •Ocean/Atmosphere - Relies on Name Publishing
- •Simple Client-Server Example.
- •Other Functionality
- •Universe Size
- •Singleton MPI_INIT
- •MPI_APPNUM
- •Releasing Connections
- •Another Way to Establish MPI Communication
- •One-Sided Communications
- •Introduction
- •Initialization
- •Window Creation
- •Window Attributes
- •Communication Calls
- •Examples
- •Accumulate Functions
- •Synchronization Calls
- •Fence
- •General Active Target Synchronization
- •Lock
- •Assertions
- •Examples
- •Error Handling
- •Error Handlers
- •Error Classes
- •Semantics and Correctness
- •Atomicity
- •Progress
- •Registers and Compiler Optimizations
- •External Interfaces
- •Introduction
- •Generalized Requests
- •Examples
- •Associating Information with Status
- •MPI and Threads
- •General
- •Initialization
- •Introduction
- •File Manipulation
- •Opening a File
- •Closing a File
- •Deleting a File
- •Resizing a File
- •Preallocating Space for a File
- •Querying the Size of a File
- •Querying File Parameters
- •File Info
- •Reserved File Hints
- •File Views
- •Data Access
- •Data Access Routines
- •Positioning
- •Synchronism
- •Coordination
- •Data Access Conventions
- •Data Access with Individual File Pointers
- •Data Access with Shared File Pointers
- •Noncollective Operations
- •Collective Operations
- •Seek
- •Split Collective Data Access Routines
- •File Interoperability
- •Datatypes for File Interoperability
- •Extent Callback
- •Datarep Conversion Functions
- •Matching Data Representations
- •Consistency and Semantics
- •File Consistency
- •Random Access vs. Sequential Files
- •Progress
- •Collective File Operations
- •Type Matching
- •Logical vs. Physical File Layout
- •File Size
- •Examples
- •Asynchronous I/O
- •I/O Error Handling
- •I/O Error Classes
- •Examples
- •Subarray Filetype Constructor
- •Requirements
- •Discussion
- •Logic of the Design
- •Examples
- •MPI Library Implementation
- •Systems with Weak Symbols
- •Systems Without Weak Symbols
- •Complications
- •Multiple Counting
- •Linker Oddities
- •Multiple Levels of Interception
- •Deprecated Functions
- •Deprecated since MPI-2.0
- •Deprecated since MPI-2.2
- •Language Bindings
- •Overview
- •Design
- •C++ Classes for MPI
- •Class Member Functions for MPI
- •Semantics
- •C++ Datatypes
- •Communicators
- •Exceptions
- •Mixed-Language Operability
- •Problems With Fortran Bindings for MPI
- •Problems Due to Strong Typing
- •Problems Due to Data Copying and Sequence Association
- •Special Constants
- •Fortran 90 Derived Types
- •A Problem with Register Optimization
- •Basic Fortran Support
- •Extended Fortran Support
- •The mpi Module
- •No Type Mismatch Problems for Subroutines with Choice Arguments
- •Additional Support for Fortran Numeric Intrinsic Types
- •Language Interoperability
- •Introduction
- •Assumptions
- •Initialization
- •Transfer of Handles
- •Status
- •MPI Opaque Objects
- •Datatypes
- •Callback Functions
- •Error Handlers
- •Reduce Operations
- •Addresses
- •Attributes
- •Extra State
- •Constants
- •Interlanguage Communication
- •Language Bindings Summary
- •Groups, Contexts, Communicators, and Caching Fortran Bindings
- •External Interfaces C++ Bindings
- •Change-Log
- •Bibliography
- •Examples Index
- •MPI Declarations Index
- •MPI Function Index
Annex B
Change-Log
This annex summarizes changes from the previous version of the MPI standard to the version presented by this document. Only signi cant changes (i.e., clari cations and new features) that might either require implementation e ort in the MPI libraries or change the understanding of MPI from a user's perspective are presented. Editorial modi cations, formatting, typo corrections and minor clari cations are not shown.
B.1 Changes from Version 2.1 to Version 2.2
1.Section 2.5.4 on page 14.
It is now guaranteed that prede ned named constant handles (as other constants) can be used in initialization expressions or assignments, i.e., also before the call to
MPI_INIT.
2.Section 2.6 on page 16, Section 2.6.4 on page 18, and Section 16.1 on page 467.
The C++ language bindings have been deprecated and may be removed in a future version of the MPI speci cation.
3.Section 3.2.2 on page 27.
MPI_CHAR for printable characters is now de ned for C type char (instead of signed char). This change should not have any impact on applications nor on MPI libraries (except some comment lines), because printable characters could and can be stored in any of the C types char, signed char, and unsigned char, and MPI_CHAR is not allowed for prede ned reduction operations.
4.Section 3.2.2 on page 27.
MPI_(U)INTf8,16,32,64g_T, MPI_AINT, MPI_OFFSET, MPI_C_BOOL, MPI_C_COMPLEX, MPI_C_FLOAT_COMPLEX, MPI_C_DOUBLE_COMPLEX, and
MPI_C_LONG_DOUBLE_COMPLEX are now valid prede ned MPI datatypes.
5.Section 3.4 on page 38, Section 3.7.2 on page 50, Section 3.9 on page 69, and Section 5.1 on page 131.
The read access restriction on the send bu er for blocking, non blocking and collective API has been lifted. It is permitted to access for read the send bu er while the operation is in progress.
6.Section 3.7 on page 48.
The Advice to users for IBSEND and IRSEND was slightly changed.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
593
594 |
ANNEX B. CHANGE-LOG |
17. Section 3.7.3 on page 53.
2The advice to free an active request was removed in the Advice to users for
3
4
MPI_REQUEST_FREE.
58. Section 3.7.6 on page 64.
6MPI_REQUEST_GET_STATUS changed to permit inactive or null requests as input.
7
9. Section 5.8 on page 157.
8
\In place" option is added to MPI_ALLTOALL, MPI_ALLTOALLV, and
9
MPI_ALLTOALLW for intracommunicators.
10
1110. Section 5.9.2 on page 164.
12Prede ned parameterized datatypes (e.g., returned by MPI_TYPE_CREATE_F90_REAL)
13and optional named prede ned datatypes (e.g. MPI_REAL8) have been added to the
14list of valid datatypes in reduction operations.
15
1611. Section 5.9.2 on page 164.
17MPI_(U)INTf8,16,32,64g_T are all considered C integer types for the purposes of the
18prede ned reduction operators. MPI_AINT and MPI_OFFSET are considered Fortran
19integer types. MPI_C_BOOL is considered a Logical type.
20MPI_C_COMPLEX, MPI_C_FLOAT_COMPLEX, MPI_C_DOUBLE_COMPLEX, and
21MPI_C_LONG_DOUBLE_COMPLEX are considered Complex types.
22
23
24
25
12.Section 5.9.7 on page 176.
The local routines MPI_REDUCE_LOCAL and MPI_OP_COMMUTATIVE have been added.
2613. Section 5.10.1 on page 178.
27The collective function MPI_REDUCE_SCATTER_BLOCK is added to the MPI stan-
28dard.
29
30
31
32
33
34
35
36
37
38
14.Section 5.11.2 on page 181.
Added in place argument to MPI_EXSCAN.
15.Section 6.4.2 on page 200, and Section 6.6 on page 216.
Implementations that did not implement MPI_COMM_CREATE on intercommunicators will need to add that functionality. As the standard described the behavior of this operation on intercommunicators, it is believed that most implementations already provide this functionality. Note also that the C++ binding for both MPI_COMM_CREATE and MPI_COMM_SPLIT explicitly allow Intercomms.
3916. Section 6.4.2 on page 200.
40MPI_COMM_CREATE is extended to allow several disjoint subgroups as input if comm
41is an intracommunicator. If comm is an intercommunicator it was clari ed that all
42processes in the same local group of comm must specify the same value for group.
43
4417. Section 7.5.4 on page 252.
45New functions for a scalable distributed graph topology interface has been added.
46In this section, the functions MPI_DIST_GRAPH_CREATE_ADJACENT and
47MPI_DIST_GRAPH_CREATE, the constants MPI_UNWEIGHTED, and the derived C++
48class Distgraphcomm were added.
B.1. CHANGES FROM VERSION 2.1 TO VERSION 2.2 |
595 |
18.Section 7.5.5 on page 257.
For the scalable distributed graph topology interface, the functions
MPI_DIST_NEIGHBORS_COUNT and MPI_DIST_NEIGHBORS and the constant
MPI_DIST_GRAPH were added.
19.Section 7.5.5 on page 257.
Remove ambiguity regarding duplicated neighbors with MPI_GRAPH_NEIGHBORS and MPI_GRAPH_NEIGHBORS_COUNT.
20.Section 8.1.1 on page 271.
The subversion number changed from 1 to 2.
21.Section 8.3 on page 276, Section 15.2 on page 465, and Annex A.1.3 on page 525. Changed function pointer typedef names MPI_fComm,File,Wing_errhandler_fn to
MPI_fComm,File,Wing_errhandler_function. Deprecated old \_fn" names.
22.Section 8.7.1 on page 295.
Attribute deletion callbacks on MPI_COMM_SELF are now called in LIFO order. Implementors must now also register all implementation-internal attribute deletion callbacks on MPI_COMM_SELF before returning from MPI_INIT/MPI_INIT_THREAD.
23.Section 11.3.4 on page 345.
The restriction added in MPI 2.1 that the operation MPI_REPLACE in MPI_ACCUMULATE can be used only with prede ned datatypes has been removed. MPI_REPLACE can now be used even with derived datatypes, as it was in MPI 2.0. Also, a clari cation has been made that MPI_REPLACE can be used only in MPI_ACCUMULATE, not in collective operations that do reductions, such as MPI_REDUCE and others.
24.Section 12.2 on page 373.
Add \*" to the query_fn, free_fn, and cancel_fn arguments to the C++ binding for MPI::Grequest::Start() for consistency with the rest of MPI functions that take function pointer arguments.
25.Section 13.5.2 on page 431, and Table 13.2 on page 433.
MPI_(U)INTf8,16,32,64g_T, MPI_AINT, MPI_OFFSET, MPI_C_COMPLEX, MPI_C_FLOAT_COMPLEX, MPI_C_DOUBLE_COMPLEX, MPI_C_LONG_DOUBLE_COMPLEX, and MPI_C_BOOL are added as prede ned datatypes in the external32 representation.
26.Section 16.3.7 on page 505.
The description was modi ed that it only describes how an MPI implementation behaves, but not how MPI stores attributes internally. The erroneous MPI-2.1 Example 16.17 was replaced with three new examples 16.17, 16.18, and 16.19 on pages 506-508 explicitly detailing cross-language attribute behavior. Implementations that matched the behavior of the old example will need to be updated.
27.Annex A.1.1 on page 513.
Removed type MPI::Fint (compare MPI_Fint in Section A.1.2 on page 524).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
596 |
ANNEX B. CHANGE-LOG |
128. Annex A.1.1 on page 513. Table Named Prede ned Datatypes.
2Added MPI_(U)INTf8,16,32,64g_T, MPI_AINT, MPI_OFFSET, MPI_C_BOOL,
3MPI_C_FLOAT_COMPLEX, MPI_C_COMPLEX, MPI_C_DOUBLE_COMPLEX, and
4MPI_C_LONG_DOUBLE_COMPLEX are added as prede ned datatypes.
5
6
7
8
9
10
11
12
B.2 Changes from Version 2.0 to Version 2.1
1.Section 3.2.2 on page 27, Section 16.1.6 on page 471, and Annex A.1 on page 513. In addition, the MPI_LONG_LONG should be added as an optional type; it is a synonym for MPI_LONG_LONG_INT.
132. Section 3.2.2 on page 27, Section 16.1.6 on page 471, and Annex A.1 on page 513.
14MPI_LONG_LONG_INT, MPI_LONG_LONG (as synonym), MPI_UNSIGNED_LONG_LONG,
15MPI_SIGNED_CHAR, and MPI_WCHAR are moved from optional to o cial and they
16are therefore de ned for all three language bindings.
17
183. Section 3.2.5 on page 31.
19MPI_GET_COUNT with zero-length datatypes: The value returned as the count
20argument of MPI_GET_COUNT for a datatype of length zero where zero bytes have
21been transferred is zero. If the number of bytes transferred is greater than zero,
22MPI_UNDEFINED is returned.
23
24
25
26
27
28
4.Section 4.1 on page 77.
General rule about derived datatypes: Most datatype constructors have replication count or block length arguments. Allowed values are non-negative integers. If the value is zero, no elements are generated in the type map and there is no e ect on datatype bounds or extent.
295. Section 4.3 on page 127.
30MPI_BYTE should be used to send and receive data that is packed using
31MPI_PACK_EXTERNAL.
32
33
34
35
36
37
38
39
40
41
42
43
44
6.Section 5.9.6 on page 175.
If comm is an intercommunicator in MPI_ALLREDUCE, then both groups should provide count and datatype arguments that specify the same type signature (i.e., it is not necessary that both groups provide the same count value).
7.Section 6.3.1 on page 192.
MPI_GROUP_TRANSLATE_RANKS and MPI_PROC_NULL: MPI_PROC_NULL is a valid rank for input to MPI_GROUP_TRANSLATE_RANKS, which returns MPI_PROC_NULL as the translated rank.
8.Section 6.7 on page 224.
About the attribute caching functions:
45
46
47
48
Advice to implementors. High-quality implementations should raise an error when a keyval that was created by a call to MPI_XXX_CREATE_KEYVAL is used with an object of the wrong type with a call to
MPI_YYY_GET_ATTR, MPI_YYY_SET_ATTR, MPI_YYY_DELETE_ATTR, or
B.2. CHANGES FROM VERSION 2.0 TO VERSION 2.1 |
597 |
MPI_YYY_FREE_KEYVAL. To do so, it is necessary to maintain, with each keyval, information on the type of the associated user function. (End of advice to implementors.)
9.Section 6.8 on page 238.
In MPI_COMM_GET_NAME: In C, a null character is additionally stored at name[resultlen]. resultlen cannot be larger then MPI_MAX_OBJECT_NAME-1. In Fortran, name is padded on the right with blank characters. resultlen cannot be larger then MPI_MAX_OBJECT_NAME.
10.Section 7.4 on page 246.
About MPI_GRAPH_CREATE and MPI_CART_CREATE: All input arguments must have identical values on all processes of the group of comm_old.
11.Section 7.5.1 on page 248.
In MPI_CART_CREATE: If ndims is zero then a zero-dimensional Cartesian topology is created. The call is erroneous if it speci es a grid that is larger than the group size or if ndims is negative.
12.Section 7.5.3 on page 250.
In MPI_GRAPH_CREATE: If the graph is empty, i.e., nnodes == 0, then MPI_COMM_NULL is returned in all processes.
13.Section 7.5.3 on page 250.
In MPI_GRAPH_CREATE: A single process is allowed to be de ned multiple times in the list of neighbors of a process (i.e., there may be multiple edges between two processes). A process is also allowed to be a neighbor to itself (i.e., a self loop in the graph). The adjacency matrix is allowed to be non-symmetric.
Advice to users. Performance implications of using multiple edges or a nonsymmetric adjacency matrix are not de ned. The de nition of a node-neighbor edge does not imply a direction of the communication. (End of advice to users.)
14.Section 7.5.5 on page 257.
In MPI_CARTDIM_GET and MPI_CART_GET: If comm is associated with a zerodimensional Cartesian topology, MPI_CARTDIM_GET returns ndims=0 and MPI_CART_GET will keep all output arguments unchanged.
15.Section 7.5.5 on page 257.
In MPI_CART_RANK: If comm is associated with a zero-dimensional Cartesian topology, coord is not signi cant and 0 is returned in rank.
16.Section 7.5.5 on page 257.
In MPI_CART_COORDS: If comm is associated with a zero-dimensional Cartesian topology, coords will be unchanged.
17.Section 7.5.6 on page 265.
In MPI_CART_SHIFT: It is erroneous to call MPI_CART_SHIFT with a direction that is either negative or greater than or equal to the number of dimensions in the Cartesian communicator. This implies that it is erroneous to call MPI_CART_SHIFT with a comm that is associated with a zero-dimensional Cartesian topology.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
598 |
ANNEX B. CHANGE-LOG |
118. Section 7.5.7 on page 266.
2In MPI_CART_SUB: If all entries in remain_dims are false or comm is already associ-
3ated with a zero-dimensional Cartesian topology then newcomm is associated with a
4
5
zero-dimensional Cartesian topology.
6
7
8
9
10
11
12
13
18.1.Section 8.1.1 on page 271.
The subversion number changed from 0 to 1.
19.Section 8.1.2 on page 272.
In MPI_GET_PROCESSOR_NAME: In C, a null character is additionally stored at name[resultlen]. resultlen cannot be larger then MPI_MAX_PROCESSOR_NAME-1. In Fortran, name is padded on the right with blank characters. resultlen cannot be larger then MPI_MAX_PROCESSOR_NAME.
1420. Section 8.3 on page 276.
15MPI_fCOMM,WIN,FILEg_GET_ERRHANDLER behave as if a new error handler object
16is created. That is, once the error handler is no longer needed,
17MPI_ERRHANDLER_FREE should be called with the error handler returned from
18MPI_ERRHANDLER_GET or MPI_fCOMM,WIN,FILEg_GET_ERRHANDLER to mark
19the error handler for deallocation. This provides behavior similar to that of
20MPI_COMM_GROUP and MPI_GROUP_FREE.
21
2221. Section 8.7 on page 290, see explanations to MPI_FINALIZE.
23MPI_FINALIZE is collective over all connected processes. If no processes were spawned,
24accepted or connected then this means over MPI_COMM_WORLD; otherwise it is col-
25lective over the union of all processes that have been and continue to be connected,
26as explained in Section 10.5.4 on page 330.
27
28
29
30
31
32
33
22.Section 8.7 on page 290. About MPI_ABORT:
Advice to users. Whether the errorcode is returned from the executable or from the MPI process startup mechanism (e.g., mpiexec), is an aspect of quality of the MPI library but not mandatory. (End of advice to users.)
34
35
36
37
Advice to implementors. Where possible, a high-quality implementation will try to return the errorcode from the MPI process startup mechanism (e.g. mpiexec or singleton init). (End of advice to implementors.)
3823. Section 9 on page 299.
39An implementation must support info objects as caches for arbitrary (key, value)
40pairs, regardless of whether it recognizes the key. Each function that takes hints in
41the form of an MPI_Info must be prepared to ignore any key it does not recognize. This
42description of info objects does not attempt to de ne how a particular function should
43react if it recognizes a key but not the associated value. MPI_INFO_GET_NKEYS,
44MPI_INFO_GET_NTHKEY, MPI_INFO_GET_VALUELEN, and MPI_INFO_GET must
45retain all (key,value) pairs so that layered functionality can also use the Info object.
46
24. Section 11.3 on page 339.
47
MPI_PROC_NULL is a valid target rank in the MPI RMA calls MPI_ACCUMULATE,
48
B.2. CHANGES FROM VERSION 2.0 TO VERSION 2.1 |
599 |
MPI_GET, and MPI_PUT. The e ect is the same as for MPI_PROC_NULL in MPI point- to-point communication. See also item 25 in this list.
25.Section 11.3 on page 339.
After any RMA operation with rank MPI_PROC_NULL, it is still necessary to nish the RMA epoch with the synchronization method that started the epoch. See also item 24 in this list.
26.Section 11.3.4 on page 345.
MPI_REPLACE in MPI_ACCUMULATE, like the other prede ned operations, is de ned only for the prede ned MPI datatypes.
27.Section 13.2.8 on page 398.
About MPI_FILE_SET_VIEW and MPI_FILE_SET_INFO: When an info object that speci es a subset of valid hints is passed to MPI_FILE_SET_VIEW or MPI_FILE_SET_INFO, there will be no e ect on previously set or defaulted hints that the info does not specify.
28.Section 13.2.8 on page 398.
About MPI_FILE_GET_INFO: If no hint exists for the le associated with fh, a handle to a newly created info object is returned that contains no key/value pair.
29.Section 13.3 on page 401.
If a le does not have the mode MPI_MODE_SEQUENTIAL, then
MPI_DISPLACEMENT_CURRENT is invalid as disp in MPI_FILE_SET_VIEW.
30.Section 13.5.2 on page 431.
The bias of 16 byte doubles was de ned with 10383. The correct value is 16383.
31.Section 16.1.4 on page 468.
In the example in this section, the bu er should be declared as const void* buf.
32.Section 16.2.5 on page 489.
About MPI_TYPE_CREATE_F90_xxxx:
Advice to implementors. An application may often repeat a call to MPI_TYPE_CREATE_F90_xxxx with the same combination of (xxxx,p,r). The application is not allowed to free the returned prede ned, unnamed datatype handles. To prevent the creation of a potentially huge amount of handles, the MPI implementation should return the same datatype handle for the same ( REAL/COMPLEX/INTEGER,p,r) combination. Checking for the combination ( p,r) in the preceding call to MPI_TYPE_CREATE_F90_xxxx and using a hashtable to nd formerly generated handles should limit the overhead of nding a previously generated datatype with same combination of (xxxx,p,r). (End of advice to implementors.)
33.Section A.1.1 on page 513.
MPI_BOTTOM is de ned as void * const MPI::BOTTOM.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
600 |
ANNEX B. CHANGE-LOG |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48