BLAS und LAPACK

Cluster Anwendungssoftware

IN KÜRZE


Kosten

Kostenfrei


Dokumentation


Vorinstalliert auf dem Cluster

SCALAPACK in der Version 2.1.0
OpenBLAS Version 0.3.7 (compiliert mit GCC 9.3.0)



Allgemein

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 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 OpenBLAS
  • OPENBLAS_LIB: Library-Verzeichnis von OpenBLAS
  • OPENBLAS_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 PATHLD_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-Installationsverzeichnis
  • SCALAPACK_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).