Download create_mpihost.sh
Ausführen eines MPI-parallelen Programms im Pool
Um MPI-parallel auf mehreren Rechnern im CIP-Pool zu arbeiten, sollten Sie als erstes eine Datei mit den Namen der Rechner erzeugen, die an der Rechnung beteiligt sein sollen. Dazu verwenden Sie bitte das Skript create_mpihosts.sh, das Sie in der Kommandozeile mit
./create_mpihosts.sh
aufrufen. Es schreibt in Ihrem Home-Verzeichnis in die Datei mpihosts
die Namen derjenigen Rechner, die im Augenblick nicht ausgelastet sind. Danach
können Sie parallele Rechnungen mittels
mpirun -np <p> -machinefile ~/mpihosts ./<executable>
starten. Für <p> setzen Sie die Anzahl der gewünschten
Prozesse ein, <executable> ist das gewünschte parallele Programm.
Achten Sie dabei bitte auf folgende Punkte:
- Rufen Sie vor jedem parallelen Prozessstart das Skript create_mpihosts.sh auf, damit die aktuell nicht ausgelasteten Rechner neu ermittelt werden.
- Achten Sie auf die Anzahl der Rechner, die in Ihrer mpihosts -Datei eingetragen wurden. Jeder Rechner verfügt über zwei Prozessorkerne, so dass Sie mit zwei Prozessen pro Rechner optimale Leistung erreichen sollten. Jeder Rechner hat daher zwei Eintraege in der Datei.
- Überschlagen Sie vor der Rechnung den Speicherverbrauch. Auf jedem Rechner sollten Sie höchstens 1.5 GB Speicher verbrauchen, damit die Rechner stabil weiterlaufen.
for i in `seq -w 50`; do ssh cip$i killall -9 ./<executable>; done
sicher entfernen.
Kompilieren eines parallelen Programmes im Pool
Zur Verwendung der MPI-Bibliothek müssen Sie die MPI-Headerdatei inkludieren:
#include <mpi.h>
Um ein Programm zur parallelen Ausführung im Pool zu kompilieren, verwenden
Sie die Befehlszeile
mpicc -o <executable> <prog.c>
wobei <prog.c> Ihr paralleles C-Programm ist und <executable> der Name der
ausführbaren Datei.
Schreiben Sie Ihre MPI-Programme am Besten in
C, die Weiterentwicklung der C++-Bindings ist unklar.
Messungen der elapsed time können ähnlich wie bei OpenMP mit vorgenommen werden:
double tStart = MPI_Wtime();
double telapsed = MPI_Wtime() - tStart;