Salta el contingut

Compilació amb compatibilitat amb GPU

FrontISTR es pot executar en GPU mitjançant la funcionalitat OpenACC de l'NVIDIA HPC SDK. Aquesta pàgina descriu com compilar FrontISTR amb la compatibilitat amb GPU activada i com executar-lo.

Per a les biblioteques necessàries, consulteu Dependències obligatòries i opcionals.

Procediment de compilació

Utilitzeu els compiladors de l'NVIDIA HPC SDK (nvc, nvc++ i nvfortran). En un entorn de clúster HPC, l'NVIDIA HPC SDK s'ha de carregar abans de compilar d'acord amb el manual de l'entorn (per exemple, module load nvhpc).

Les biblioteques opcionals com METIS, MUMPS i MKL no són compatibles amb GPU, de manera que es desactiven als exemples d'ordres següents (per exemple, WITH_METIS=OFF).

Tal com es descriu a Compilació amb CMake, quan s'especifiquen els compiladors de l'NVIDIA HPC SDK (nvc, nvc++, nvfortran), s'estableix -gpu=ccnative,mem:managed a CMakeLists.txt. ccnative és una opció que detecta automàticament la GPU de l'entorn de compilació i selecciona l'objectiu òptim, de manera que no cal fer canvis manuals per a cada entorn. mem: és una opció que especifica com es gestiona la memòria de la GPU; és necessària perquè la implementació GPU de FrontISTR pressuposa Unified Memory. mem:managed és la configuració predeterminada per a entorns generals en què la CPU i la GPU tenen memòries separades.

Nota: En arquitectures com Miyabi (GH200), on la CPU i la GPU estan integrades mitjançant NVLink, s'utilitza mem:unified en lloc de mem:managed; canvieu la configuració segons l'entorn utilitzat (-gpu=ccnative,mem:unified).

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

Quan s'utilitza MPI, els compiladors embolcall d'MPI (com ara mpicc) s'han de configurar perquè invoquin internament els compiladors de l'NVIDIA HPC SDK (com ara nvc). En molts entorns de clúster HPC, carregar l'NVIDIA HPC SDK i les biblioteques MPI amb ordres com module load proporciona automàticament aquesta configuració. Tanmateix, les versions recomanades i els procediments de càrrega varien segons l'entorn, per la qual cosa cal consultar el manual d'usuari o altra documentació de cada entorn per obtenir-ne els detalls.

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

Execució

El procediment d'execució d'una compilació per a GPU és bàsicament el mateix que per a una compilació per a CPU. Per als procediments generals d'execució, consulteu la Guia d'execució.

Perfilatge

Les dades de perfilatge es poden recopilar amb NVIDIA Nsight Systems (nsys).

Sense MPI

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

Amb MPI

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