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.Um die lästigen Nachfragen zum Akzeptieren des Fingerprints und des eigenen Passworts zu umgehen, kopieren Sie bitte einerseits die Datei
known-hosts
in Ihr .ssh-Verzeichnis:
cp /export/home/dune/dunekurs/known_hosts .ssh
und erzeugen sich dann ein RSA-Schlüsselpaar (Passwort leer lassen!) mittels
ssh-keygen -t rsa
Dieses hängen Sie dann an die Liste akzeptierter Schlüssel an:
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
In Zukunft können Sie sich also über ssh bei sich selbst (aber auf einem anderen Pool-Rechner) ohne Passwort einloggen und damit auch das obige Skript create_mpihosts
nicht-interaktiv
verwenden.
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;