2.2 Local versus Uniform Error Reporting
Another natural preconception is to consider that detection of failures at any rank results in MPI automatically
altering the state of all communication objects in which the
associated process appears (i.e. communicators, windows,
etc.). In such a model, it is understood that the failure
“damages”the communication object and renders it inappropriate for further communications. However, a complication
is hidden in such an approach: the state of MPI communication objects is the aggregate state of individual views by
each process of the distributed system. As failure awareness is not expected to be global, the implementation would
then require internal and asynchronous propagation of failure detection, again, a process that is prone to introduce jitter. Furthermore, some recovery patterns (typical in PDE
solvers [1], as an example) do not require advanced, nor
collective, corrective actions and can continue between nonfailed processes on the unmodified communication object.
As a consequence, ulfm never automatically modifies the
state of communication objects. Even if it contains failed
processes, a communicator remains a valid communication
object, until explicitly required. Therefore, error reporting
is not intended to indicate that a process failed, but to indicate that an operation cannot deliver the normal semantic
at the local rank: when a failure happened, but an MPI
operation can proceed without disruption, it completes normally; when the failed process is supposed to participate in
the result of the operation, it is obviously impossible for the
operation to succeed, and an appropriate error is returned.