Към съдържанието

Компилиране с поддръжка на GPU

FrontISTR може да се изпълнява на GPU чрез функционалността OpenACC на NVIDIA HPC SDK. Тази страница описва процедурата за компилиране с активирана поддръжка на 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
AI-assisted translation May contain errors Official docs Status