Software-Umgebung auf den HPC-Systemen am RRZE
Veraltete Seite
Diese Seite ist veraltet. Sie wurde durch eine allgemeinere Seite zur Umgebung auf den RRZE HPC Systemen ersetzt. Bitte nicht mehr auf diese Seite verlinken.
Diese Webseite behandelt die folgenden Themen:
Module-Konzept
Auf allen HPC-Systemen des RRZE sind gängige Tools zur
Software-Entwicklung (Editoren, Compiler, Bibliotheken, ...) sowie
ausgewählte Anwendungsprogramme verfügbar. Für eine Vielzahl
von Applikationen ist es nötig, spezielle Umgebungsvariablen zu
setzten, damit z.B. Suchpfade stimmen oder Lizenzserver gefunden
werden. Um den Anwendern die Auswahl von und das Wechseln zwischen
verschiedenen Softwarepaketen oder verschiedenen Versionen eines
Softwarepakets zu erleichtern, wird auf allen Linux-basierten
HPC-Systemen des RRZE das Module-System
(vgl.
modules.sourceforge.net)
verwendet. Damit lassen sich Einstellungen für
unterschiedlichste Programme und Versionen einheitlich und einzelnen
sehr bequem laden und ggf. später auch wieder entladen
(entfernen). Die neuen, einheitlichen Module-Befehle ersetzen damit
die bisherigen applikationsspezifischen source-Kommandos.
Wichtige module Kommandos
module avail |
zeigt alle dem System verfügbaren Module an |
module whatis |
zeigt eine ausführlichere Liste aller auf dem System verfügbaren Module an |
module list |
zeigt die aktuell geladenen Module an |
module load <pkg> |
lädt das Modul pkg, d.h. alle Einstellungen (z.B. Suchpfade), die für das Paket pkg nötig sind, werden gesetzt |
module unload <pkg> |
entfernt das Module pkg, d.h. Einstellungen, die durch das Laden gemacht wurden, werden wieder rückgängig gemacht |
module help <pkg> |
zeigt eine detaillierte Beschreibung zum Module pkg an |
module show <pkg> |
zeigt an, welche Einstellungen durch das Module pkg gesetzt werden |
Allgemeine Hinweise zur Benutzung
- Durch die Module werden jeweils nur in der aktuellen Shell veränderungen vorgenommen.
- Sollen einzelne Module stets geladen werden, so kann der entsprechende
Befehl z.B. in die Datei
$HOME/.cshrcgeschrieben werden. - Der Syntax der
module-Befehle ist unabhängig von der verwendeten Shell. Sie lassen sich daher unverändert in PBS-Jobscripten verwenden. - Manche Module können/sollten nicht gleichzeitig mit anderen geladen werden. In einigen Fällen wird ein solcher Konflikt beim Laden automatisch erkannt. Es erscheint dann eine entsprechende Fehlermeldung und es werden keinerlei Veränderungen vorgenommen.
Wichtige Module auf dem IA32-Cluster
Auf dem IA32-Cluster sind diverse Meta-Module vorhanden. Diese Module laden automatisch weitere Einzelmodule und vereinfachen somit die Auswahl empfohlener Softwarekomponenten. Details zu den Einzelmodulen finden Sie weiter unten auf dieser Seite.
intel |
Durch dieses Meta-Modul wird die Verwendung der Intel C/C++ und Fortran Compiler in der vom RRZE empfohlenen Version für 32 Bit Systeme vorbereitet. Gleichzeitg werden die nötigen Einstellungen für ein dazu passendes GBit-MPICH gesetzt. |
intel64 |
Durch dieses Meta-Modul wird die Verwendung der Intel C/C++ und Fortran Compiler in der vom RRZE empfohlenen Version für 64 Bit Systeme vorbereitet. Gleichzeitg werden die nötigen Einstellungen für ein dazu passendes GBit-MPICH gesetzt. |
mpich/gnu und mpich/gnu64 |
Dieses Modul ist genau genommen kein Meta-Modul, da die GNU Compiler standardmässig im Suchpfad enthalten sind. Dieses Module bereitet die Verwendung von MPICH über GBit mit den 32/64-bit GNU Compilern vor. |
Um eine grössere Wahlmöglichkeit zu haben, kann man auch einzelne Module in speziellen Versionen laden:
intel-c/X.Y-Z, intel-f/X.Y-Z,
intel64-c/X.Y-Z und intel64-f/X.Y-Z |
Durch diese Module können spezielle Versionen der Compiler ausgewählt werden. MPI-Module werden dadurch nicht automatisch geladen. |
mpich/gnu64-ib und mpich/intel64-ib |
Lädt die Einstellungen für die Infiniband-Variante von MPICH. |
Eine aktuelle Liste mit allen verfügbaren Modulen mit
entsprechenden Beschreibungen erhalten Sie durch die Befehle
module avail und module whatis!
Einige Tipps, welche den Umgang mit den Modulen insbesondere in
Makefile-Dateien erleichtern können:
- Durch die MPI-Module werden die Umgebungsvariablen
MPICHROOTDIRundMPIHOMEauf das jeweilige Basisverzeichnis der passenden MPICH-Version gesetzt. Der Zugriff auf die Include-Dateien und Bibliotheken kann somit in Makefiles vereinheitlicht als$MPIHOME/includeund$MPIHOME/liberfolgen. - Die Intel Compiler-Module setzen analog die Umgebungsvariablen
INTEL_C_HOMEbzw.INTEL_F_HOMEauf das jeweilige Basis-Verzeichnis. Dies kann insbesondere hilfreich sein, wenn man Fortran und C++ Objekte miteinadere Linken will und dafür die passenden Bibliotheken manuell angeben muss.
Wichtige Module auf der SGI Altix
Auf der SGI Altix ist es nicht nötig, MPI Module zu laden, so dass es auf diesem System insbesondere Module zum Laden der Intel Compiler gibt. Die Namenskonvention entspricht der des IA32-Clusters.
Übersicht über verfügbare Software auf den verschiedenen HPC-Systemen
Die nachfolgende Tabelle soll eine grobe Übersicht über
die auf den verschiedenen HPC-Systemen verfübare Software
geben. Aktuelle Informationen insbesondere zu den verfügbaren
Versionsnummern erhalten Sie durch den Aufruf von module
avail auf den entsprechenden Maschinen.
| Programm(klasse) | Cluster32 | SGI Altix | Woody | Bemerkung |
|---|---|---|---|---|
| GNU Compiler | 4.x als default | 4.x als default | 4.x als default | die exakte Version variiert abhänig von der zugrundeliegenden Distribution |
| Native Compiler (32 bit) | Intel C/C++ und Fortran90 Compiler | N/A | N/A | |
| Native Compiler (64 bit) | Intel C/C++ und Fortran90 Compiler für EM64T 9.1 und neuer | Intel C/C++ und Fortran90 Compiler für IA64 9.1 und neuer | Intel C/C++ und Fortran90 Compiler für EM64T 9.1 und neuer | |
| Mathematische Bibliotheken | Intel MKL | Intel MKL SCSL (nur in Verbindung mit Intel 7.1 Compiler) |
Intel MKL | |
| MPI Bibliotheken | mpich-1.2.x in passenden Versionen für alle vorhandenen Compiler | SGI MPT | Intel MPI | |
| Debugger | ddd, Totalview (32-bit) auf sfront01/02 | ddd | DDT | |
| Profiling-Tools | ja | ja | ja | für Details bitte HPC-Beratung kontaktieren |
| Programm(klasse) | Cluster32 | SGI Altix | Woody | Bemerkung |
|---|---|---|---|---|
| STAR-CD | ja | auf Anfrage | ja | Bezügl. Lizenz bitte hpc@rzze kontaktieren |
| CFX-5 | lauffähig | auf Anfrage | ja | Bei Interesse bitte hpc@rzze kontaktieren und Lizenz selbst besorgen |
| Fluent | prinzipiell lauffähig | -- | -- | Das RRZE kann hierfür keinerlei Hilfestellung geben! Bei jeglichen Problemen bitte stets Fluent Deutschland kontaktieren |
| Bio-Chemie Software | ja | ja | ja | gaussian, amber, gromacs, etc. |
| abaqus | ja | -- | ja | Bei Interesse bitte hpc@rzze kontaktieren. |
| maple | ||||
| mathematica |
OpenMP Pinning
Allgemeines
Um optimale Performance mit OpenMP Codes zu erzielen, ist - speziell auf
ccNUMA-Maschinen wie den Opterons im Cluster64 oder einigen
Testclustermaschinen, aber nicht nur dort - richtiges Pinning der von
OpenMP erzeugten Threads essenziell wichtig.
Hierfür bieten wir auf den RRZE-Systemen (inkl. Testcluster) eine
bequeme Möglichkeit: Wir haben eine kleine Bibliothek implenentiert,
die zur Laufzeit die Aufrufe des OpenMP-Programms zum Erstellen der Threads
durch Varianten ersetzt, welche das Pinning erledigen.
Verwendung
Zur einfachen Verwendung dieser Bibliothek existiert
das Script /apps/rrze/bin/pin_omp das im einfachsten Fall
wie folgt verwendet wird:
/apps/rrze/bin/pin_omp -c 0-7 ./mybinary
Dies startet ./mybinary und pint die Threads auf Core 0-7.
Mögliche Probleme
Leider ist die Bibliothek aus verschiedenen Gründen nicht immer so einfach verwendbar:
- statisch gelinkte Binaries lassen sich nicht durch unsere Bibliothek austricksen. Es funktionieren folglich nur dynamisch gelinkte Binaries.
- Die Bibliothek geht von dem Thread-Layout aus, das die Intel Compiler erzeugen. Binaries die mit anderen Compilern erzeugt wurden erfordern möglicherweise andere Parameter und könnten daher durch die Verwendung der Bibliothek sogar langsamer werden.
- Die Intel-Compiler ab Version 10.0 versuchen selbst ein Pinning,
das mit den Pinningversuchen unserer Bibliothek
kollidiert. Das führt
im Normalfall dazu, dass alle Threads auf einem einzigen CPU-Kern
landen, was natürlich eine grausige Performance ergibt. Allerdings
tun sie das nur auf original Intel CPUs, wenn die gleichen Binaries
z.B. auf einem Opteron ausgeführt werden, führen sie keine
Pinningversuche durch, und unsere Bibliothek funktioniert wie erwartet.
Ab Compilerversion 10.1.18 oder 11.0 lässt sich das Pinning durch
setzen der Umgebungsvariable KMP_AFFINITY deaktivieren:
setenv KMP_AFFINITY disabled - Die Reihenfolge der CPU Parameter wird nicht beachtet:
-c 0-7hat genau den gleichen Effekt wie-c 1,3,5,7,0,2,4,6. Eine Reihenfolge kann jedoch per Umgebungsvariable erzwungen werden - siehe hierzu den Abschnitt für Fortgeschrittene.
Die folgende Tabelle fasst die empfohlenen Einstellungen zusammen:
| Compiler | auf Intel CPUs | auf nicht-Intel CPUs (z.B. Opteron) |
|---|---|---|
| Intel 9.1 | pin_omp verwenden | pin_omp verwenden |
| Intel 10.0 bis 10.1.17 | pin_omp nicht verwenden | pin_omp verwenden |
| Intel ab 10.1.18 | pin_omp verwenden, Variable KMP_AFFINITY auf disabled setzen. | pin_omp verwenden |
Weitere Möglichkeiten für erfahrene Benutzer
Fortgeschrittene Benutzer können das Verhalten der Bibliothek durch Umgebungsvariablen sehr detailiert beeinflussen.
| Variable | Bedeutung |
|---|---|
PINOMP_MASK |
funktioniert ähnlich wie der 'dplace' Parameter -x, d.h. es wird eine Zahl erwartet, die als Bitmaske interpretiert wird. Die Threads fuer die das entsprechende Bit gesetzt ist werden nicht gepinnt. |
PINOMP_SKIP |
Funktioniert wie der 'dplace' Parameter -s: Der Thread mit der angegeben Nummer wird nicht gepinnt. Mehrere Werte können durch Komma getrennt angegeben werden. |
PINOMP_CPUS |
Spezifiziert explizit die zu verwendenden CPUs und ihre Reihenfolge, wobei die CPU-Nummern durch Komma getrennt angegeben werden müssen. Dies überschreibt den -c Parameter auf der Kommandozeile. |



