Pereiti prie turinio

Kompiliavimas su GPU palaikymu

FrontISTR gali veikti GPU naudodamas NVIDIA HPC SDK OpenACC funkcijas. Šiame puslapyje aprašoma, kaip sukompiliuoti FrontISTR su įjungtu GPU palaikymu ir kaip jį vykdyti.

Būtinas bibliotekas žr. Būtinos ir pasirenkamos priklausomybės.

Kompiliavimo procedūra

Naudokite NVIDIA HPC SDK kompiliatorius (nvc, nvc++, nvfortran). HPC klasterio aplinkoje prieš kompiliuojant NVIDIA HPC SDK reikia įkelti pagal aplinkos vadovą (pvz., module load nvhpc).

Pasirenkamos bibliotekos, pvz., METIS, MUMPS ir MKL, nepalaiko GPU, todėl toliau pateiktuose komandų pavyzdžiuose jos išjungtos (pvz., WITH_METIS=OFF).

Kaip aprašyta Kompiliavimas su CMake, kai kompiliatoriais nurodomi NVIDIA HPC SDK (nvc, nvc++, nvfortran), CMakeLists.txt nustatoma -gpu=ccnative,mem:managed. ccnative automatiškai aptinka kompiliavimo aplinkos GPU ir parenka optimalų tikslą, todėl kiekvienai aplinkai rankinių pakeitimų nereikia. mem: nurodo GPU atminties tvarkymą; jis būtinas, nes FrontISTR GPU įgyvendinimas remiasi Unified Memory. mem:managed yra numatytasis nustatymas įprastoms aplinkoms, kuriose CPU ir GPU turi atskirą atmintį.

Pastaba: tokiose architektūrose kaip Miyabi (GH200), kur CPU ir GPU sujungti per NVLink, vietoje mem:managed naudojama mem:unified; pakeiskite nustatymą pagal naudojamą aplinką (-gpu=ccnative,mem:unified).

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

Naudojant MPI, MPI wrapper kompiliatoriai (pvz., mpicc) turi būti sukonfigūruoti viduje kviesti NVIDIA HPC SDK kompiliatorius (pvz., nvc). Daugelyje HPC klasterių aplinkų NVIDIA HPC SDK ir MPI bibliotekų įkėlimas komandomis, pvz., module load, automatiškai sukuria tokią konfigūraciją. Tačiau rekomenduojamos versijos ir įkėlimo procedūros priklauso nuo aplinkos, todėl išsamiau žr. konkrečios aplinkos naudotojo vadovą ar kitą dokumentaciją.

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

Vykdymas

GPU versijos vykdymo procedūra iš esmės tokia pati kaip CPU versijos. Bendrąsias vykdymo procedūras žr. Vykdymo vadovas.

Profiliavimas

Profiliavimo duomenis galima rinkti naudojant NVIDIA Nsight Systems (nsys).

Be MPI

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

Su MPI

nsys profile -t cuda,mpi -s none -o profile_result \
  mpiexec -n <プロセス数> /path/to/FrontISTR/build/fistr1/fistr1 -t 8
AI-assisted translation May contain errors Official docs Status