Gå til innhold

Bygging med GPU-støtte

FrontISTR kan kjøres på GPU-er ved hjelp av OpenACC-funksjonaliteten i NVIDIA HPC SDK. Denne siden beskriver hvordan FrontISTR bygges med GPU-støtte aktivert, og hvordan det kjøres.

Se Påkrevde og valgfrie avhengigheter for bibliotekene som kreves på forhånd.

Byggeprosedyre

Bruk kompilatorene i NVIDIA HPC SDK (nvc, nvc++, nvfortran). I et HPC-klyngemiljø må NVIDIA HPC SDK lastes inn før bygging i henhold til miljøets dokumentasjon (for eksempel module load nvhpc).

Valgfrie biblioteker som METIS, MUMPS og MKL støtter ikke GPU, og er derfor deaktivert i kommandoeksemplene nedenfor (for eksempel WITH_METIS=OFF).

Som beskrevet i Bygging med CMake, når NVIDIA HPC SDK (nvc, nvc++, nvfortran) er angitt som kompilatorer, settes -gpu=ccnative,mem:managed i CMakeLists.txt. ccnative oppdager automatisk GPU-en i byggemiljøet og velger det optimale målet, slik at manuell tilpasning ikke er nødvendig. mem: angir hvordan GPU-minnet håndteres og er påkrevd fordi FrontISTRs GPU-implementasjon forutsetter Unified Memory. mem:managed er standardinnstillingen for vanlige miljøer der CPU og GPU har separat minne.

Merk: På arkitekturer som Miyabi (GH200), der CPU og GPU er integrert via NVLink, erstattes mem:managed med mem:unified. Endre innstillingen etter miljøet som brukes (-gpu=ccnative,mem:unified).

OpenACC + OpenMP (uten 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

Når MPI brukes, må MPI-wrapperkompilatorene (for eksempel mpicc) være konfigurert slik at de internt kaller kompilatorene i NVIDIA HPC SDK (for eksempel nvc). I mange HPC-klyngemiljøer opprettes denne konfigurasjonen automatisk når NVIDIA HPC SDK og MPI-bibliotekene lastes inn med kommandoer som module load. Anbefalte versjoner og innlastingsprosedyrer varierer imidlertid mellom miljøer, så se brukerdokumentasjonen for det aktuelle miljøet for detaljer.

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

Kjøring

Kjøreprosedyren for en GPU-bygging er i hovedsak den samme som for en CPU-bygging. Se Kjøringsveiledningen for generelle kjøreprosedyrer.

Profilering

Profileringsdata kan samles inn med NVIDIA Nsight Systems (nsys).

Uten MPI

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

Med MPI

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