Partitioned communication extends persistent point-to-point communication as defined in Chapter Point-to-Point Communication. Partitioned communication operations are matched based on the order in which the local initialization calls are performed. Partitioned communication is ``partitioned'' because it allows for multiple contributions of data to be made, potentially, from multiple actors (e.g., threads or tasks) in an MPI process to a single communication operation.
Advice to users.
The techniques of partitioned communication were known as ``finepoints''
before their adoption into the MPI standard.
We refer the interested reader to the original literature describing the
design goals, functioning, initial implementation
and performance improvements [29,30].
( End of advice to users.)
Partitioned communication operations use
a persistent communication style that involves a sequence of start and test or wait operations. For this
sequence, partitioned communications use MPI_START or MPI_STARTALL calls
and completion mechanisms (e.g., MPI_TEST or MPI_WAIT).
Partitioned communication is different in three fundamental ways from persistent
point-to-point operations in MPI.
First, partitioned communication
allows additional partitioned test function calls that can expose partial completion
of the operation.
Second, partitioned communication may perform all
of the initialization required to enable data transfer as
early as its initialization phase. Third, partitioned communication allows for
MPI to be independently notified of multiple contributions from the
send-side to a single data buffer of a single MPI message.
Rationale.
The rationale behind having different initialization behavior allowed for
partitioned communication as opposed to persistent point-to-point communication is to
enable flexibility and optimization possibilities in implementations.
Buffer setup can occur in the
partitioned communication initialization functions (see Section Communication Initialization and Starting with Partitioning).
However, such negotiation can be deferred until
data is to be moved between two processes. This means that partitioned communication can
lazily negotiate as late as testing for completion of the operation on the first
iteration of a sequence of partitioned communication start and test or wait operations.
Matching still occurs as if matching happened at the partitioned communication initialization functions
as noted in the function descriptions.
( End of rationale.)