Slaan oor na inhoud

Bou met GPU-ondersteuning

FrontISTR kan op GPU's loop deur die OpenACC-funksionaliteit van die NVIDIA HPC SDK te gebruik. Hierdie bladsy beskryf hoe om FrontISTR met GPU-ondersteuning geaktiveer te bou en hoe om dit uit te voer.

Vir die vereiste biblioteke, sien Vereiste en opsionele afhanklikhede.

Bouprosedure

Gebruik die NVIDIA HPC SDK-kompileerders (nvc, nvc++ en nvfortran). In ’n HPC-klusteromgewing moet die NVIDIA HPC SDK volgens die omgewingshandleiding gelaai word voordat daar gebou word (byvoorbeeld module load nvhpc).

Opsionele biblioteke soos METIS, MUMPS en MKL ondersteun nie GPU's nie, daarom word hulle in die opdragvoorbeelde hieronder gedeaktiveer (byvoorbeeld WITH_METIS=OFF).

Soos beskryf in Bou met CMake, wanneer die NVIDIA HPC SDK (nvc, nvc++, nvfortran) as die kompileerders gespesifiseer word, word -gpu=ccnative,mem:managed in CMakeLists.txt gestel. ccnative is ’n opsie wat die GPU in die bou-omgewing outomaties opspoor en die optimale teiken kies, sodat geen handmatige veranderinge vir elke omgewing nodig is nie. mem: is ’n opsie wat spesifiseer hoe GPU-geheue hanteer word; dit word vereis omdat die FrontISTR-GPU-implementering Unified Memory aanneem. mem:managed is die verstekinstelling vir algemene omgewings waarin die CPU en GPU afsonderlike geheue het.

Opmerking: Op argitekture soos Miyabi (GH200), waar die CPU en GPU via NVLink geïntegreer is, word mem:unified in plaas van mem:managed gebruik; verander die instelling volgens die omgewing wat gebruik word (-gpu=ccnative,mem:unified).

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

Wanneer MPI gebruik word, moet die MPI-omhulkompileerders (soos mpicc) gekonfigureer wees om die NVIDIA HPC SDK-kompileerders (soos nvc) intern aan te roep. In baie HPC-klusteromgewings verskaf die laai van die NVIDIA HPC SDK- en MPI-biblioteke met opdragte soos module load hierdie konfigurasie outomaties. Aanbevole weergawes en laaiprosedures verskil egter per omgewing; raadpleeg dus die gebruikershandleiding of ander dokumentasie vir elke omgewing vir besonderhede.

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

Uitvoering

Die uitvoeringsprosedure vir ’n GPU-bou is basies dieselfde as vir ’n CPU-bou. Vir algemene uitvoeringsprosedures, sien die Uitvoeringsgids.

Profilering

Profileringsdata kan met NVIDIA Nsight Systems (nsys) versamel word.

Sonder MPI

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

Met MPI

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