Static Public Member Functions | |
static void | reportFailure (const MPIComm &comm) |
static bool | pollForFailures (const MPIComm &comm) |
static void | enable () |
static void | disable () |
Static Private Member Functions | |
static bool & | isActive () |
The two functions must be used in a coordinated way. The simplest use case is to embed a call to reportFailure() whenever an std::exception is detected at the top-level try/catch block, and then to do a call to pollForFailures() whenever it is desired to check for off-processor errors before proceeding. The macro
TEUCHOS_TEST_FOR_FAILURE(comm);
calls pollForFailures() and throws an std::exception if the return value is true.
Polling is a collective operation (an MPI_Reduce) and so incurs some performance overhead. It can be disabled with a call to
IMPORTANT: all processors must agree on whether collective error checking is enabled or disabled. If there are inconsistent states, the reduction operations in pollForFailures() will hang because some processors cannot be contacted.Definition at line 45 of file PlayaErrorPolling.hpp.
static void Playa::ErrorPolling::disable | ( | ) | [inline, static] |
Disable error polling
Definition at line 68 of file PlayaErrorPolling.hpp.
static void Playa::ErrorPolling::enable | ( | ) | [inline, static] |
Activate error polling
Definition at line 65 of file PlayaErrorPolling.hpp.
static bool& Playa::ErrorPolling::isActive | ( | ) | [inline, static, private] |
Set or check whether error polling is active
Definition at line 72 of file PlayaErrorPolling.hpp.
Referenced by pollForFailures(), and reportFailure().
bool Playa::ErrorPolling::pollForFailures | ( | const MPIComm & | comm | ) | [static] |
Call this function after std::exception-free completion of a try/catch block. This function will do an AllReduce in conjunction with calls to either this function or its partner, reportFailure(), on the other processors. If a failure has been reported by another processor, the call to pollForFailures() will return true and an std::exception can be thrown.
Definition at line 20 of file PlayaErrorPolling.cpp.
References Playa::MPIComm::allReduce(), Playa::MPIDataType::intType(), isActive(), and Playa::MPIOp::sumOp().
void Playa::ErrorPolling::reportFailure | ( | const MPIComm & | comm | ) | [static] |
Call this function upon catching an std::exception in order to inform other processors of the error. This function will do an AllReduce in conjunction with calls to either this function or its partner, pollForFailures(), on the other processors. This procedure has the effect of communicating to the other processors that an std::exception has been detected on this one.
Definition at line 9 of file PlayaErrorPolling.cpp.
References Playa::MPIComm::allReduce(), Playa::MPIDataType::intType(), isActive(), and Playa::MPIOp::sumOp().