MPI-Umgebungen
Allgemeines
MPI steht für Message Passing Interface. Dahinter steht ein Programmiermodell zur Parallelisierung von Programmen durch expliziten Austausch von Nachrichten.
Es gibt zwei gültige Standards für MPI-Implementierungen:
MPI-1 :
- das ist der erste MPI-Standard, der auch heute für viele Implementierungen eingesetzt wird. MPI-1 Routinen basieren auf zweiseitiger Kommunikation.
MPI-2 :
- hier sind als Funktionalität einseitige Kommunikation, paralleles I/O und Weiteres hinzugefügt.
- in MPI-2 sind im Gegensatz zu MPI-1 das Prozessmanagement und der Start von parallelen Programmen (im Falle von MPI-2 über mpiexec) getrennt ausgeführt. In unseren Implementierungen auf CLUH haben wir uns für das Prozessmanagement mit smpd entschieden (s. Original-Doku zu MPI-2). Durch das Setzen des parallelen Environments mpi2 ("#$ -pe mpi2 <nprocs>" in SGE-Batchjobs) werden die nötigen smpd-Daemons automatisch gestartet (s. Beispiele zu Batch-Jobs).
Weitere Infos s.
Installierte MPI-Versionen
Es gibt unterschiedliche Implementierungen von MPI. Die Unterschiede bestehen z.B. in der Definition paralleler Environments, im Aufruf paralleler Programme oder in der Benutzung von Netzwerken zwischen Rechenknoten.
OSU-MPI-1 / MVAPICHHier handelt es sich um eine Implementierung, die an der Ohio-State-University entwickelt wird. Sie bezieht sich vor allem auf Infiniband-Netzwerke.
Link: MPI over Infiniband Project
Version: MVAPICH 0.9.7
Standard: MPI-1
Kompilation von Programmen
- mpicc : C-Programme
- mpicxx, mpiCC : C++-Programme
- mpif77 : Fortran77-Programme
- mpif90 : Fortran90-Programme
Start von parallelen Programmen
- mpirun
Netzwerk
- Infiniband
OSU-MPI-2 / MVAPICH2
Hier handelt es sich um eine Implementierung, die an der Ohio-State-University entwickelt wird. Sie bezieht sich vor allem auf Infiniband-Netzwerke.
Link: MPI over Infiniband Project
Version: MVAPICH2 0.9.5
Standard: MPI-2
Kompilation von Programmen
- mpicc : C-Programme
- mpicxx : C++-Programme
- mpif77 : Fortran77-Programme
- mpif90 : Fortran90-Programme
Start von parallelen Programmen
- mpiexec
Netzwerk
- Infiniband
MPICH
Dies ist eine portable Implementierung von MPI, auf der eine Reihe weiterer Implementierungen (auch MVAPICH) aufsetzen.
Link: MPICH Home Page
Version: MPICH 1.2.7p1
Standard: MPI-1
Kompilation von Programmen
- mpicc : C-Programme
- mpicxx, mpiCC : C++-Programme
- mpif77 : Fortran77-Programme
- mpif90 : Fortran90-Programme
Start von parallelen Programmen
- mpirun
Netzwerk
- Ethernet
Welche Implementierung wählen?
Die Kommunikation über Infiniband ist deutlich schneller als über Ethernet.
Deshalb unsere dringende Empfehlung: benutzen Sie bitte die OSU-MPI Implementierung, falls möglich!
Verwenden Sie MVAPICH, falls möglich.
Bei MVAPICH2 können noch Stabilitätsprobleme auftreten.
Die MPICH Implementierung sollten Sie nur wählen, falls Sie mit der OSU-MPI Variante Probleme haben (in diesem Fall nehmen Sie bitte Kontakt mit der Fachberatung des RRZN auf) oder falls es Kompatibilitätsgründe gibt (sowas kann bei präkompilierten Programmen auftreten).
Setzen von MPI/Compiler-Umgebungen
Die Kommandos mpicc, mpif90 etc sind durch Shellskripte realisiert, die von der gewählten MPI-Implementierung abhängen und je nach Konfiguration einen bestimmten Compiler aufrufen.
Welche spezifische Version dieser Kommandos man erhält, hängt von der gewählten Umgebung ab, also von dem gesetzten Pfad und ggf. von weiteren Umgebungsvariablen.
Diese Umgebungen werden durch Modules gesetzt.
Zum Beispiel gibt man folgendes ein, wenn man mit OSU-MPI/MVAPICH2 (also Kommunikation über Infiniband) und dem Intel-Compiler arbeiten will:
module load mvapich2-intel
Dann wird mit
mpicc myprog.c
das Programm myprog.c mit dem Intel-Compiler icc übersetzt und mit entsprechenden (in diesem Fall auch mit dem Intel-Compiler erzeugten) MPI-Bibliotheken gebunden. Man kann hier auch weitere für den spezifischen Compiler gültige Optionen eingeben.
Folgende Modules für das Setzen von MPI/Compiler-Umgebungen existieren:
Module Kommando | verwendete Compiler | Bemerkungen | ||
MVAPICH mit Intel Compiler | module load mvapich-intel (oder alternativ: module load mpi-osu-intel) | mpicc: iccmpicxx, mpiCC: icpc mpif77: ifort mpif90: ifort | alle MPI-Bibliotheken mit den Intel-Compilern erzeugt | |
MVAPICH mit Portland Group Compiler | module load mvapich-pgi (oder alternativ: module load mpi-osu-pgi) | mpicc: pgcc mpicxx, mpiCC: pgCC mpif77: pgf77 mpif90: pgf90 | alle MPI-Bibliotheken mit den PGI-Compilern erzeugt, keine shared Libraries | |
MVAPICH mit Gnu Compiler | module load mvapich-gnu (oder alternativ: module load mpi-osu-gnu) | mpicc: gccmpicxx, mpiCC: g++ mpif77: g77 (mpif90: kein Fortran90) | alle MPI-Bibliotheken mit den Gnu-Compilern erzeugt | |
MVAPICH2 mit Intel Compiler | module load mvapich2-intel | mpicc: iccmpicxx: icpc mpif77: ifort mpif90: ifort | alle MPI-Bibliotheken mit den Intel-Compilern erzeugt | |
MVAPICH2 mit Portland Group Compiler | module load mvapich2-pgi | mpicc: pgcc mpicxx: pgCC mpif77: pgf77 mpif90: pgf90 | alle MPI-Bibliotheken mit den PGI-Compilern erzeugt, keine shared Libraries | |
MVAPICH2 mit Gnu Compiler | module load mvapich2-gnu | mpicc: gcc mpicxx: g++ mpif77: g77 (mpif90: kein Fortran90) | alle MPI-Bibliotheken mit den Gnu-Compilern erzeugt | |
MPICH mit Intel Compiler | module load mpich-intel | mpicc: iccmpicxx, mpiCC: icpc mpif77: ifort mpif90: ifort | alle MPI-Bibliotheken mit den Intel-Compilern erzeugt | |
MPICH mit Portland Group Compiler | module load mpich-pgi | mpicc: pgcc mpicxx, mpiCC: pgCC mpif77: pgf77 mpif90: pgf90 | alle MPI-Bibliotheken mit den PGI-Compilern erzeugt, keine shared Libraries | |
MPICH mit Gnu Compiler | module load mpich-gnu | mpicc: gcc mpicxx, mpiCC: g++ mpif77: g77 (mpif90: kein Fortran90) | alle MPI-Bibliotheken mit den Gnu-Compilern erzeugt |
Einige weitere Details erhält man mittels
module show mxxx-yyy
und
module help mxxx-yyy
wobei mxxx-yyy für das gewählte MPI/Compiler-Module steht.
Ihre Meinung
Fehlt etwas? Könnte die Dokumentationen ergänzt/verbessert werden? Wenn Sie Ideen oder kritische Bemerkungen haben, dann bitte melden Sie sich bei Herrn Dr. Brand oder Herrn Dr. Cochrane.

