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
ライブラリのビルド
- <URL:ispack.htm>
- 古いやつ: <URL:ispack.1.htm>
- <URL:netcdf.htm>
- 古いやつ: <URL:netcdf.1.htm>
- <URL:gtool.htm>
- 古いやつ: <URL:gtool.1.htm>
- <URL:spml.htm>
- 古いやつ : <URL:spml.1.htm>
- <URL:gphys.htm>
必要なファイルの取得
必要なファイル
- DCPAM (開発版)
ビルド
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 のソースはここにも置いてある).