Build FVCOM4.1 (MPI) on ITO Subsystem-A using Intel Compilers

Table of Content

九州大学のスーパーコンピュータITOサブシステムAにおいて,[cci]FVCOM4.1[/cci]を[cci]MPI[/cci]用に[cci]Intel[/cci]コンパイラを用いてビルド・実行する方法の備忘録です.[cci]Series[/cci]用のビルドはこちらを参照ください.[cci]Series[/cci]用のビルド環境が整っていることを前提とします.ソースコードは[cci]FVCOM4.1/FVCOM_source[/cci]に存在し,実行のテストケースとして,[cci]FVCOM4.1/Examples/Estuary[/cci]を想定します.

Intelコンパイラ利用の準備

[cci]Series[/cci]用と同じですが,以下のように[cci]load[/cci]します.
[cc lang='bash']
module load intel/2018
[/cc]
さらに,Intel Cコンパイラ用の環境変数を設定しておきます.一時的に,[cci]~/.bashrc[/cci]で設定しておくとよいでしょう.最適化オプションはスパコン納入業者推奨値です.ただし,最適化オプションは[cci]METIS[/cci]の[cci]makefile[/cci]で設定する必要がありますので,ここではCFLAGSは本来不要です.
[cc lang='bash']
export CC=icc
export CFLAGS="-O3 -no-prec-div -fp-model fast=2 -xHost"
export CPP="icc -E"
[/cc]

METISライブラリの準備

[cci]Series[/cci]では不要だった,[cci]METIS[/cci]ライブラリを準備します.[cci]METIS[/cci]のソースコードが存在する[cci]FVCOM4.1/METIS_source[/cci]に移動し,metis.tgzを展開して,ビルドを進めて行きます.
[cc lang='bash']
tar xf metis.tgz
[/cc]
[cci]makefile[/cci]を開き,12行目のMOPTを以下のように推奨値に設定します.デフォルト値の[cci]-O3[/cci]のみでも問題はありません.なお,環境変数とは異なり,オプションをクォーテーションで囲んではいけません.
[cc]
MOPT = -O3 -no-prec-div -fp-model fast=2 -xHost
[/cc]
[cci]makefile[/cci]は[cci]FVCOM4.1[/cci]の[cci]make.inc[/cci]を読み込みます(インストール先のディレクトリ等指定している).[cci]Series[/cci]用に設定した[cci]make.inc[/cci]([cci]FLAG[/cci]は何でもよい)を使います.ただし,以下のようにディレクトリを修正する必要があります.
[cc]
include ../../FVCOM_source/make.inc
[/cc]

METISのビルド

以下のようにします.
[cc lang='bash']
make install
[/cc]

make.incの編集

先に作成した(こちらを参照)[cci]Series[/cci]用の[cci]make.inc[/cci]をベースに編集します.[cci]Series[/cci]との違いは,[cci]FLAG_4[/cci]と[cci]RANLIB[/cci]のコメントを外すだけです.
[cc]
FLAG_1 = -DDOUBLE_PRECISION
FLAG_3 = -DWET_DRY
FLAG_4 = -DMULTIPROCESSOR
PARLIB = -lmetis #-L/usr/local/lib -lmetis
FLAG_8 = -DLIMITED_NO
FLAG_10 = -DGCN
FLAG_14 = -DRIVER_FLOAT
[/cc]
[cci]make.inc[/cci]のIntelコンパイラ[cci]Series[/cci]用をコメントアウトし,[cci]MPI[/cci]用を以下のように編集します.[cci]Flat MPI[/cci]とし,最適化オプションは推奨値としておきます.
[cc lang='bash']
#--------------------------------------------------------------------------
# Intel/MPI Compiler Definitions (ITO-A@kyushu-u)
#--------------------------------------------------------------------------
CPP = icc -E
COMPILER = -DIFORT
CC = mpiicc
CXX = mpiicpc
CFLAGS = -O3 -no-prec-div -fp-model fast=2 -xHost
FC = mpiifort
DEBFLGS = #-check all -traceback
OPT = -O3 -no-prec-div -fp-model fast=2 -xHost
#--------------------------------------------------------------------------
[/cc]

