OpenMolcas v20.10

ウェブページ

https://gitlab.com/Molcas/OpenMolcas

バージョン

v20.10

ビルド環境

  • Intel Compiler 19.1.2 (intel parallel studio 2020 update 2)
  • Intel MKL 2020.0.2 (intel parallel studio 2020 update 2)
  • OpenMPI 3.1.0
  • cmake 3.16.3

ビルドに必要なファイル

  • openmolcas-v20.10.tar.gz (v20.10 を git で取得したもの)
  • ga-5.8.zip (Global Arrays)

ビルド手順

Global Arrays-5.8

#!/bin/sh

GA_VERSION=5.8
GA_DIR=/home/users/${USER}/Software/GlobalArrays/${GA_VERSION}
GA_SOURCE=${GA_DIR}/ga-${GA_VERSION}.zip

WORKDIR=/work/users/${USER}
INSTALLDIR=/local/apl/lx/openmolcas20.10/ga-5.8

#---------------------------------------------------------------------
umask 0022
ulimit -s unlimited

export LANG=
export LC_ALL=C
export OMP_NUM_THREADS=1

cd $WORKDIR
if [ -d ga-${GA_VERSION} ]; then
  mv ga-${GA_VERSION} ga_tmp
  rm -rf ga_tmp &
fi

module purge
module load intel/19.1.2
module load mkl/2020.0.2
module load mpi/openmpi/3.1.0/intel20

#tar zxf ${GA_SOURCE}
unzip ${GA_SOURCE}
cd ga-${GA_VERSION}

export F77=mpif90
export F90=mpif90
export FC=mpif90
export CC=mpicc
export CXX=mpicxx
export MPIF77=mpif90
export MPICC=mpicc
export MPICXX=mpicxx

export GA_FOPT="-O3 -ip -w -xHost"
export GA_COPT="-O3 -ip -w -xHost"
export GA_CXXOPT="-O3 -ip -w -xHost"

sh autogen.sh
./configure --with-blas8=-mkl \
            --with-scalapack8=-mkl \
            --enable-i8 \
            --prefix=${INSTALLDIR}

make -j ${PARALLEL}
make check
make install
cp config.log ${INSTALLDIR}

OpenMolcas-20.10

#!/bin/sh

VERSION=v20.10
SOURCEDIR=/home/users/${USER}/Software/OpenMolcas/${VERSION}
TARBALL=${SOURCEDIR}/OpenMolcas-${VERSION}.tar.gz

INSTALL_DIR=/local/apl/lx/openmolcas20.10
GAROOT=${INSTALL_DIR}/ga-5.8
PARALLEL=8

WORKDIR=/work/users/${USER}

export GAROOT
#--------------------------------------------------------
umask 0022
ulimit -s unlimited

export LANG=
export LC_ALL=C

module purge
module load intel/19.1.2
module load mkl/2020.0.2
module load mpi/openmpi/3.1.0/intel20
module load cmake/3.16.3

cd $WORKDIR
if [ -d OpenMolcas-${VERSION} ]; then
  mv OpenMolcas-${VERSION} OpenMolcas_tmp
  rm -rf OpenMolcas_tmp
fi

tar zxf ${TARBALL}
cd OpenMolcas-${VERSION}
#git submodule update --init External/NECI
git submodule update --init External/libmsym
git submodule update --init External/efp

# simply ridiculous.
uniq src/integral_util/drvefp.f src/integral_util/drvefp.f.tmp
mv -f src/integral_util/drvefp.f.tmp src/integral_util/drvefp.f

mkdir build && cd build

export FC=mpif90
export CC=mpicc
export CXX=mpicxx

cmake .. -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
         -DMPI_Fortran_COMPILER=${FC} \
         -DMPI_C_COMPILER=${CC} \
         -DMPI_CXX_COMPILER=${CXX} \
         -DMPI=ON \
         -DGA=ON \
         -DOPENMP=ON \
         -DLINALG=MKL \
         -DHDF5=ON \
         -DTOOLS=ON \
         -DFDE=ON \
         -DEFPLIB=ON \
         -DNECI=OFF \
         -DMSYM=ON \
         -DNEVPT2=OFF \
         -DDMRG=OFF

make -j${PARALLEL}
export MOLCAS_NPROCS=1
export OMP_NUM_THREADS=1
pymolcas verify
export MOLCAS_NPROCS=2
export OMP_NUM_THREADS=2
pymolcas verify

make install

テスト結果

Global Arrays のテストは全て正常にパス。OpenMolcas のテスト結果は /local/apl/lx/openmolcas20.10/test_results 以下にコピーを配置してあります。

シリアル版

  • additional:409 のみ失敗
    • ただし、iteration 回数がリファレンスと異なるのみ

並列版

  • standard:076 (scf) = 数値エラー (軽微?)
  • additional:
    • 139 (scf) = インプットエラー
    • 221 (alaska) = 数値エラー(軽微?)
    • 259 (scf) = メモリエラー
    • 308 (cht3) = メモリエラー
    • 309 (cht3) = メモリエラー
    • 310 (alaska) = 並列未対応
    • 330 (alaska) = 並列未対応
    • 339 (alaska) = 並列未対応
    • 358 (alaska) = 数値エラー(軽微?)
    • 405 (rasscf) = インプットエラー
    • 409 (alaska) = 数値エラー(軽微では無い)
    • 801 (cht3) = メモリエラー
    • 804 (scf) = インプットエラー
    • 806 (mbpt2) = 数値エラー(軽微?)
    • 809 (alaska) = 並列未対応
    • 810 (alaska) = 並列未対応
    • 811 (mbpt2) = 数値エラー(軽微?)
    • 812 (mbpt2) = 数値エラー(軽微?)
    • 814 (alaska) = 数値エラー(軽微?)
    • 820 (scf) = E_CNO に大きなエラー。他はパス
    • 821 (scf) = internal error
    • 822 (alaska) = 並列未対応
    • 852 (rasscf) = インプットエラー
    • 863 (alaska) = 数値エラー(軽微?)
    • 864 (alaska) = 数値エラー(軽微?)
    • 898 (rasscf) = internal error

メモ

  • EFPLIB を有効にした場合、変数宣言が duplicate している drvefp.f の対応が必要
  • chemps2 サポートはメンテされていない気配なので回避
  • インテルでは QCMaquis 動かなかったので回避。以下と同様の症状
    • https://gitlab.com/Molcas/OpenMolcas/-/issues/125
    • gcc-8, gcc-9 ではビルドに失敗。
    • 以上のような結果のため、QCMaquis の組み込みは回避(なお、ライセンス上問題は無いことは判明している)
  • intelmpi 19-20 は GA の時点で無理。
  • intel 17-20 + intel mpi 2017/2018 の条件では test000 (caspt2) でエラーになる。001 や 002 のテストは問題無く通る。
  • gcc6 + intelmpi 2018 では test000 をパスすること確認
    •  (intelmpi 利用時は chovec_io 等にパッチを適用している integer*4 => integer*8)
  • openmpi + intel18 以前の場合には環境変数 PSM2_MQ_RECVREQS_MAX の設定が必要(今回 2097152 に設定)。実行しないと GA の perf_strided のテストに失敗する。
    • intel20 では問題無く通る(libpsm2 の問題?)
  • 前回ビルドしたバージョン(2019/06/04)よりも少しパフォーマンスが落ちている可能性があり
    • 計算本体部分ではなくて実行開始直後や終了時の動作がメインな要因に見える(?)