Clustersystem > Rechnerressourcen > Software > MPI-Umgebungen

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.

MPI-Forum

MPI Home Page

 

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 / MVAPICH

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: 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: icc
mpicxx, 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: gcc
mpicxx, mpiCC: g++
mpif77: g77
(mpif90: kein Fortran90)

alle MPI-Bibliotheken mit den Gnu-Compilern erzeugt

MVAPICH2  mit Intel Compiler

module load mvapich2-intel
mpicc: icc
mpicxx: 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: icc
mpicxx, 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.

Letzte Änderung: 24.02.2009
 
Verantwortlich RRZN