Auf dem OMNI-Cluster sind sowohl BLAS als auch LAPACK in mehreren Formen verfügbar.
OpenBLAS ist eine weit verbreitete Bibliothek zum Berechnen von Vektor- und Matrix-Operationen, die sowohl das BLAS-Interface (BLAS = Basic Linear Algebra Subprograms) als auch das LAPACK-Interface (LAPACK = Linear Algebra PACKage) implementiert. Auf dem OMNI-Cluster ist OpenBLAS im Rahmen von OpenHPC in der Version 0.3.7 (compiliert mit GCC 9.3.0) installiert.
Zusätzlich ist auf dem OMNI-Cluster SCALAPACK in der Version 2.1.0 installiert. SCALAPACK beinhaltet einen Teil der LAPACK-Routinen in parallelisierter Form.
Auf dieser Seite finden Sie Informationen, wie Sie die Umgebungsmodule verwenden und wie Sie die Libraries in Ihre eigene Software einbinden können. Die Dokumentation von BLAS allgemein befindet sich hier, die Dokumentation von LAPACK hier. Die Dokumentation von OpenBLAS im Speziellen befindet sich hier, die von SCALAPACK finden Sie hier.
Auf dem Cluster ist außerdem die Intel MKL installiert, die ebenfalls die BLAS- und LAPACK-Interfaces implementiert.
Umgebungsmodule
OpenBLAS-Umgebungsmodul
Um OpenBLAS zu verwenden, muss das entsprechende Modul geladen werden:
module load openblas
Hinweis: Aufgrund der Modulstruktur von OpenHPC sind nicht alle Module immer mit module avail
sichtbar. OpenBLAS wird nur bei einem module avail
angezeigt, wenn das entsprechende GCC-Modul (module load gnu9
) bereits geladen ist. Auf dem OMNI ist standardmäßig das Modul gnu9
geladen, allerdings könnte es passieren, dass Sie das Modul absichtlich oder versehentlich entladen haben. In diesem Fall können die Informationen zum OpenBLAS-Modul mit
module spider openblas
angezeigt werden.
SCALAPACK-Umgebungsmodul
Das SCALAPACK-Modul kann geladen werden mit
module load scalapack
Hinweis: Da SCALAPACK wie OpenBLAS ebenfalls aus OpenHPC kommt, ist es ebenso nicht zwangsläufig mit module avail
sichtbar, sondern nur wenn ein Compiler-Modul und ein MPI-Modul bereits geladen sind. Standardmäßig sind die Module gnu9
und openmpi4
geladen.
Analog zu OpenBLAS kann SCALAPACK immer mit
module spider scalapack
angezeigt werden. Beachten Sie, dass SCALAPACK von OpenBLAS abhängig ist. Das heißt, das OpenBLAS-Modul wird mitgeladen, wenn SCALAPACK geladen wird.
Zusätzlich zu der Standard-Kombination von GCC 9.3.0 und OpenMPI 4 stehen andere Varianten von SCALAPACK zur Verfügung, die gegen andere Compiler und MPI-Libraries gelinkt sind. Sie können die komplette Liste ebenfalls mit module spider scalapack
anzeigen lassen.
$ module spider scalapack
(...)
Description:
A subset of LAPACK routines redesigned for heterogenous computing
You will need to load all module(s) on any one of the lines below before the "scalapack/2.1.0" module is available to load.
gnu9/9.3.0 impi/2019.5
gnu9/9.3.0 openmpi4/4.0.4
(...)
intel/19.1.2.100006_cm9.0_ae8d786e90 impi/2020.2.100006_cm9.0_ae8d786e90
intel/19.1.2.100006_cm9.0_ae8d786e90 openmpi4/4.0.4
Wie in dieser gekürzten Liste erkennbar, gibt es eine Reihe von Kombinationen von Compiler (sowohl Intel als auch GCC) und MPI-Bibliothek, mit denen SCALAPACK funktioniert. Wie im Text erwähnt, müssen alle Module auf einer Zeile geladen werden (z.B. module load gnu9/9.3.0 impi/2019.5
), damit SCALAPACK genutzt werden kann.
Compilieren und Linken
Compilieren mit OpenBLAS-Bibliotheken
Beim Laden des OpenBLAS-Moduls werden folgende Umgebungsvariablen gesetzt:
OPENBLAS_DIR
: Installationsverzeichnis von OpenBLASOPENBLAS_LIB
: Library-Verzeichnis von OpenBLASOPENBLAS_INC
: Include-Verzeichnis von OpenBLAS
Wenn Sie ein Programm compilieren möchten, das OpenBLAS verwendet, müssen Sie beim Compilieren bzw. beim Linken die entsprechenden Verzeichnisse angeben.
Zusätzlich hierzu werden bestimmte OpenBLAS-Verzeichnisse beim Laden des Moduls auch den Umgebungsvariablen PATH
, LD_LIBRARY_PATH
und anderen hinzugefügt. Sie können sich mit module show openblas
im Detail anzeigen lassen, welche Einstellungen gemacht werden.
Achtung: OpenBLAS verwendet dynamisch geladene Bibliotheken (Shared Objects). Wenn Sie Ihr Programm gegen OpenBLAS linken, muss bei der Ausführung ebenfalls das OpenBLAS-Library-Verzeichnis in LD_LIBRARY_PATH
sein, das heißt, Sie müssen das Modul openblas
auch bei der Ausführung laden.
Compilieren mit SCALAPACK
Analog zu OpenBLAS setzt auch SCALAPACK bestimmte Umgebungsvariablen, die beim Compilieren verwendet werden können.
SCALAPACK_DIR
: das SCALAPACK-InstallationsverzeichnisSCALAPACK_LIB
: das SCALAPACK-Library-Verzeichnis
Sie können sich die komplette Liste mit module show scalapack
anzeigen lassen. Wie OpenBLAS erfordert auch SCALAPACK, dass das Modul zur Laufzeit geladen wird (oder zumindest, dass die Shared Objects in LD_LIBRARY_PATH
verfügbar sind).