ein benutzerdefinierter Interrupt-Handler für mpirun

Offenbar,mpirun verwendet einen SIGINT-Handler, der das SIGINT-Signal an jeden der Prozesse "weiterleitet", die es ausgelöst hat.

Das heißt, Sie können einen Interrupt-Handler für Ihren mpi-fähigen Code schreiben, ausführenmpirun -np 3 my-mpi-enabled-executable und dann wird SIGINT für jeden der drei Prozesse ausgelöst. Kurz danach wird mpirun beendet. Dies funktioniert gut, wenn Sie einen kleinen benutzerdefinierten Handler haben, der nur eine Fehlermeldung ausgibt und dann beendet.jedochWenn Ihr benutzerdefinierter Interrupt-Handler einen nicht trivialen Job ausführt (z. B. ernsthafte Berechnungen oder persistente Daten), wird der Handler nicht vollständig ausgeführt. Ich gehe davon aus, dass mpirun beschlossen hat, zu früh zu beenden.

Hier ist das Stderr beim Drückenctrl-c (d. h. verursacht SIGINT) nach der Ausführungmy-mpi-enabled-executable. Dies ist das erwünschte erwartete Verhalten:

interrupted by signal 2.
running viterbi... done.
persisting parameters... done.
the master process will now exit.

Hier ist das Stderr beim Drückenctrl-c nach der Ausführungmpirun -np 1 my-mpi-enabled-executable. Dies ist das problematische Verhalten:

interrupted by signal 2.
running viterbi... mpirun: killing job...

--------------------------------------------------------------------------
mpirun noticed that process rank 0 with PID 8970 on node pharaoh exited on signal 0 (Unknown signal 0).
--------------------------------------------------------------------------
mpirun: clean termination accomplished

Beantwortung eines Die folgenden Fragen lösen mein Problem:

Wie kann ich den mpirun SIGINT-Handler überschreiben (wenn überhaupt möglich)?Wie vermeide ich, dass mpirun direkt nach dem Beenden von mpirun beendet wird?Gibt es ein anderes Signal, das mpirun möglicherweise an die untergeordneten Prozesse sendet, bevor mpirun beendet wird?Gibt es eine Möglichkeit, das sogenannte "Signal 0 (Unbekanntes Signal 0)" zu "erfassen" (siehe den zweiten Abschnitt oben)?

Ich verwende openmpi-1.6.3 unter Linux.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage