Pāriet uz saturu

Kompilēšana ar GPU

FrontISTR var darboties GPU, izmantojot NVIDIA HPC SDK OpenACC funkcionalitāti. Šajā lapā aprakstīts, kā izveidot FrontISTR ar iespējotu GPU atbalstu un kā to palaist.

Priekšnosacījumu bibliotēkas skatiet sadaļā Obligātās un izvēles atkarības.

Kompilēšanas procedūra

Izmantojiet NVIDIA HPC SDK kompilatorus (nvc, nvc++ un nvfortran). HPC klastera vidē NVIDIA HPC SDK pirms būvēšanas jāielādē atbilstoši vides rokasgrāmatai (piemēram, module load nvhpc).

Izvēles bibliotēkas, piemēram, METIS, MUMPS un MKL, neatbalsta GPU, tādēļ tālāk dotajos komandu piemēros tās ir atspējotas (piemēram, WITH_METIS=OFF).

Kā aprakstīts sadaļā Kompilēšana ar CMake, ja kompilatoriem norāda NVIDIA HPC SDK (nvc, nvc++, nvfortran), CMakeLists.txt tiek iestatīts -gpu=ccnative,mem:managed. ccnative ir opcija, kas automātiski nosaka būvēšanas vidē pieejamo GPU un izvēlas optimālo mērķi, tādēļ katrai videi nav nepieciešamas manuālas izmaiņas. mem: ir opcija, kas nosaka GPU atmiņas apstrādi; tā ir nepieciešama, jo FrontISTR GPU realizācija pieņem Unified Memory izmantošanu. mem:managed ir noklusējuma iestatījums vispārīgām vidēm, kur CPU un GPU ir atsevišķa atmiņa.

Piezīme: arhitektūrās, piemēram, Miyabi (GH200), kur CPU un GPU ir integrēti ar NVLink, mem:managed vietā izmanto mem:unified; mainiet iestatījumu atbilstoši izmantotajai videi (-gpu=ccnative,mem:unified).

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

Izmantojot MPI, MPI apvalka kompilatori (piemēram, mpicc) jākonfigurē tā, lai tie iekšēji izsauktu NVIDIA HPC SDK kompilatorus (piemēram, nvc). Daudzās HPC klasteru vidēs NVIDIA HPC SDK un MPI bibliotēku ielāde ar komandām, piemēram, module load, šo konfigurāciju nodrošina automātiski. Tomēr ieteicamās versijas un ielādes procedūras dažādās vidēs atšķiras, tādēļ sīkāku informāciju skatiet attiecīgās vides lietotāja rokasgrāmatā vai citā dokumentācijā.

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

Izpildes procedūra

GPU būvējuma izpildes procedūra būtībā ir tāda pati kā CPU būvējumam. Vispārīgo izpildes procedūru skatiet Izpildes rokasgrāmatā.

Profilēšana

Profilēšanas datus var savākt, izmantojot NVIDIA Nsight Systems (nsys).

Bez MPI

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

Ar MPI

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