Zum Inhalt

Build mit GPU-Unterstützung

FrontISTR kann mithilfe der OpenACC-Funktionalität des NVIDIA HPC SDK auf einer GPU ausgeführt werden. Diese Seite beschreibt das Build-Verfahren mit aktivierter GPU-Unterstützung sowie die Ausführung.

Zu den vorausgesetzten Bibliotheken siehe Erforderliche und optionale Abhängigkeiten.

Build-Verfahren

Verwenden Sie die Compiler des NVIDIA HPC SDK (nvc, nvc++, nvfortran). In HPC-Clusterumgebungen muss das NVIDIA HPC SDK vor dem Build gemäß dem Handbuch der jeweiligen Umgebung geladen werden (z. B. module load nvhpc).

Optionale Bibliotheken wie METIS, MUMPS und MKL unterstützen die GPU nicht und werden daher in den folgenden Befehlsbeispielen deaktiviert (WITH_METIS=OFF usw.).

Wie unter Build-Verfahren mit CMake beschrieben, setzt die CMakeLists.txt bei Auswahl der NVIDIA-HPC-SDK-Compiler (nvc, nvc++, nvfortran) die Option -gpu=ccnative,mem:managed. ccnative erkennt automatisch die GPU der Build-Umgebung und wählt ein geeignetes Ziel, sodass keine manuelle Anpassung für jede Umgebung erforderlich ist. mem: legt die Behandlung des GPU-Speichers fest; da die GPU-Implementierung von FrontISTR Unified Memory voraussetzt, ist diese Angabe obligatorisch. mem:managed ist die Standardeinstellung für gewöhnliche Umgebungen, in denen CPU und GPU getrennte Speicher besitzen.

Hinweis: Bei Architekturen wie Miyabi (GH200), bei denen CPU und GPU über NVLink integriert sind, wird statt mem:managed mem:unified verwendet. Passen Sie die Einstellung daher entsprechend der verwendeten Umgebung an (-gpu=ccnative,mem:unified).

OpenACC + OpenMP (ohne MPI)

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  -DWITH_METIS=OFF -DWITH_MUMPS=OFF \
  -DWITH_MKL=OFF -DWITH_LAPACK=OFF \
  -DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
  ..
make -j

OpenACC + OpenMP + MPI

Bei Verwendung von MPI müssen die MPI-Wrapper-Compiler (mpicc usw.) intern die Compiler des NVIDIA HPC SDK (nvc usw.) aufrufen. In HPC-Clusterumgebungen wird diese Konfiguration häufig automatisch hergestellt, wenn das NVIDIA HPC SDK und die MPI-Bibliothek beispielsweise mit module load geladen werden. Da sich empfohlene Versionen und Ladeverfahren je nach Umgebung unterscheiden, beachten Sie für Einzelheiten das Benutzerhandbuch der jeweiligen Umgebung.

mkdir build
cd build
CC=mpicc CXX=mpic++ FC=mpif90 cmake \
  -DWITH_MPI=ON -DWITH_OPENMP=ON \
  -DWITH_METIS=OFF -DWITH_MUMPS=OFF \
  -DWITH_MKL=OFF -DWITH_LAPACK=OFF \
  -DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
  ..
make -j

Ausführung

Das Ausführungsverfahren für einen GPU-Build unterscheidet sich grundsätzlich nicht von dem für die CPU. Allgemeine Ausführungsanweisungen finden Sie im Ausführungsleitfaden.

Profiling

Mit NVIDIA Nsight Systems (nsys) können Profildaten erfasst werden.

Ohne MPI

nsys profile -t cuda -s none -o profile_result /path/to/FrontISTR/build/fistr1/fistr1

Mit MPI

nsys profile -t cuda,mpi -s none -o profile_result \
  mpiexec -n <Prozessanzahl> /path/to/FrontISTR/build/fistr1/fistr1 -t 8