Прескокнете до содржината

Градење со поддршка за GPU

FrontISTR може да работи на GPU со користење на функционалноста OpenACC од NVIDIA HPC SDK. Оваа страница опишува како да се изгради FrontISTR со овозможена поддршка за GPU и како да се извршува.

За предусловните библиотеки, видете Задолжителни и изборни зависности.

Постапка за градење

Користете ги компајлерите на NVIDIA HPC SDK (nvc, nvc++ и nvfortran). Во HPC-кластерска околина, NVIDIA HPC SDK мора да се вчита пред градењето според прирачникот на околината (на пример, module load nvhpc).

Изборните библиотеки како METIS, MUMPS и MKL не поддржуваат GPU, па се оневозможени во примерите со команди подолу (на пример, WITH_METIS=OFF).

Како што е опишано во Градење со CMake, кога NVIDIA HPC SDK (nvc, nvc++, nvfortran) е зададен за компајлерите, во CMakeLists.txt се поставува -gpu=ccnative,mem:managed. ccnative е опција што автоматски го открива GPU во околината за градење и ја избира оптималната цел, па не се потребни рачни промени за секоја околина. mem: е опција што задава како се третира GPU-меморијата; таа е потребна бидејќи GPU-имплементацијата на FrontISTR претпоставува Unified Memory. mem:managed е стандардната поставка за општи околини во кои CPU и GPU имаат одделна меморија.

Забелешка: На архитектури како Miyabi (GH200), каде CPU и GPU се интегрирани преку NVLink, наместо mem:managed се користи mem:unified; променете ја поставката според околината што се користи (-gpu=ccnative,mem:unified).

OpenACC + OpenMP (без 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

Кога се користи MPI, обвивните MPI-компајлери (како mpicc) мора да бидат конфигурирани внатрешно да ги повикуваат компајлерите на NVIDIA HPC SDK (како nvc). Во многу HPC-кластерски околини, вчитувањето на NVIDIA HPC SDK и MPI-библиотеките со команди како module load автоматски ја обезбедува оваа конфигурација. Сепак, препорачаните верзии и постапките за вчитување се разликуваат според околината, па за детали погледнете го корисничкиот прирачник или друга документација за конкретната околина.

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

Извршување

Постапката за извршување на GPU-изградба во основа е иста како за CPU-изградба. За општите постапки за извршување, видете го Водичот за извршување.

Профилирање

Податоци за профилирање може да се собираат со NVIDIA Nsight Systems (nsys).

Без MPI

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

Со MPI

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