Syntax:
Die Funktion sollte vom Typ MPI_Handler_function sein::
typedef void MPI_Handler_function(MPI_Comm *, int *, ...);Das erste Argument ist der Kommunikator, in dem der Ausnahmezustand eintrat. Ist der Returnwert einer MPI-Funktion ungleich MPI_SUCCESS, wird die Fehlerbehandlungsroutine gerufen. Im zweiten Argument wird dieser Returnwert der nutzerdefinierten Routine übergeben. Alle weiteren Argumente sind von Ihrer MPI-Implementation abhängig und sollten dort genau dokumentiert sein.
Aufruf:
#include "mpi.h"
void my_errhandler(MPI_Comm *comm, int *errcode) {
switch (*errcode) {
... Fehlerbehandlung ...
}
}
int my_function(MPI_Comm comm) {
int msg, myid;
MPI_Errhandler errh, store_errh;
...
/* alten Errorhandler merken */
MPI_Errhandler_get(comm, &store_errh);
MPI_Errhandler_create((MPI_Handler_function *)(&my_errhandler), &errh);
MPI_Errhandler_set(comm, errh);
...
MPI_Errhandler_free(&errh);
/* Errorhandler wieder setzen */
MPI_Errhandler_set( comm, store_errh);
}
Beispiel