使用 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: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 叢集環境中,以 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)收集效能分析資料。