DCPAM ビルドログ @ pifront with intel compiler

  • 作業日 2021/05/17, 2021/09/24
  • 作業者 高橋芳幸

DCPAM を π-computer で動かす.

このページは, Intel コンパイラ classic + Intel MPI を用いた場合.

環境

  • π-computer
  • Red Hat Enterprise Linux release 8.2 (Ootpa)
  • ifort version 2021.1.2
  • Intel MPI

準備

環境の準備

$ module load compiler
$ module load mpi

ライブラリのビルド

必要なファイルの取得

必要なファイル

ビルド

DCPAM

ここでは dcpam5-20170306.tgz を使って説明.

$ wget http://www.gfd-dennou.org/library/dcpam/dcpam5/dcpam5-20170306.tgz
$ tar xvf dcpam5-20170306.tgz

$ cd dcpam5-20170306

$ export FC=mpiifort
$ export FFLAGS="-march=core-avx2 -qopenmp -DSLTT2D1DMONOTONIC -DKDONLY"


$ ./configure \
  --with-netcdf=/home/G50002/yot/local/netcdf-c-4.8.0-fortran-4.5.3-intel+intel/lib/libnetcdf.a \
  --with-netcdff=/home/G50002/yot/local/netcdf-c-4.8.0-fortran-4.5.3-intel+intel/lib/libnetcdff.a \
  --with-netcdf-include=/home/G50002/yot/local/netcdf-c-4.8.0-fortran-4.5.3-intel+intel/include/netcdf.inc \
  --with-ispack=/home/G50002/yot/local/ispack-1.0.4-intel+intel/lib/libisp.a \
  --with-gtool5=/home/G50002/yot/local/gtool5-20160613-intel+intel/lib/libgtool5.a \
  --with-spml=/home/G50002/yot/local/spml-0.8.0-intel+intel/lib/libspml-omp.a \
  --enable-mpi

しかし, このまま make しても上手く行かないので, 小細工する. (上手く行かない事の詳細は下の方で簡単に説明する.)

  • <URL:files/tmp_spml_module.f90> を src/dynamics に置く.
  • src/dynamics/Makefile を書き換える (tmp_spml_module.f90 を加える)
  • sltt.F90.patch を書き換える

ソースが <URL:files/dcpam5-2021-09-23.tgz> ならば, dcpam5-2021-09-23 のディレクトリで <URL:files/script_pifront.sh> を実行すればよい.

$ wget http://www.gfd-dennou.org/library/dcpam/build_log/2021-05-17_yot_dcpam_build_log_pifront_intel+intel/files/script_pifront.sh
$ bash script_pifront.sh
$ make

DCPAM の実行

DCPAM を実行する際は, このスクリプトを下のように実行した.

$ qsub ./pifront_dcpam_script.sh

また, 実行中のジョブを確認する場合は以下のように行った.

$ qstat -a

ジョブスクリプトの中身やその他詳細は π-computer 利用者マニュアルを参照すること.

DCPAM の make が失敗することについて

ソースを書き換えずに DCPAM を make すると下のエラーが出て上手く行かない.

mpiifort -o sltt.o -c -march=core-avx2 -qopenmp -DSLTT2D1DMONOTONIC -DKDONLY -I../../include -I/home/G50002/yot/local/spml-0.8.0-intel/include -I/home/G50002/yot/local/gtool5-20160613-intel/include -I/home/G50002/yot/local/netcdf-c-4.8.0-fortran-4.5.3-intel/include  -DLIB_MPI sltt.F90
sltt.F90(867): catastrophic error: **Internal compiler error: internal abort** Please report this error along with the circumstances in which it occurred in a Software Problem Report.  Note: File and line given may not be explicit cause of this error.
compilation aborted for sltt.F90 (code 1)
make[2]: *** [../../rules.make:23: sltt.o] Error 1
make[2]: Leaving directory '/home/G50002/yot/work/dcmodel/dcpam/dcpam5-20170306/src/sltt'
make[1]: *** [Makefile:36: lib] Error 1
make[1]: Leaving directory '/home/G50002/yot/work/dcmodel/dcpam/dcpam5-20170306/src'
make: *** [Makefile:52: all] Error 2

困った.

調べた結果, sltt.F90 と dynamics_hspl_vas83.F90 から spml のいくつかの関数を呼ぶところでエラーとなるらしいことがわかった. 解決策を考えたけれど良い方法が思いつかないので, 小細工として, エラーになる関数を呼ぶ際には, 別のモジュールを経由することにした.

具体的には <URL:files/tmp_spml_module.f90> を経由する. なぜかこれでエラーが出なくなる.

備考

なお, このエラーが出る条件を再現するまでの, netcdf, gtool, ispack, spml のビルドとインストール, および DCPAM のコンパイルまでをまとめたスクリプトが<URL:files/build_dcpam_2021-10-07.sh>. スクリプト内の dest_dir のディレクトリ以下に netcdf, gtool, ispack, spml がインストールされる. netcdf, gtool, ispack のソースはインターネット上のものをダウンロードし, spml のソースは pifront の /home/G50002/yot/tmp/spml/spml-0.8.0-mod.tgz をコピーして用いる (spml のソースはここにも置いてある).