Skoči na vsebino

Translation update pending

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

Gradnja s podporo za GPU

FrontISTR se lahko izvaja na grafičnih procesorjih z uporabo funkcionalnosti OpenACC iz NVIDIA HPC SDK. Ta stran opisuje postopek gradnje z omogočeno podporo za GPU in način izvajanja.

Za zahtevane knjižnice glejte Obvezne in neobvezne odvisnosti.

Postopek gradnje

Uporabite prevajalnike NVIDIA HPC SDK (nvc, nvc++, nvfortran). V okolju gruče HPC je treba pred gradnjo naložiti NVIDIA HPC SDK v skladu z navodili za uporabljeno okolje (na primer module load nvhpc).

Izbirne knjižnice, kot so METIS, MUMPS in MKL, ne podpirajo GPU, zato so v spodnjih primerih ukazov onemogočene (na primer WITH_METIS=OFF).

Kot je opisano v Postopku gradnje s CMake, se ob izbiri prevajalnikov NVIDIA HPC SDK (nvc, nvc++, nvfortran) v datoteki CMakeLists.txt nastavi -gpu=ccnative,mem:managed. Možnost ccnative samodejno zazna GPU v okolju gradnje in izbere optimalni cilj, zato ročne prilagoditve za posamezna okolja niso potrebne. Možnost mem: določa način ravnanja s pomnilnikom GPU in je obvezna, ker izvedba GPU v FrontISTR predpostavlja Unified Memory. mem:managed je privzeta nastavitev za običajna okolja, v katerih imata CPU in GPU ločen pomnilnik.

Opomba: Pri arhitekturah, kot je Miyabi (GH200), kjer sta CPU in GPU prek NVLinka povezana v enotno pomnilniško okolje, se namesto mem:managed uporablja mem:unified; nastavitev zato prilagodite uporabljenemu okolju (-gpu=ccnative,mem:unified).

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

Pri uporabi MPI morajo biti ovojni prevajalniki MPI (na primer mpicc) konfigurirani tako, da interno kličejo prevajalnike NVIDIA HPC SDK (na primer nvc). V številnih okoljih gruč HPC se takšna konfiguracija vzpostavi samodejno, ko z ukazi, kot je module load, naložite NVIDIA HPC SDK in knjižnice MPI. Priporočene različice in postopki nalaganja se med okolji razlikujejo, zato podrobnosti preverite v uporabniškem priročniku posameznega okolja.

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

Brez OpenACC (različica za CPU)

Za gradnjo različice za CPU s prevajalniki NVIDIA HPC SDK brez OpenACC določite -DNVHPC_NO_ACC=ON. V tem primeru se -acc, -Minfo=accel in -gpu=ccnative,mem:managed ne nastavijo. To konfiguracijo uporabite pri primerjavi rezultatov z različico za GPU, zgrajeno z istimi prevajalniki.

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DNVHPC_NO_ACC=ON \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  ..
make -j

Izvajanje

Postopek izvajanja gradnje za GPU se v osnovi ne razlikuje od gradnje za CPU. Za splošni postopek izvajanja glejte Vodnik za izvajanje.

Profiliranje

Podatke za profiliranje lahko zbirate z NVIDIA Nsight Systems (nsys).

Brez MPI

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

Z MPI

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