makefileの修正

[cci]Series[/cci]ではリンクエラーを避けるため,[cci]mod_esmf_nesting.F[/cci]をmakefileから削除しました.[cci]MPI[/cci]では削除したままでも問題ありませんし,削除しなくても問題はありません.よって,オリジナルのままでも大丈夫です.

ソースファイルの微修正

[cci]Series[/cci]のときと同様に(こちらを参照)コンパイル時の[cci]Warning[/cci]を抑制するため,[cci]wreal.F[/cci]の131行目
[cc lang='bash']
# endif !!ice_embedding yding
[/cc]
のコメント部分を削除します.[cci]# endif[/cci]の後にコメントを付けるのは規約違反のようです.

FVCOM4.1のMPIビルド

準備が整ったので,[cci]FVCOM_source[/cci]において,[cci]FVCOM4.1[/cci]を[cci]MPI[/cci]用にビルドします.
[cc lang='bash']
make
[/cc]
かなり時間がかかりますが,実行形式の[cci]fvcom[/cci]ができていれば成功です.

テストケースEstuaryのバッチジョブでの実行

インタラクティブジョブではMPI実行ができないようですので,バッチジョブとして実行します.最も基本的なテストケースである,[cci]Estuary[/cci]をバッチジョブで実行します.[cci]Estuary[/cci]の[cci]tst_run.nml[/cci]にはバグがあります.[cci]../Examples/Estuary/run[/cci]へ移動し,[cci]tst_run.nml[/cci]をエディタで開き,以下のように河川数を[cci]0[/cci]に修正しておきます(元は3になっていました).
[cc]
&NML_RIVER_TYPE
RIVER_NUMBER = 0,
[/cc]
実行形式[cci]fvcom[/cci]を[cci]../Examples/Estuary/run[/cci]にコピーします(あるいは,linkを張ります).[cci]../Examples/Estuary/run[/cci]で,以下のスクリプト([cci]mpi.sh[/cci])を作成します.1ノード36コアの全36プロセスによるFLAT MPIを想定しています.[cci]NUM_CORES[/cci]にはノード当たりのコア数を,[cci]NUM_PROCS[/cci]には[cci]ノード数×ノード当たりコア数[/cci]を指定します.詳細はこちらを参照ください.
[cc lang='bash']
#!/bin/bash
#PJM -L "rscunit=ito-a"
#PJM -L "rscgrp=ito-ss-dbg"
#PJM -L "vnode=1"
#PJM -L "vnode-core=36"
#PJM -L "elapse=10:00"
#PJM -j
#PJM -X

module load intel/2018

NUM_NODES=${PJM_VNODES}
NUM_CORES=36
NUM_PROCS=36

export I_MPI_PERHOST=$NUM_CORES
export I_MPI_FABRICS=shm:ofa

export I_MPI_HYDRA_BOOTSTRAP=rsh
export I_MPI_HYDRA_BOOTSTRAP_EXEC=/bin/pjrsh
export I_MPI_HYDRA_HOST_FILE=${PJM_O_NODEINF}

mpiexec.hydra -n $NUM_PROCS ./fvcom --casename=tst
[/cc]
ジョブの投入は以下のようにします.[cci]Series[/cci]と比べ,劇的に速くなりました.
[cc lang='bash']
pjsub mpi.sh
[/cc]
ジョブの状況を調べるには,ターミナルで[cci]pjstat[/cci]コマンドを入力します.バッチ処理関連の詳細は,こちらの最後部分やこちらを参照ください.

Build FVCOM4.1 (MPI) on ITO Subsystem-A using Intel Compilers” に対して1件のコメントがあります。

  1. 劉非 より:

    For the mpi run, the ‘module intel/2017’ is necessary. Otherwise, mpiicc, mpiifort and mpiicpc cannot be found.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください