CP2K 7.1.0 (intel)

ウェブページ

https://www.cp2k.org/

バージョン

7.1.0

ビルド環境

  • Intel Parallel Studio 2018 Update 4
  • GCC 7.3.1 (devtoolset-7)
  • cmake 3.16.3

ビルドに必要なファイル

  • cp2k-7.1.0.tar.gz
  • dbcsr-2.0.1.tar.gz
  • tc_install_cp2k_toolchain.sh.diff

--- install_cp2k_toolchain.sh.org       2020-01-31 17:07:19.000000000 +0900
+++ install_cp2k_toolchain.sh   2020-01-31 17:07:30.000000000 +0900
@@ -942,8 +942,8 @@
     ./scripts/install_superlu.sh
     ./scripts/install_pexsi.sh
     ./scripts/install_quip.sh
-    ./scripts/install_plumed.sh
     ./scripts/install_gsl.sh
+    ./scripts/install_plumed.sh
     ./scripts/install_spglib.sh
     ./scripts/install_hdf5.sh
     ./scripts/install_libvdwxc.sh

  • tc_install_mkl.sh.intel.diff

--- install_mkl.sh.org  2020-01-31 15:58:56.000000000 +0900
+++ install_mkl.sh      2020-02-04 17:20:01.000000000 +0900
@@ -66,37 +66,38 @@
         fi
     done
     # set the correct lib flags from  MLK link adviser
-    MKL_LIBS="-Wl,--start-group ${mkl_lib_dir}/libmkl_gf_lp64.a ${mkl_lib_dir}/libmkl_core.a ${mkl_lib_dir}/libmkl_sequential.a"
+    #MKL_LIBS="-Wl,--start-group ${mkl_lib_dir}/libmkl_gf_lp64.a ${mkl_lib_dir}/libmkl_core.a ${mkl_lib_dir}/libmkl_sequential.a"
+    MKL_LIBS="-L${mkl_lib_dir} -Wl,--no-as-needed -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl"
     # check optional libraries
-    if [ $MPI_MODE != no ] ; then
+    #if [ $MPI_MODE != no ] ; then
         enable_mkl_scalapack="__TRUE__"
-        mkl_optional_libs="libmkl_scalapack_lp64.a"
-        case $MPI_MODE in
-            mpich)
-                mkl_blacs_lib="libmkl_blacs_intelmpi_lp64.a"
-                ;;
-            openmpi)
-                mkl_blacs_lib="libmkl_blacs_openmpi_lp64.a"
-                ;;
-            *)
-                enable_mkl_scalapack="__FALSE__"
-                ;;
-        esac
-        mkl_optional_libs="$mkl_optional_libs $mkl_blacs_lib"
-        for ii in $mkl_optional_libs ; do
-            if ! [ -f "${mkl_lib_dir}/${ii}" ] ; then
-                enable_mkl_scalapack="__FALSE__"
-            fi
-        done
-        if [ $enable_mkl_scalapack = "__TRUE__" ] ; then
-            echo "Using MKL provided ScaLAPACK and BLACS"
-            MKL_LIBS="${mkl_lib_dir}/libmkl_scalapack_lp64.a ${MKL_LIBS} ${mkl_lib_dir}/${mkl_blacs_lib}"
-        fi
-    else
-        echo "Not using MKL provided ScaLAPACK and BLACS"
-        enable_mkl_scalapack="__FALSE__"
-    fi
-    MKL_LIBS="${MKL_LIBS} -Wl,--end-group -lpthread -lm -ldl"
+    #    mkl_optional_libs="libmkl_scalapack_lp64.a"
+    #    case $MPI_MODE in
+    #        mpich)
+    #            mkl_blacs_lib="libmkl_blacs_intelmpi_lp64.a"
+    #            ;;
+    #        openmpi)
+    #            mkl_blacs_lib="libmkl_blacs_openmpi_lp64.a"
+    #            ;;
+    #        *)
+    #            enable_mkl_scalapack="__FALSE__"
+    #            ;;
+    #    esac
+        mkl_optional_libs=""
+    #    for ii in $mkl_optional_libs ; do
+    #        if ! [ -f "${mkl_lib_dir}/${ii}" ] ; then
+    #            enable_mkl_scalapack="__FALSE__"
+    #        fi
+    #    done
+    #    if [ $enable_mkl_scalapack = "__TRUE__" ] ; then
+    #        echo "Using MKL provided ScaLAPACK and BLACS"
+    #        MKL_LIBS="${mkl_lib_dir}/libmkl_scalapack_lp64.a ${MKL_LIBS} ${mkl_lib_dir}/${mkl_blacs_lib}"
+    #    fi
+    #else
+    #    echo "Not using MKL provided ScaLAPACK and BLACS"
+    #    enable_mkl_scalapack="__FALSE__"
+    #fi
+    #MKL_LIBS="${MKL_LIBS} -Wl,--end-group -lpthread -lm -ldl"
     MKL_CFLAGS="${MKL_CFLAGS} -I${MKLROOT}/include -I${MKLROOT}/include/fftw"
 
     # write setup files

  • tc_install_mpich.sh.intel.diff

--- install_mpich.sh.org        2020-01-29 15:58:59.000000000 +0900
+++ install_mpich.sh    2020-01-29 16:03:53.000000000 +0900
@@ -50,14 +50,14 @@
         ;;
     __SYSTEM__)
         echo "==================== Finding MPICH from system paths ===================="
-        check_command mpirun "mpich"
-        check_command mpicc "mpich"
-        check_command mpif90 "mpich"
-        check_command mpic++ "mpich"
-        check_lib -lmpi "mpich"
-        check_lib -lmpicxx "mpich"
-        add_include_from_paths MPICH_CFLAGS "mpi.h" $INCLUDE_PATHS
-        add_lib_from_paths MPICH_LDFLAGS "libmpi.*" $LIB_PATHS
+        #check_command mpirun "mpich"
+        #check_command mpicc "mpich"
+        #check_command mpif90 "mpich"
+        #check_command mpic++ "mpich"
+        #check_lib -lmpi "mpich"
+        #check_lib -lmpicxx "mpich"
+        #add_include_from_paths MPICH_CFLAGS "mpi.h" $INCLUDE_PATHS
+        #add_lib_from_paths MPICH_LDFLAGS "libmpi.*" $LIB_PATHS
         ;;
     __DONTUSE__)
         ;;
@@ -87,15 +87,17 @@
         mpi_bin=mpirun
     fi
     # check MPICH version, versions less than 3.0 will get -D__MPI_VERSION=2 flag
-    raw_version=$($mpi_bin --version | \
-                      grep "Version:" | awk '{print $2}')
-    major_version=$(echo $raw_version | cut -d '.' -f 1)
-    minor_version=$(echo $raw_version | cut -d '.' -f 2)
-    if [ $major_version -lt 3 ] ; then
-        mpi2_dflags="-D__MPI_VERSION=2"
-    else
+    #raw_version=$($mpi_bin --version | \
+    #                  grep "Version:" | awk '{print $2}')
+    #major_version=$(echo $raw_version | cut -d '.' -f 1)
+    #minor_version=$(echo $raw_version | cut -d '.' -f 2)
+    #if [ $major_version -lt 3 ] ; then
+    #    mpi2_dflags="-D__MPI_VERSION=2"
+    #else
         mpi2_dflags=''
-    fi
+    #fi
+    MPICH_CFLAGS="-I${I_MPI_ROOT}/include64"
+    MPICH_LDFLAGS="-L${I_MPI_ROOT}/lib64 -Wl,-rpath=${I_MPI_ROOT}/lib64"
     cat <<EOF >> "${BUILDDIR}/setup_mpich"
 export MPI_MODE="${MPI_MODE}"
 export MPICH_CFLAGS="${MPICH_CFLAGS}"

  • tc_install_libint.sh.intel.diff (不必要でかつビルドに失敗するものを無理矢理外しています)

--- install_libint.sh.org       2020-02-03 18:13:20.000000000 +0900
+++ install_libint.sh   2020-02-03 19:16:36.000000000 +0900
@@ -72,6 +72,8 @@
             #cmake --build . > cmake.log 2>&1
             #cmake --build . --target install > install.log 2>&1
 
+            # extremely ad hoc workaround
+            sed -i -e "s/fortran_example check_test/libint_f.o check_test/" fortran/Makefile.in
             ./configure --prefix=${pkg_install_dir} \
                         --with-cxx="$CXX $LIBINT_CXXFLAGS" \
                         --with-cxx-optflags="$LIBINT_CXXFLAGS" \

  • tc_install_sirius.sh.diff

--- install_sirius.sh.org       2020-02-25 14:50:50.000000000 +0900
+++ install_sirius.sh   2020-02-25 14:48:01.000000000 +0900
@@ -131,8 +131,8 @@
                    -DSpFFT_DIR="${SPFFT_ROOT}/lib/cmake/SpFFT" \
                    -DCMAKE_CXXFLAGS_RELEASE="${SIRIUS_OPT}" \
                    -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="${SIRIUS_DBG}" \
-                   -DCMAKE_CXX_COMPILER=mpic++ \
-                   -DCMAKE_C_COMPILER=mpicc \
+                   -DCMAKE_CXX_COMPILER=${MPICXX} \
+                   -DCMAKE_C_COMPILER=${MPICC} \
                   ${COMPILATION_OPTIONS} .. > compile.log 2>&1
              make -j $NPROCS -C src >> compile.log 2>&1
 
@@ -155,8 +155,8 @@
                       -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="${SIRIUS_DBG}" \
                       -DUSE_CUDA=ON \
                       -DGPU_MODEL=P100 \
-                      -DCMAKE_CXX_COMPILER=mpic++ \
-                      -DCMAKE_C_COMPILER=mpicc ${COMPILATION_OPTIONS} .. >> compile.log 2>&1
+                      -DCMAKE_CXX_COMPILER=${MPICXX} \
+                      -DCMAKE_C_COMPILER=${MPICC} ${COMPILATION_OPTIONS} .. >> compile.log 2>&1
                 make -j $NPROCS -C src >> compile.log 2>&1
                 install -d ${pkg_install_dir}/lib/cuda
                 install -d ${pkg_install_dir}/include/cuda

  • tc_install_superlu.sh.intel.diff

--- install_superlu.sh.org      2020-02-04 11:46:01.000000000 +0900
+++ install_superlu.sh  2020-02-04 11:46:22.000000000 +0900
@@ -46,12 +46,12 @@
             cat <<EOF >> make.inc
 PLAT=_${OPENBLAS_ARCH}
 DSUPERLULIB= ${PWD}/lib/libsuperlu_dist.a
-LIBS=\$(DSUPERLULIB) ${PARMETIS_LDFLAGS} ${METIS_LDFLAGS} ${MATH_LDFLAGS} ${PARMETIS_LIBS} ${METIS_LIBS} $(resolve_string "${MATH_LIBS}" OMP) -lgfortran
+LIBS=\$(DSUPERLULIB) ${PARMETIS_LDFLAGS} ${METIS_LDFLAGS} ${MATH_LDFLAGS} ${PARMETIS_LIBS} ${METIS_LIBS} $(resolve_string "${MATH_LIBS}" OMP)
 ARCH=ar
 ARCHFLAGS=cr
 RANLIB=ranlib
 CC=${MPICC}
-CFLAGS=${CFLAGS} ${PARMETIS_CFLAGS} ${METIS_CFLAGS} ${MATH_CFLAGS}
+CFLAGS=${CFLAGS} -std=c99 -fPIC ${PARMETIS_CFLAGS} ${METIS_CFLAGS} ${MATH_CFLAGS}
 NOOPTS=-O0
 FORTRAN=${MPIFC}
 F90FLAGS=${FFLAGS}

  • tc_install_libvdwxc.sh.intel.diff

--- install_libvdwxc.sh.org     2020-02-04 16:23:50.000000000 +0900
+++ install_libvdwxc.sh 2020-02-04 16:48:35.000000000 +0900
@@ -65,7 +65,7 @@
             unset MPICC MPICXX MPIF90 MPIFC MPIF77
             if [ "$MPI_MODE" = "no" ]; then
                 # compile libvdwxc without mpi support since fftw (or mkl) do not have mpi support activated
-                ./configure \
+                CC=${CC} FC=${FC} ./configure \
                     --prefix="${pkg_install_dir}" \
                     --libdir="${pkg_install_dir}/lib" \
                     --with-fftw3=${FFTW_ROOT} \
@@ -73,12 +73,11 @@
                     --without-mpi \
                     >> configure.log 2>&1
             else
-                CC=mpicc FC=mpifort ./configure \
+                MPICC=mpiicc MPIFC=mpiifort ./configure \
                     --prefix="${pkg_install_dir}" \
                     --libdir="${pkg_install_dir}/lib" \
                     --with-fftw3=${FFTW_ROOT} \
                     --disable-shared \
