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

Table of Content

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

Intelコンパイラ利用の準備

Series 用と同じですが,以下のように load します.

module load intel/2018

さらに,Intel Cコンパイラ用の環境変数を設定しておきます.一時的に,~/.bashrc で設定しておくとよいでしょう.最適化オプションはスパコン納入業者推奨値です.ただし,最適化オプションは METISmakefile で設定する必要がありますので,ここではCFLAGSは本来不要です.

export CC=icc
export CFLAGS="-O3 -no-prec-div -fp-model fast=2 -xHost"
export CPP="icc -E"

METISライブラリの準備

Series[/cci] では不要だった,METIS ライブラリを準備します.METIS のソースコードが存在する FVCOM4.1/METIS_source に移動し,metis.tgz を展開して,ビルドを進めて行きます.

tar xf metis.tgz

makefile を開き,12行目のMOPTを以下のように推奨値に設定します.デフォルト値の -O3 のみでも問題はありません.なお,環境変数とは異なり,オプションをクォーテーションで囲んではいけません.

MOPT     = -O3 -no-prec-div -fp-model fast=2 -xHost

makefileFVCOM4.1make.inc を読み込みます(インストール先のディレクトリ等指定している).Series 用に設定した make.incFLAGは何でもよい)を使います.ただし,以下のようにディレクトリを修正する必要があります.

include ../../FVCOM_source/make.inc

METISのビルド

以下のようにします.

make install

make.incの編集

先に作成した(こちらを参照)Series 用の make.inc をベースに編集します.Series との違いは,FLAG_4RANLIB のコメントを外すだけです.

            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

make.inc のIntelコンパイラ Series 用をコメントアウトし,MPI 用を以下のように編集します.Flat MPI とし,最適化オプションは推奨値としておきます.

#--------------------------------------------------------------------------
#  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
#--------------------------------------------------------------------------

makefileの修正

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

ソースファイルの微修正

Series のときと同様に(こちらを参照)コンパイル時の Warning を抑制するため,wreal.F の131行目

#   endif       !!ice_embedding  yding

のコメント部分を削除します.# endif の後にコメントを付けるのは規約違反のようです.

FVCOM4.1のMPIビルド

準備が整ったので,FVCOM_sourceにおいて,FVCOM4.1MPI 用にビルドします.

make

かなり時間がかかりますが,実行形式の fvcom ができていれば成功です.

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

インタラクティブジョブではMPI実行ができないようですので,バッチジョブとして実行します.最も基本的なテストケースである,Estuary をバッチジョブで実行します.Estuarytst_run.nml にはバグがあります.../Examples/Estuary/run へ移動し,tst_run.nml をエディタで開き,以下のように河川数を 0 に修正しておきます(元は3になっていました).

&NML_RIVER_TYPE
RIVER_NUMBER = 0,

実行形式 fvcom../Examples/Estuary/run にコピーします(あるいは,linkを張ります).../Examples/Estuary/run で,以下のスクリプト(mpi.sh)を作成します.1ノード36コアの全36プロセスによるFLAT MPIを想定しています.NUM_CORES にはノード当たりのコア数を,NUM_PROCS には ノード数×ノード当たりコア数 を指定します.詳細は こちら を参照ください.

#!/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

ジョブの投入は以下のようにします.Series と比べ,劇的に速くなりました.

pjsub mpi.sh

ジョブの状況を調べるには,ターミナルでpjstat コマンドを入力します.バッチ処理関連の詳細は,こちら の最後部分や こちら を参照ください.

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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください