Preskoči na sadržaj

Translation update pending

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

Izgradnja s podrškom za GPU

FrontISTR se može izvoditi na GPU-u koristeći OpenACC funkcionalnost paketa NVIDIA HPC SDK. Ova stranica opisuje postupak izgradnje s omogućenom GPU podrškom i način izvođenja.

Za potrebne biblioteke pogledajte Obvezne i opcionalne zavisnosti.

Postupak izgradnje

Koristite kompajlere NVIDIA HPC SDK-a (nvc, nvc++, nvfortran). U okruženju HPC klastera prije izgradnje potrebno je učitati NVIDIA HPC SDK prema uputama za to okruženje (na primjer: module load nvhpc).

Opcionalne biblioteke kao što su METIS, MUMPS i MKL ne podržavaju GPU, pa su u primjerima naredbi u nastavku onemogućene (na primjer WITH_METIS=OFF).

Kao što je opisano u Postupku izgradnje s CMakeom, kada se za kompajlere odabere NVIDIA HPC SDK (nvc, nvc++, nvfortran), u datoteci CMakeLists.txt postavlja se -gpu=ccnative,mem:managed. ccnative automatski prepoznaje GPU u okruženju izgradnje i odabire optimalni cilj, pa ručne izmjene za pojedina okruženja nisu potrebne. mem: određuje način upravljanja GPU memorijom i obvezan je jer GPU implementacija FrontISTR-a pretpostavlja Unified Memory. mem:managed zadana je postavka za uobičajena okruženja u kojima CPU i GPU imaju odvojenu memoriju.

Napomena: Na arhitekturama kao što je Miyabi (GH200), gdje su CPU i GPU povezani putem NVLinka u objedinjeno memorijsko okruženje, umjesto mem:managed koristi se mem:unified; postavku zato prilagodite korištenom okruženju (-gpu=ccnative,mem:unified).

OpenACC + OpenMP (bez MPI-ja)

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-ja omotni MPI kompajleri (na primjer mpicc) moraju biti konfigurirani tako da interno pozivaju kompajlere NVIDIA HPC SDK-a (na primjer nvc). U mnogim okruženjima HPC klastera takva se konfiguracija automatski uspostavlja kada se NVIDIA HPC SDK i MPI biblioteke učitaju naredbama poput module load. Preporučene verzije i postupci učitavanja razlikuju se među okruženjima, pa pojedinosti potražite u korisničkom priručniku odgovarajućeg okruženja.

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

Bez OpenACC-a (CPU inačica)

Za izgradnju CPU inačice s prevoditeljima NVIDIA HPC SDK bez OpenACC-a navedite -DNVHPC_NO_ACC=ON. U tom slučaju -acc, -Minfo=accel i -gpu=ccnative,mem:managed nisu postavljeni. Ovu konfiguraciju upotrijebite pri usporedbi rezultata s GPU inačicom izgrađenom istim prevoditeljima.

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

Izvođenje

Postupak izvođenja GPU izgradnje u osnovi je isti kao i za CPU izgradnju. Za opći postupak izvođenja pogledajte Vodič za izvođenje.

Profiliranje

Podaci za profiliranje mogu se prikupiti pomoću NVIDIA Nsight Systemsa (nsys).

Bez MPI-ja

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

S MPI-jem

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