A64FX 向けのビルド¶
FrontISTR は,A64FX を搭載した計算機(「富岳」など)に向けて調整した実装を持つ.このページでは,富士通コンパイラを用いてこの実装を組み込むビルド手順と実行方法を説明する.
調整した実装は cmake の ARCH オプションに FX64 を指定したときにだけ組み込まれる.組み込まれる実装の内容は CMake によるビルド手順 を参照されたい.
前提条件¶
- 富士通コンパイラ(FUJITSU Software Compiler Package または Fujitsu Development Studio)
- 必須・オプション依存ライブラリ に挙げた CMake
- METIS 5.1.0
- REVOCAP_Refiner 1.1.04
環境設定¶
富士通コンパイラのパスを通し,MPI コンパイラのコマンド名を環境変数に設定する.以降の手順ではこの環境変数を用いる.
LANGDIR=/path/to/fujitsu_compiler
export PATH=${LANGDIR}/bin:$PATH
export LD_LIBRARY_PATH=${LANGDIR}/lib64:$LD_LIBRARY_PATH
export MPICC=mpifcc
export MPICXX=mpiFCC
export MPIFC=mpifrt
クロスコンパイルする場合は,コマンド名の末尾に px を付ける.
METIS のビルド¶
tar xzvf metis-5.1.0.tar.gz
cd metis-5.1.0
make config prefix=/path/to/metis cc=${MPICC} openmp=1
make -j 12 install
cd ..
REVOCAP_Refiner のビルド¶
アーカイブを展開し,MakefileConfig.in を以下の内容にしてビルドする.
ARCH = a64fx
CC = ${MPICC}
CFLAGS = -Kcmodel=large -Nlst=t -Kocl -Kfast -Kstrict_aliasing -Krestp=all -Kzfill
CXX = ${MPICXX}
CXXFLAGS = -Kcmodel=large -Nlst=t -Kocl -Kfast -Kstrict_aliasing -Krestp=all -Kzfill
F90 = ${MPIFC}
FFLAGS = -Kcmodel=large -Nlst=t -Kocl -Kfast -Kstrict_aliasing -Krestp=all -Kzfill
AR = ar
ARFLAGS = rsv
LD = ${MPIFC}
LDFLAGS = $(FFLAGS) --linkfortran
LIBPATH =
LIBS = -lm
EXTOBJS =
RM = rm -f
DOXYGEN = doxygen
TAR = tar
FrontISTR のビルド¶
ソースコードの取得は CMake によるビルド手順 を参照されたい.依存ライブラリとインストール先のパスを設定し,cmake を実行する.
export METISDIR=/path/to/metis
export REFINERDIR=/path/to/REVOCAP_Refiner-1.1.04
export FISTRDIR=/path/to/frontistr
cd FrontISTR
mkdir build
cd build
cmake \
-DARCH=FX64 \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=${FISTRDIR} \
-DCMAKE_C_COMPILER=${MPICC} \
-DCMAKE_CXX_COMPILER=${MPICXX} \
-DCMAKE_Fortran_COMPILER=${MPIFC} \
-DCMAKE_C_FLAGS="-Kcmodel=large -Nlst=t -Kocl -Kfast -Kzfill -Koptmsg=2 -V" \
-DCMAKE_CXX_FLAGS="-Kcmodel=large -Nlst=t -Kocl -Kfast -Kzfill -Koptmsg=2 -V" \
-DCMAKE_Fortran_FLAGS="-Kcmodel=large -Nlst=t -Kocl -Kfast -Kzfill -Koptmsg=2 -V" \
-DCMAKE_Fortran_MODDIR_FLAG=-M \
-DCMAKE_EXE_LINKER_FLAGS="--linkfortran -Kopenmp -Kparallel" \
-DOpenMP_C_FLAGS="-Kopenmp -Kparallel" \
-DOpenMP_CXX_FLAGS="-Kopenmp -Kparallel" \
-DOpenMP_Fortran_FLAGS="-Kopenmp -Kparallel" \
-DBLAS_LIBRARIES="-SSL2BLAMP" \
-DLAPACK_LIBRARIES="-SSL2BLAMP" \
-DSCALAPACK_LIBRARIES="-SCALAPACK" \
-DWITH_TOOLS=ON -DWITH_MPI=ON -DWITH_OPENMP=ON \
-DWITH_METIS=ON \
-DMETIS_INCLUDE_PATH=${METISDIR}/include \
-DMETIS_LIBRARIES=${METISDIR}/lib/libmetis.a \
-DWITH_REFINER=ON \
-DREFINER_INCLUDE_PATH=${REFINERDIR}/Refiner \
-DREFINER_LIBRARIES=${REFINERDIR}/lib/a64fx/libRcapRefiner.a \
..
make -j 12 install
指定の要点は以下のとおりである.
| 指定 | 説明 |
|---|---|
-DARCH=FX64 | A64FX 向けに調整した実装を組み込む.指定しない場合は標準の実装だけでビルドされる |
CMAKE_*_FLAGS | 富士通コンパイラの最適化オプション(-Kfast,-Kzfill,-Kocl),メモリモデルの指定(-Kcmodel=large),翻訳情報を出力するオプション(-Nlst=t,-Koptmsg=2,-V) |
OpenMP_*_FLAGS,CMAKE_EXE_LINKER_FLAGS | 富士通コンパイラでの OpenMP と自動並列化の指定(-Kopenmp -Kparallel) |
BLAS_LIBRARIES,LAPACK_LIBRARIES,SCALAPACK_LIBRARIES | 富士通の数学ライブラリ(SSL II のスレッド並列版,ScaLAPACK)をリンクする指定 |
CMAKE_Fortran_MODDIR_FLAG=-M | 富士通コンパイラでモジュールファイルの出力先を指定するオプション |
-DARCH=FX64 が有効になると,cmake の出力に Architecture-tuned build is ENABLED と,組み込まれる実装の一覧が表示される.
実行方法¶
実行手順は他の環境と変わらない.以下は,ソースコードに含まれるチュートリアルを領域分割して 4 プロセスで実行する例である.
cd FrontISTR/tutorial/02_elastic_hinge_parallel
mpiexec -n 1 ${FISTRDIR}/bin/hecmw_part1
mpiexec -n 4 ${FISTRDIR}/bin/fistr1 -t 1
ARCH=FX64 のビルドでは,反復法ソルバーが既定で CSR 形式の実装を用いる.標準の実装で計算する場合は,解析制御データの !SOLVER に MATRIXFORMAT=BSR を指定する.
汎用の実行手順については 実行ガイド を参照されたい.