Hyppää sisältöön

Translation update pending

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

Kääntäminen GPU-tuella

FrontISTR voi käyttää GPU:ita NVIDIA HPC SDK:n OpenACC-toiminnallisuuden avulla. Tällä sivulla kuvataan FrontISTR:n kääntäminen GPU-tuki käyttöön otettuna sekä sen suorittaminen.

Edellytyskirjastot on kuvattu kohdassa Pakolliset ja valinnaiset riippuvuudet.

Kääntämismenettely

Käytä NVIDIA HPC SDK:n kääntäjiä (nvc, nvc++ ja nvfortran). HPC-klusteriympäristössä NVIDIA HPC SDK on ladattava ennen kääntämistä ympäristön käyttöohjeen mukaisesti (esimerkiksi module load nvhpc).

Valinnaiset kirjastot, kuten METIS, MUMPS ja MKL, eivät tue GPU:ita, joten ne poistetaan käytöstä alla olevissa komentoesimerkeissä (esimerkiksi WITH_METIS=OFF).

Kuten kohdassa Kääntäminen CMake-ohjelmalla kuvataan, kun kääntäjiksi määritetään NVIDIA HPC SDK (nvc, nvc++, nvfortran), CMakeLists.txt asettaa valinnan -gpu=ccnative,mem:managed. ccnative tunnistaa automaattisesti käännösympäristön GPU:n ja valitsee optimaalisen kohteen, joten ympäristökohtaisia manuaalisia muutoksia ei tarvita. mem: määrittää GPU-muistin käsittelytavan; se on pakollinen, koska FrontISTR:n GPU-toteutus olettaa Unified Memory -muistin. mem:managed on oletusasetus yleisissä ympäristöissä, joissa CPU:lla ja GPU:lla on erillinen muisti.

Huomautus: Miyabin (GH200) kaltaisissa arkkitehtuureissa, joissa CPU ja GPU on yhdistetty NVLinkin kautta, käytetään mem:managed-asetuksen sijasta mem:unified-asetusta; muuta asetus käytettävän ympäristön mukaan (-gpu=ccnative,mem:unified).

OpenACC + OpenMP (ilman MPI:tä)

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

MPI:tä käytettäessä MPI-kääntäjäkääreet (kuten mpicc) on määritettävä kutsumaan sisäisesti NVIDIA HPC SDK -kääntäjiä (kuten nvc). Monissa HPC-klusteriympäristöissä NVIDIA HPC SDK:n ja MPI-kirjastojen lataaminen esimerkiksi module load -komennoilla muodostaa tämän määrityksen automaattisesti. Suositellut versiot ja latausmenettelyt vaihtelevat kuitenkin ympäristöittäin, joten katso yksityiskohdat kyseisen ympäristön käyttöoppaasta tai muusta dokumentaatiosta.

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

Ilman OpenACC:tä (CPU-versio)

Kun NVIDIA HPC SDK -kääntäjillä rakennetaan CPU-versio ilman OpenACC:tä, määritä -DNVHPC_NO_ACC=ON. Tällöin asetuksia -acc, -Minfo=accel ja -gpu=ccnative,mem:managed ei aseteta. Käytä tätä kokoonpanoa, kun vertaat laskentatuloksia samoilla kääntäjillä rakennettuun GPU-versioon.

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

Suoritus

GPU-käännöksen suoritusmenettely on periaatteessa sama kuin CPU-käännöksen. Yleiset suoritusmenettelyt ovat Suoritusoppaassa.

Profilointi

Profilointitietoja voidaan kerätä NVIDIA Nsight Systems (nsys) -ohjelmalla.

Ilman MPI:tä

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

MPI:n kanssa

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