DCPAM 地球のような惑星の実験 3

並列計算を実施する.

DCPAM は, 主に MPI (Message Passing Interface) を用いて並列計算を実施する. 並列計算を実施するためには, 以下の手順が必要である.

  • モデルプログラムを MPI ライブラリを用いてコンパイルする
  • 利用するデータは並列計算用に分割する (利用するファイルの指定)
  • 並列数を指定して実行する

また, 計算後は, 出力ファイルが分割されているため, 解析のためにはファイルを結合すると後々楽である.

(詳細は「らくらくDCPAM」を参照のこと.)

モデルプログラムの MPI を用いたコンパイル

<URL:index_elp_0.htm> と同様に, 改めてモデルのプログラムを展開しコンパイルする. ただし, MPI を用いて並列化して実行するため, 一部だけ変更する.

プログラムの展開

$ tar xvf dcpam5-20180304-2.tgz

ディレクトリ名の変更

$ mv dcpam5-20180304-2 dcpam5-20180304-2-para
$ cd dcpam5-20180304-2-para

コンパイル時に MPI を利用するために compile_with_pkgs.sh 内で

export MPIFLAG='no'

export MPIFLAG='yes'

としてオプションを設定する.

コンパイル

$ bash compile_with_pkgs.sh

実験の準備

実験用データの準備

これまでに行った実験では以下の外部データを用いた.

  • 表面特性分布
  • 海表面温度分布
  • 海氷面密度分布
  • オゾン分布

並列計算では, MPI を用いて複数のプロセスで計算を行うため, プロセスごとの入力データを作成しなければならない (入力データをプロセスごとに分割しなければならない).

データの分割は, <URL:data_Earth-20191204.tgz> に含まれている util_split ディレクトリ以下のプログラムを用いて行うことができるが, ここでは <URL:data_Earth-20191204.tgz> に含まれている分割後のデータを用いる.

分割後のデータは下のファイルである.

  • 表面特性分布 (T21) : sp_for_Earth_T021_P4_rank??????.nc
  • 海表面温度分布 (T21) : sst_amipII_bc_clim_T021_P4_rank??????.nc
  • 海氷面密度分布 (T21) : sic_amipII_bc_clim_T021_P4_rank??????.nc
  • オゾン分布 (T21) : O3_CMIP5_climatology_zonalmean_T021_P4_rank??????.nc

"P4" は 4 並列用のデータであることを示す文字列. "_rank??????" は MPI のプロセス番号 (ランク番号) を表す.

実験用ディレクトリの作成

前回行ったのと同じ要領で実験用ディレクトリを作成する.

プログラムの準備

前回行ったのと同じ要領でプログラムを準備する.

実験用設定ファイルの準備

前回行ったのと同じ要領で設定ファイルを準備する. しかし, 並列計算用の入力データ (分割したファイル) を読み込むように, 設定ファイル, dcpam_E_T21L26.conf, を変更する. ファイル中の

  • sp_for_Earth_T021.nc
  • sst_amipII_bc_clim_T021.nc
  • sic_amipII_bc_clim_T021.nc
  • O3_CMIP5_climatology_zonalmean_T021.nc

をそれぞれ

  • sp_for_Earth_T021_P4.nc
  • sst_amipII_bc_clim_T021_P4.nc
  • sic_amipII_bc_clim_T021_P4.nc
  • O3_CMIP5_climatology_zonalmean_T021_P4.nc

と書き換える. (注意: それぞれ一か所とは限らない.)

注意: "_rank??????" は, 並列実行時にプログラムが自動的に補完する.

初期値の作成

初期値格納ディレクトリの作成

$ mkdir 0000

大気用初期値の作成

$ mpiexec -n 4 ./bin/dcpam_init_data -N=./conf/init_data_E_T21L26.conf

0000/rst_rank??????.nc ができる.

初期値の分布は, 図を描いて確認すると良い.

mpiexec は MPI ライブラリでコンパイルしたプログラムを並列実行するためのコマンドである.

惑星表面用初期値の作成

$ mpiexec -n 4 ./bin/dcpam_init_data_surface -N=./conf/surface_data_E_T21.conf

0000/rst_sst_rank??????.nc ができる.

実験の実行

$ mpiexec -n 4 ./bin/dcpam_main -N=./conf/dcpam_E_T21L26.conf < /dev/null >& error.log &

計算が終了したら計算結果のファイルが分割されていることを確認するとよい.

実験結果のファイルの結合

こちらを参照すること.