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

Сборка с использованием 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; она обязательна, поскольку реализация FrontISTR для GPU предполагает использование 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