-                    --with-mpi \
                     >> configure.log 2>&1
             fi
             make -j $NPROCS > compile.log 2>&1

  • tc_install_plumed.sh.diff

--- install_plumed.sh.org       2020-02-04 15:13:41.986747619 +0900
+++ install_plumed.sh   2020-02-04 16:00:15.980396838 +0900
@@ -40,7 +40,7 @@
 
             echo "Installing from scratch into ${pkg_install_dir}"
             cd plumed-${plumed_ver}
-            ./configure CXX="${MPICXX}" --prefix=${pkg_install_dir} --libdir="${pkg_install_dir}/lib" > configure.log 2>&1
+            ./configure CXX="${MPICXX}" --prefix=${pkg_install_dir} --libdir="${pkg_install_dir}/lib" CXXFLAGS="-I${GSLROOT}/include" LIBS="-L${GSLROOT}/lib -L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl" > configure.log 2>&1
             make -j $NPROCS > make.log 2>&1
             make install > install.log 2>&1
             write_checksums "${install_lock_file}" "${SCRIPT_DIR}/$(basename ${SCRIPT_NAME})"
@@ -63,7 +63,7 @@
 esac
 
 if [ "$with_plumed" != "__DONTUSE__" ] ; then
-    PLUMED_LIBS='-lplumed -ldl -lstdc++ -lz -ldl'
+    PLUMED_LIBS='-lplumedKernel -lplumed -ldl -lstdc++ -lz -ldl'
     if [ "$with_plumed" != "__SYSTEM__" ] ; then
         cat <<EOF > "${BUILDDIR}/setup_plumed"
 prepend_path LD_LIBRARY_PATH "$pkg_install_dir/lib"

ビルド手順

#!/bin/sh

INSTDIR=/local/apl/lx/cp2k710

VERSION=7.1.0
DBCSR_VERSION=2.0.1

SOURCE_ROOT=/home/users/${USER}/Software/CP2K/${VERSION}

TARBALL=${SOURCE_ROOT}/cp2k-${VERSION}.tar.gz
TARBALL_DBCSR=${SOURCE_ROOT}/dbcsr-${DBCSR_VERSION}.tar.gz

TC_PATCH0=${SOURCE_ROOT}/tc_install_cp2k_toolchain.sh.diff
TC_PATCH1=${SOURCE_ROOT}/tc_install_mkl.sh.intel.diff
TC_PATCH2=${SOURCE_ROOT}/tc_install_mpich.sh.intel.diff
TC_PATCH3=${SOURCE_ROOT}/tc_install_libint.sh.intel.diff
#TC_PATCH4=${SOURCE_ROOT}/tc_install_quip.sh.intel.diff
TC_PATCH5=${SOURCE_ROOT}/tc_install_sirius.sh.diff
TC_PATCH6=${SOURCE_ROOT}/tc_install_superlu.sh.intel.diff
TC_PATCH7=${SOURCE_ROOT}/tc_install_libvdwxc.sh.intel.diff
TC_PATCH8=${SOURCE_ROOT}/tc_install_plumed.sh.diff

PARALLEL=12

#---------------------------------------------------------------------------
umask 0022
export LANG=C
export LC_ALL=C

module purge
module load scl/devtoolset-7
module load intel_parallelstudio/2018update4
module load cmake/3.16.3

cd $INSTDIR
if [ -d cp2k-${VERSION} ]; then
  mv cp2k-${VERSION} cp2k-erase
  rm -rf cp2k-erase &
