使用 GPU 构建¶
FrontISTR 可使用 NVIDIA HPC SDK 的 OpenACC 功能在 GPU 上运行。本页说明启用 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: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)收集性能分析数据。