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

Translation update pending

The Ukrainian translation may be out of date because the Japanese source has changed. The existing translation remains available while it is being updated.

Збирання з підтримкою 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

Без OpenACC (версія CPU)

Щоб зібрати версію для CPU компіляторами NVIDIA HPC SDK без OpenACC, задайте -DNVHPC_NO_ACC=ON. У цьому разі -acc, -Minfo=accel і -gpu=ccnative,mem:managed не встановлюються. Використовуйте цю конфігурацію для порівняння результатів із версією для GPU, зібраною тими самими компіляторами.

mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
  -DNVHPC_NO_ACC=ON \
  -DWITH_MPI=OFF -DWITH_OPENMP=ON \
  ..
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