3.9. Progress

Up: MPI Terms and Conventions Next: Implementation Issues Previous: Error Handling

MPI communication operations or parallel I/O patterns typically comprise several related operations executed in one or multiple MPI processes. Examples are the point-to-point communications with one MPI process executing a send operation and another (or the same) MPI process executing a receive operation, or all MPI processes of a group executing a collective operation.

Within each MPI process parts of the communication or parallel I/O pattern are executed within the MPI procedure calls that belong to the operation in that MPI process, whereas other parts are decoupled MPI activities, i.e., they may be executed within an additional progress thread, offloaded to the network interface controller (NIC), or executed within other MPI procedure calls that are not semantically related to the given communication or parallel I/O pattern.

An MPI procedure invocation is blocked if it delays its return until some specific activity or state-change has occurred in another MPI process. An MPI procedure call that is blocked can be

Some examples of a nonlocal blocked MPI procedure call:
Some examples of a local blocked MPI procedure call:
All MPI processes are required to guarantee progress, i.e., all decoupled MPI activities will eventually be executed. This guarantee is required to be provided during
The progress must be provided independently of whether a decoupled MPI activity belongs to a specific session or to the World Model (see Sections The World Model and The Sessions Model). Other ways of fulfilling this guarantee are possible and permitted (for example, a dedicated progress thread or off-loading to a network interface controller (NIC)).


Strong progress is provided by an MPI implementation if all local procedures return independently of MPI procedure calls in other MPI processes (operation-related or not). An MPI implementation provides weak progress if it does not provide strong progress.

Advice to users.

The type of progress may influence the performance of MPI operations. A correct MPI application must be written under the assumption that only weak progress is provided. Every MPI application that is correct under weak progress will be correctly executed if strong progress is provided. In addition, the MPI standard is designed such that correctness under the assumption of strong progress should imply also correctness if only weak progress is provided by the implementation. ( End of advice to users.)


MPI does not guarantee progress when using synchronization methods that are not based on MPI procedures. Without guaranteed strong progress in MPI this may lead to a deadlock, see for example Section Processes and Example Progress in Section Progress. ( End of rationale.)
For further rules, see in Section MPI Procedures the definition of local MPI procedures, and all references to progress in the general index.

Up: MPI Terms and Conventions Next: Implementation Issues Previous: Error Handling

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