Joan zuzenean edukira

GPUarekin konpilatzea

FrontISTR GPUetan exekuta daiteke NVIDIA HPC SDK-ren OpenACC funtzionalitatea erabiliz. Orrialde honetan GPU euskarria gaituta FrontISTR konpilatzeko eta exekutatzeko modua azaltzen da.

Aurrebaldintza diren liburutegiei buruzko xehetasunetarako, ikusi Nahitaezko eta aukerako mendekotasunak.

Konpilazio-prozedura

Erabili NVIDIA HPC SDK konpiladoreak (nvc, nvc++, nvfortran). HPC kluster-ingurune batean, konpilatu aurretik NVIDIA HPC SDK kargatu behar da ingurunearen eskuliburuaren arabera (adibidez, module load nvhpc).

METIS, MUMPS, MKL eta antzeko aukerako liburutegiek ez dute GPU euskarririk; beraz, beheko komando-adibideetan desgaituta daude (adibidez, WITH_METIS=OFF).

CMake bidez konpilatzea atalean azaldu bezala, NVIDIA HPC SDK (nvc, nvc++, nvfortran) konpiladore gisa zehazten denean, -gpu=ccnative,mem:managed ezartzen da CMakeLists.txt-en. ccnative aukerak konpilazio-inguruneko GPUa automatikoki detektatu eta helburu egokiena hautatzen du; beraz, ez da ingurune bakoitzerako eskuz aldatu behar. mem: aukerak GPU memoriaren kudeaketa zehazten du, eta nahitaezkoa da FrontISTR-en GPU inplementazioak Unified Memory erabiltzea aurresuposatzen duelako. mem:managed CPUak eta GPUak memoria bereizia duten ingurune arruntetarako ezarpen lehenetsia da.

Oharra: Miyabi (GH200) bezalako arkitekturetan, CPUa eta GPUa NVLink bidez integratuta daudenean, mem:managed ordez mem:unified erabiltzen da; aldatu ezarpena erabilitako ingurunearen arabera (-gpu=ccnative,mem:unified).

OpenACC + OpenMP (MPI gabe)

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 erabiltzen denean, MPI wrapper konpiladoreek (mpicc, etab.) barnean NVIDIA HPC SDK konpiladoreei (nvc, etab.) deitzeko konfiguratuta egon behar dute. HPC kluster askotan, NVIDIA HPC SDK eta MPI liburutegiak module load bezalako komandoekin kargatzean konfigurazio hori automatikoki ezartzen da. Hala ere, gomendatutako bertsioak eta kargatze-prozedurak ingurunearen arabera aldatzen direnez, xehetasunetarako ikusi dagokion ingurunearen erabiltzaile-eskuliburua edo dokumentazioa.

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

Exekuzioa

GPU konpilazioaren exekuzio-prozedura, funtsean, CPU konpilazioarena bera da. Exekuzio-prozedura orokorretarako, ikusi Exekuzio-gida.

Profilatzea

NVIDIA Nsight Systems (nsys) erabiliz profilatze-datuak bil daitezke.

MPI gabe

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

MPI-rekin

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