跳转至

使用 GPU 构建

FrontISTR 可使用 NVIDIA HPC SDK 的 OpenACC 功能在 GPU 上运行。本页说明启用 GPU 支持的构建步骤和运行方法。

有关前置库,请参阅必需和可选依赖库

构建步骤

使用 NVIDIA HPC SDK 编译器(nvcnvc++nvfortran)。在 HPC 集群环境中,构建前需要按照该环境的手册加载 NVIDIA HPC SDK(例如:module load nvhpc)。

METIS、MUMPS、MKL 等可选库不支持 GPU,因此下面的命令示例中将其禁用(例如 WITH_METIS=OFF)。

CMake 构建步骤中所述,当编译器指定为 NVIDIA HPC SDK(nvcnvc++nvfortran)时,CMakeLists.txt 中会设置 -gpu=ccnative,mem:managedccnative 会自动检测构建环境中的 GPU 并选择最佳目标,因此无需针对各环境手动修改。mem: 用于指定 GPU 内存的处理方式;FrontISTR 的 GPU 实现以 Unified Memory 为前提,因此必须指定该选项。mem:managed 是 CPU 与 GPU 分别拥有独立内存的一般环境中的默认设置。

注意:在 Miyabi(GH200)这类 CPU 与 GPU 通过 NVLink 集成的架构中,使用 mem:unified 而不是 mem:managed,因此应根据所用环境进行修改(-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 集群环境中,通过 module load 等命令加载 NVIDIA HPC SDK 和 MPI 库后会自动形成这种配置,但推荐版本和加载步骤因环境而异,详情请参阅各环境的用户手册等资料。

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