Перейти до змісту

Збирання з підтримкою 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 <кількість_процесів> /path/to/FrontISTR/build/fistr1/fistr1 -t 8