Gå til innhold

Translation update pending

The Norwegian Bokmål translation may be out of date because the Japanese source has changed. The existing translation remains available while it is being updated.

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

Uten OpenACC (CPU-versjon)

For å bygge en CPU-versjon med NVIDIA HPC SDK-kompilatorene uten OpenACC angir du -DNVHPC_NO_ACC=ON. Da blir ikke -acc, -Minfo=accel eller -gpu=ccnative,mem:managed satt. Bruk denne konfigurasjonen når du vil sammenligne beregningsresultatene med en GPU-versjon bygget med de samme kompilatorene.

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DNVHPC_NO_ACC=ON \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  ..
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