fi
tar zxf ${TARBALL}
sleep 5
mv cp2k-${VERSION}/* .
sleep 5
rm -f cp2k-${VERSION}/.dockerignore
rmdir cp2k-${VERSION}

cd ${INSTDIR}/tools/toolchain
patch < ${TC_PATCH0}

cd scripts
patch < ${TC_PATCH1}
patch < ${TC_PATCH2}
patch < ${TC_PATCH3}
#patch < ${TC_PATCH4}
patch < ${TC_PATCH5}
patch < ${TC_PATCH6}
patch < ${TC_PATCH7}
patch < ${TC_PATCH8}
cd ../

export CC=icc
export CXX=icpc
export FC=ifort
export MPICC=mpiicc
export MPICXX=mpiicpc
export MPIFC=mpiifort

./install_cp2k_toolchain.sh --math-mode=mkl \
                            --mpi-mode=mpich \
                            --with-cmake=system \
                            --with-mpich=system \
                            --with-openmpi=no \
                            --with-libxc=install \
                            --with-libint=install \
                            --with-fftw=install \
                            --with-openblas=no \
                            --with-scalapack=no \
                            --with-reflapack=no \
                            --with-libxsmm=install \
                            --with-elpa=install \
                            --with-ptscotch=install \
                            --with-pexsi=install \
                            --with-parmetis=install \
                            --with-superlu=install \
                            --with-quip=no \
                            --with-plumed=install \
                            --with-gsl=install \
                            --with-libvdwxc=install \
                            --with-spglib=install \
                            --with-hdf5=install \
                            --with-spfft=install \
                            -j ${PARALLEL}

sed -e "/^LIBS /s/\$/ -nofor_main/" \
    install/arch/local.psmp > ../../arch/rccs.psmp

cd ${INSTDIR}/exts
rmdir dbcsr
tar zxf ${TARBALL_DBCSR}
mv dbcsr-${DBCSR_VERSION} dbcsr
cd ../
make -j ${PARALLEL} ARCH=rccs VERSION=psmp

テスト

以下のスクリプトを ccfep 上で実行しています。

#!/bin/sh

export LC_ALL=C
export LANG=""

# intel
module purge
module load scl/devtoolset-7
module load intel_parallelstudio/2018update4
module load cmake/3.16.3
CP2K=/local/apl/lx/cp2k710

CP2K_ARCH=rccs
CP2K_VER=psmp
TIMEOUT=120
PARALLEL=16

ulimit -s unlimited
cd ${CP2K}/regtesting/${CP2K_ARCH}/${CP2K_VER}
rm -rf LAST-${CP2K_ARCH}-${CP2K_VER}

# serial test
../../../tools/regtesting/do_regtest \
        -nobuild \
        -nosvn \
        -arch ${CP2K_ARCH} \
        -version ${CP2K_VER} \
        -mpiranks 1 \
        -ompthreads 1 \
        -jobmaxtime ${TIMEOUT} \
        -cp2kdir ../../../ \
        -maxtasks ${PARALLEL} >& regtest_mpi1_omp1.log
rm -rf LAST-${CP2K_ARCH}-${CP2K_VER}

# omp test
../../../tools/regtesting/do_regtest \
        -nobuild \
        -nosvn \
        -arch ${CP2K_ARCH} \
        -version ${CP2K_VER} \
        -mpiranks 1 \
        -ompthreads 2 \
        -jobmaxtime ${TIMEOUT} \
        -cp2kdir ../../../ \
        -maxtasks ${PARALLEL} >& regtest_mpi1_omp2.log
rm -rf LAST-${CP2K_ARCH}-${CP2K_VER}

# mpi test
../../../tools/regtesting/do_regtest \
        -nobuild \
        -nosvn \
        -arch ${CP2K_ARCH} \
        -version ${CP2K_VER} \
        -mpiranks 2 \
        -ompthreads 1 \
        -jobmaxtime ${TIMEOUT} \
        -cp2kdir ../../../ \
        -maxtasks ${PARALLEL} >& regtest_mpi2_omp1.log
rm -rf LAST-${CP2K_ARCH}-${CP2K_VER}

# mpi/openmp test
../../../tools/regtesting/do_regtest \
        -nobuild \
        -nosvn \
        -arch ${CP2K_ARCH} \
        -version ${CP2K_VER} \
        -mpiranks 2 \
        -ompthreads 2 \
        -jobmaxtime ${TIMEOUT} \
        -cp2kdir ../../../ \
        -maxtasks ${PARALLEL} >& regtest_mpi2_omp2.log
rm -rf LAST-${CP2K_ARCH}-${CP2K_VER}

# yet another mpi test
../../../tools/regtesting/do_regtest \
        -nobuild \
        -nosvn \
        -arch ${CP2K_ARCH} \
        -version ${CP2K_VER} \
        -mpiranks 8 \
        -ompthreads 1 \
        -jobmaxtime ${TIMEOUT} \
        -cp2kdir ../../../ \
        -maxtasks ${PARALLEL} >& regtest_mpi8_omp1.log
rm -rf LAST-${CP2K_ARCH}-${CP2K_VER}

# yet another mpi/openmp test
../../../tools/regtesting/do_regtest \
        -nobuild \
        -nosvn \
        -arch ${CP2K_ARCH} \
        -version ${CP2K_VER} \
        -mpiranks 8 \
        -ompthreads 2 \
        -jobmaxtime ${TIMEOUT} \
        -cp2kdir ../../../ \
        -maxtasks ${PARALLEL} >& regtest_mpi8_omp2.log
rm -rf LAST-${CP2K_ARCH}-${CP2K_VER}

テスト結果: MPI1 - OMP1

--------------------------------- Summary --------------------------------
Number of FAILED  tests 1
Number of WRONG   tests 2
Number of CORRECT tests 3214
Number of NEW     tests 3
Total number of   tests 3220

  • QS/regtest-ri-mp2/opt_basis_O_auto_gen.inp: WRONG
  • QS/regtest-almo-2/ion-pair.inp: RUNTIME FAIL
  • Fist/regtest-3/2d_pot.inp: WRONG

テスト結果: MPI1 - OMP2

--------------------------------- Summary --------------------------------
Number of FAILED  tests 2
Number of WRONG   tests 2
Number of CORRECT tests 3213
Number of NEW     tests 3
Total number of   tests 3220

  • SIRIUS/regtest-1/He-full-potential.inp: RUNTIME FAIL
  • QS/regtest-ri-mp2/opt_basis_O_auto_gen.inp: WRONG
  • QS/regtest-almo-2/ion-pair.inp: RUNTIME FAIL
  • Fist/regtest-3/2d_pot.inp: WRONG

テスト結果: MPI2 - OMP1

--------------------------------- Summary --------------------------------
Number of FAILED  tests 0
Number of WRONG   tests 2
Number of CORRECT tests 3275
Number of NEW     tests 8
Total number of   tests 3285

  • QS/regtest-ri-mp2/opt_basis_O_auto_gen.inp: WRONG
  • Fist/regtest-3/2d_pot.inp: WRONG

テスト結果: MPI2 - OMP2

--------------------------------- Summary --------------------------------
Number of FAILED  tests 1
Number of WRONG   tests 2
Number of CORRECT tests 3274
Number of NEW     tests 8
Total number of   tests 3285

  • SIRIUS/regtest-1/He-full-potential.inp: RUNTIME FAIL
  • QS/regtest-ri-mp2/opt_basis_O_auto_gen.inp: WRONG
  • Fist/regtest-3/2d_pot.inp: WRONG

テスト結果: MPI8 - OMP1

--------------------------------- Summary --------------------------------
Number of FAILED  tests 7
Number of WRONG   tests 10
Number of CORRECT tests 3219
Number of NEW     tests 6
Total number of   tests 3242

  • QS/regtest-mp2-lr/H2O-mp2-gpw-lr.inp: WRONG
  • QS/regtest-mp2-grad/H2O_grad_mme.inp: WRONG
  • QS/regtest-gpw-4/H2O-debug-5.inp: WRONG
  • QS/regtest-gpw-4/H2O-debug-6.inp: WRONG
  • QS/regtest-ri-mp2/opt_basis_O_auto_gen.inp: WRONG
  • Fist/regtest-3/2d_pot.inp: WRONG
  • QS/regtest-mp2-4/H2O_NO_HFX.inp: WRONG
  • QS/regtest-rma-3D/H2O-32-dftb-ls-2_mult.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2O-32-dftb-ls-2.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2O-OT-ASPC-1.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2-big-nimages.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2O_grad_gpw.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/OH-H2O-bsse.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2O-6.inp: RUNTIME FAIL
  • TMC/regtest_ana_on_the_fly/TMC_ana_start_with_exist_traj.inp: WRONG
  • TMC/regtest_ana_on_the_fly/TMC_ana_restart.inp: WRONG
  • QS/regtest-mp2-2/H2O-02.inp: WRONG

テスト結果: MPI8 - OMP2

--------------------------------- Summary --------------------------------
Number of FAILED  tests 8
Number of WRONG   tests 10
Number of CORRECT tests 3218
Number of NEW     tests 6
Total number of   tests 3242

  • QS/regtest-mp2-lr/H2O-mp2-gpw-lr.inp: WRONG
  • SIRIUS/regtest-1/He-full-potential.inp: RUNTIME FAIL
  • QS/regtest-mp2-grad/H2O_grad_mme.inp: WRONG
  • QS/regtest-gpw-4/H2O-debug-5.inp: WRONG
  • QS/regtest-gpw-4/H2O-debug-6.inp: WRONG
  • QS/regtest-ri-mp2/opt_basis_O_auto_gen.inp: WRONG
  • Fist/regtest-3/2d_pot.inp: WRONG
  • QS/regtest-mp2-4/H2O_NO_HFX.inp: WRONG
  • QS/regtest-rma-3D/H2O-32-dftb-ls-2_mult.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2O-32-dftb-ls-2.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2O-OT-ASPC-1.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2-big-nimages.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2O_grad_gpw.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/OH-H2O-bsse.inp: RUNTIME FAIL
  • QS/regtest-rma-3D/H2O-6.inp: RUNTIME FAIL
  • TMC/regtest_ana_on_the_fly/TMC_ana_start_with_exist_traj.inp: WRONG
  • TMC/regtest_ana_on_the_fly/TMC_ana_restart.inp: WRONG
  • QS/regtest-mp2-2/H2O-02.inp: WRONG

ベンチマーク

6.1.0 と同じように H2O-64.inp を利用。(時間は grep "CP2K  " *.log で表示される値から)
21 回実行し、最初の 1 回を除いた平均値。(初回は速度が安定しないため)
jobtype 総コア数
(ノード数)
MPI OMP GPU elapse(sec)
core 18 (1) 18 1 - 68.154
small 40 (1) 40 1 - 45.426
small 80 (2) 80 1 - 31.327
small 160 (4) 32 5 - 23.398

雑多な情報

  • GPU 版はあまり意味が無いようなので今回ははじめから除外。
    • SIRIUS の GPU 版については MAGMA 等まで対応させれば速度が出るのかもしれませんが、今回は回避しています。
  • libgrid を使うとわずかに遅くなったため、使用せず。
    • pyratemp 0.3.2 で試行。そのままビルドすると xyz_to_vab 内の *.template ファイルを正しく処理できておらず、失敗する。
    • sed -i -e "s/\\$/\!/g" -e "s/\@</\@\!/g" -e "s/>\@/\!\@/g" であらかじめ *.template ファイルを処理することで一応動作は確認。速度面ではメリット無し。
      • (スクリプト中で実行する場合は sed -i -e "s/\\\$/\!/g" -e "s/\@</\@\!/g" -e "s/>\@/\!\@/g" )
  • libsmm については今回も未検証
  • cp2k 本体は -O2 でビルド。-O2 -xHost や -O3 -xHost も試したが、速度は上がらない。
  • dbcsr を指示通りに git で持ってくると master ブランチのものを使うことになる。タイミングによってはダメなことが起こるので、リリース版を使っている。
  • QUIP はテストをパスしないため、最終的に外している。GCC 版では正常に動いている。
    • QUIP をビルドする際に必要だったパッチファイル  tc_install_quip.sh.intel.diff (今回は最終的に利用していません。あくまで参考情報です)

--- install_quip.sh.org 2020-02-04 13:38:25.000000000 +0900
+++ install_quip.sh     2020-02-04 12:53:16.000000000 +0900
@@ -68,34 +68,24 @@
                     -e "s|\(cd build/.*\)|\1 >&- 2>&-|g" \
                     bin/find_sizeof_fortran_t
             fi
-            sed -i \
-                -e "s|\(F77 *=\).*|\1 ${FC}|g" \
-                -e "s|\(F90 *=\).*|\1 ${FC}|g" \
-                -e "s|\(F95 *=\).*|\1 ${FC}|g" \
-                -e "s|\(CC *=\).*|\1 ${CC}|g" \
-                -e "s|\(CPLUSPLUS *=\).*|\1 ${CXX}|g" \
-                -e "s|\(LINKER *=\).*|\1 ${FC}|g" \
-                -e "s|\(FPP *=\).*|\1 ${FC} -E -x f95-cpp-input|g" \
-                -e "s|\(QUIPPY_FCOMPILER *=\).*|\1 ${FC}|g" \
-                -e "s|\(QUIPPY_CPP *=\).*|\1 ${FC} -E -x f95-cpp-input|g" \
-                arch/Makefile.linux_${quip_arch}_gfortran
             # enable debug symbols
-            echo "F95FLAGS       += -g" >> arch/Makefile.linux_${quip_arch}_gfortran
-            echo "F77FLAGS       += -g" >> arch/Makefile.linux_${quip_arch}_gfortran
-            echo "CFLAGS         += -g" >> arch/Makefile.linux_${quip_arch}_gfortran
-            echo "CPLUSPLUSFLAGS += -g" >> arch/Makefile.linux_${quip_arch}_gfortran
-            export QUIP_ARCH=linux_${quip_arch}_gfortran
+            echo "F95FLAGS       += -g" >> arch/Makefile.linux_${quip_arch}_ifort_icc
+            echo "F77FLAGS       += -g" >> arch/Makefile.linux_${quip_arch}_ifort_icc
+            echo "CFLAGS         += -g" >> arch/Makefile.linux_${quip_arch}_ifort_icc
+            echo "CPLUSPLUSFLAGS += -g" >> arch/Makefile.linux_${quip_arch}_ifort_icc
+            export QUIP_ARCH=linux_${quip_arch}_ifort_icc
             # hit enter a few times to accept defaults
-            echo -e "${MATH_LDFLAGS} $(resolve_string "${MATH_LIBS}") \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" | make config > configure.log
+            QUIP_MATH_LIBS="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl"
+            echo -e "${MATH_LDFLAGS} ${QUIP_MATH_LIBS} \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" | make config > configure.log
             # make -j does not work :-(
             make > make.log 2>&1
             ! [ -d "${pkg_install_dir}/include" ] && mkdir -p "${pkg_install_dir}/include"
             ! [ -d "${pkg_install_dir}/lib" ] && mkdir -p "${pkg_install_dir}/lib"
-            cp build/linux_x86_64_gfortran/quip_unified_wrapper_module.mod \
+            cp build/linux_x86_64_ifort_icc/quip_unified_wrapper_module.mod \
                "${pkg_install_dir}/include/"
-            cp build/linux_x86_64_gfortran/*.a \
+            cp build/linux_x86_64_ifort_icc/*.a \
                "${pkg_install_dir}/lib/"
-            cp src/FoX-4.0.3/objs.linux_${quip_arch}_gfortran/lib/*.a \
+            cp src/FoX-4.0.3/objs.linux_${quip_arch}_ifort_icc/lib/*.a \
                "${pkg_install_dir}/lib/"
             cd ..
             write_checksums "${install_lock_file}" "${SCRIPT_DIR}/$(basename ${SCRIPT_NAME})"

  • Intel 2019 では少し遅い + MPI の挙動に何か問題があるのか、エラーが多い。
  • Intel 2017, 2018, 2019 で試した範囲では 2018 が一番計算速度が速い。エラーの数も 2018 がもっとも少ない (ただし、2017 と 2018 はほぼ同じ水準)。
  • Intel 2017 ではコードを修正しないとビルドが通らない。iso_fortran_env で未対応のものが使われているため。
    • Intel 2017 でビルドする際に必要だった src/start/cp2k.F のパッチ

--- src/start/cp2k.F.org        2020-02-17 15:26:54.474087502 +0900
+++ src/start/cp2k.F    2020-02-17 15:40:07.489475278 +0900
@@ -55,8 +55,6 @@
    USE input_cp2k,                      ONLY: create_cp2k_root_section
    USE input_section_types,             ONLY: section_release,&
                                               section_type
-   USE iso_fortran_env,                 ONLY: compiler_options,&
-                                              compiler_version
    USE kinds,                           ONLY: default_path_length,&
                                               default_string_length
    USE machine,                         ONLY: default_output_unit
@@ -245,14 +243,6 @@
                   cp2k_version//TRIM(dev_flag), &
                   "Source code revision "//TRIM(compile_revision), &
                   TRIM(cp2k_flags())
-               compiler_options_string = compiler_options()
-               WRITE (output_unit, "(T2,A,A)") "compiler: ", compiler_version()
-               WRITE (output_unit, "(T2,A)") "compiler options:"
-               DO i = 0, (LEN(compiler_options_string) - 1)/68
-                  WRITE (output_unit, "(T4,A)") &
-                     compiler_options_string(i*68 + 1:MIN(LEN(compiler_options_string), (i + 1)*68))
-               END DO
-               DEALLOCATE (compiler_options_string)
             END IF
          END IF