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 が別々のメモリを持つ一般的な環境向けのデフォルト設定である.
Note: 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)を用いてプロファイルデータを収集できる.