MPI を用いた並列計算を行うには

======= >>>>>>> 1.3

deepconv/arare5 は MPI (Message Passing Interface) を用いて並列化されている. 本文書では MPI を用いた並列計算の方法を示す.

並列化の概要

deepconv/arare5 では, 水平方向 (X 方向 & Y 方向) に領域分割することで並 列化を行っている. X 方向と Y 方向は等間隔に分割する. 鉛直方向 (Z 方向) には分割しない.

コンパイル

deepconv/arare5 の並列計算を行うためには, 以下のライブラリが必要です.

deepconv/arare5 をコンパイルする際は, Config.mk において,

FC = mpifrt          # MPI Fortran90 コンパイラ
CPPFLAGS = -DLIB_MPI   # MPI 

を指定する必要があります. 詳細はインストールガイドを参照下さい.

設定ファイルの書き方

設定ファイル(NAMELIST ファイル) の &gridset_nml に並列数を追加する必要 があります.

X 方向の並列数を 5, Y 方向共に並列数を 10 とする場合, 以下のように xsub, ysub を指定します.

&gridset_nml
  xsub  = 5                  ! X 方向の並列数
  ysub  = 10                 ! Y 方向の並列数
  xdim  = 50                 ! X 方向刻み点数
  ydim  = 50                 ! Y 方向刻み点数
  zdim  = 50                 ! Z 方向刻み点数
/

水平鉛直 2 次元の計算を行う場合には, X 方向の並列数を指定します. Y 方向には並列できません (ysub を記載しなくても良いです; デフォルト値 ysub=1 が使われます).

&gridset_nml
  xsub  = 5                  ! X 方向の並列数
  xdim  = 50                 ! X 方向刻み点数
  ydim  = 1                  ! Y 方向刻み点数
  zdim  = 50                 ! Z 方向刻み点数
/

並列計算の実行

計算の実行の手順は, 逐次版と同じく,

である.

初期値の準備のためには, プロセス数 N ( N = xsub x ysub ) の場合, 以下のように用意する.

$ mpiexec -n N ./arare_init-data -N=arare_init.conf

プロセス毎に初期値ファイルが出力される. 上記を実行することで, N 個の ファイル (init_rank000000.nc, init_rank000001.nc, init_rank000002.nc, ...) が出力される.

実験は以下のように実行する.

$ mpiexec -n N ./arare -N=arare.conf

上記によって出力される変数もプロセス毎に出力される (VelX_rank000000.nc, VelX_rank000001.nc, VelX_rank000002.nc, ..., PTemp_rank000000.nc, PTemp_rank000001.nc, PTemp_rank000002.nc, ...).

出力データの統合

データの統合

並列計算を実行した場合, 計算に使用したプロセス毎にファイルが出力されます. 例えば 128 並列した場合, 1 つの変数に対して 128 個のファイルが生成され ます. このままでは解析を行うのが面倒ですので, 各変数を 1 つのファイルに まとめるためのスクリプトを用意しています.

arare_unite.rb は, 設定ファイルより MPI の並列数とファイル名の接頭詞を 読み込むことで, 変数毎に結合したファイルを作成します. 但し, netCDF の 2 GB の壁問題を念頭に, 1 ファイルの大きさが 2 GB を超えないよう調整して います.

USAGE:
  $ ruby script/arare_unite.rb <設定ファイル>

想定するディレクトリ構造
  ./arare.conf         設定ファイル
  ./data/              生データ置き場
         VelX_rank000000.nc
         VelX_rank000001.nc
         VelX_rank000002.nc
         ....
  ./TIME_XXXX-XXXXX/   結合したファイル置き場. (スクリプトにより自動生成される)
         VelX.nc

<<<<<<< calc_mpi.rd $Id: calc_mpi.rd,v 1.2 2014-03-04 14:31:21 sugiyama Exp $ ======= $Id: calc_mpi.rd,v 1.3 2015/03/09 16:26:44 sugiyama Exp $ >>>>>>> 1.3