本帖最后由 sophie0720 于 2021-12-15 19:59 编辑
关于cp2k的编译安装问题,社长与刘博已经详细介绍过了,他们都推荐的是toolchain安装方法。笔者向来倾向于使用intel编译器,故这里做了使用intel编译器来编译cp2k的尝试,供大家参考。
仅仅安装cp2k并不复杂,但我们往往追求更多功能,需要很多外接软件包,此过程比较麻烦。用全intel编译器编译cp2k时,所有外界库最好也用intel编译器编译。
安装elpa-2020.11.001
module load conda gcc intel
./configure --prefix=/opt/package_cp2k/elpa-2020.11.001 --enable-openmp FC=mpiifort FCFLAGS="-O3 -xHost" CC=mpiicc CFLAGS="-O3 -xHost" SCALAPACK_LDFLAGS="-L$MKLROOT/lib/intel64 -lmkl_scalapack_lp64 -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -Wl,-rpath,$MKLROOT/lib/intel64" SCALAPACK_FCFLAGS="-L$MKLROOT/lib/intel64 -lmkl_scalapack_lp64 -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -I$MKLROOT/lib/intel64/lp64" > configure.log 2>&1
make install -j
安装libxc-5.1.7
./configure --prefix=/opt/libxc-5.1.7 --enable-shared CC=icc FC=ifort CFLAGS="-O3 -xHost" FCFLAGS="-O3 -xHost"> configure.log 2>&1
make install -j
安装gsl-2.6
./configure --prefix=/opt/gsl-2.6 CC=icc CFLAGS="-O3 -xHost" > configure.log 2>&1
make -j
make install
安装libint-v2.6.0-cp2k-lmax-5
module load cmake gcc intel/2020u2 conda
export CC=mpiicc CXX=mpiicpc FC=mpiifort
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/package_cp2k/libint-v2.6.0-cp2k-lmax-5 -DENABLE_FORTRAN=ON -DBoost_INCLUDE_DIR=/opt/package_cp2k/boost-1.78.0/include
cmake --build .
cmake --build . --target install推荐使用此cmake方法编译,虽说编译速度较慢,但如果直接使用configure方法编译,则不能使用 --enable-fortran,否则到install时会报错,原因不明。
安装plumed-2.6.2安装plumed需要vim中的xxd, 若系统中并未安装好,我们仍需自己安装,首先要安装ncurses(vim需要): ./configure --prefix=/opt/ncurses-6.3 CC=icc CXX=icpc CFLAGS="-O3 -xHost" CXXFLAGS="-O3 -xHost" --with-shared
make
make install然后安装vim-8.2: ./configure --prefix=/opt/vim-8.2 CC=icc CFLAGS="-O3 -xHost" --with-tlib=ncurses LDFLAGS=-L/opt/ncurses-6.3/lib
make
make install然后安装plumed-2.6.2: ./configure --prefix=/opt/package_cp2k/plumed-2.6.2 CXX=mpiicpc FC=mpiifort CC=mpiicc CFLAGS="-O3 -xHost" FCFLAGS="-O3 -xHost" CXXFLAGS="-O3 -xHost"
make
make install
安装spglib-1.16.0
mkdir build && cd build
export CC=icc
export FC=ifort
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/package_cp2k/spglib-1.16.0
make -j
make install
mkdir /opt/package_cp2k/spglib-1.16.0/include/spglib
cp /opt/package_cp2k/spglib-1.16.0/include/spglib.h /opt/package_cp2k/spglib-1.16.0/include/spglib/
安装libxsmm-1.16.1
make -j MALLOC=0 CXX=icpc CC=icc FC=ifort PREFIX=/opt/package_cp2k/libxsmm-1.16.1
make -j MALLOC=0 CXX=icpc CC=icc FC=ifort PREFIX=/opt/package_cp2k/libxsmm-1.16.1 install
安装libvori-210412
mkdir build && cd build
export CXX=icpc
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/package_cp2k/libvori-210412 -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE
cmake --build .
cmake --build . --target install
安装SpFFT-1.0.5
mkdir build && cd build
export CXX=icpc
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/package_cp2k/SpFFT-1.0.5 -DSPFFT_OMP=ON -DSPFFT_MPI=ON -DSPFFT_INSTALL=ON
make install
注意:这里优化级别使用了比较激进的 -O3, 若求稳也可以改为 -O2。
正式开始编译intel版的cp2k 参考 arch 文件夹下的 Linux-x86-64-intel-regtest.psmp, 我们需根据自己的服务器环境来编写 local.psmp 文件,笔者的例子如下(注:笔者使用了动态库的方式,运行cp2k时需提前加载所有链接到的库) # Tested with: Intel(R) Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 18.0.5.274 Build 20180823
# Intel(R) Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.1.1.217 Build 20200306
# Intel(R) Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.1.3.304 Build 20200925
# Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.1 Build 20201112
# Intel MPI, MKL, LIBINT 2.6.0, LIBXC 5.1.7, LIBXSMM 1.16.1, ELPA 2020.11.001, PLUMED 2.6.2, SPGLIB 1.16.0,
# LIBVORI 210412
# Author: Pengfei Suo (pfsuo@whu.edu.cn, Dec 2021)
CC = mpiicc
FC = mpiifort
LD = mpiifort
AR = ar -r
include /opt/package_cp2k/plumed-2.6.2/lib/plumed/src/lib/Plumed.inc.static
ELPA_VER = 2020.11.001
ELPA_INC = /opt/package_cp2k/elpa-$(ELPA_VER)/include/elpa_openmp-$(ELPA_VER)
ELPA_LIB = /opt/package_cp2k/elpa-$(ELPA_VER)/lib
LIBINT_INC = /opt/package_cp2k/libint-v2.6.0-cp2k-lmax-5/include
LIBINT_LIB = /opt/package_cp2k/libint-v2.6.0-cp2k-lmax-5/lib
LIBVORI_LIB = /opt/package_cp2k/libvori-210412/lib
LIBXC_INC = /opt/libxc-5.1.7/include
LIBXC_LIB = /opt/libxc-5.1.7/lib
LIBXSMM_INC = /opt/package_cp2k/libxsmm-1.16.1/include
LIBXSMM_LIB = /opt/package_cp2k/libxsmm-1.16.1/lib
SPGLIB_INC = /opt/package_cp2k/spglib-1.16.0/include
SPGLIB_LIB = /opt/package_cp2k/spglib-1.16.0/lib64
# Only one test input (CH4-rsLDA.inp) gives wrong results with inlining enabled
CFLAGS = -O2 -qopenmp -fp-model precise -funroll-loops -g -qopenmp-simd -traceback -xHost
DFLAGS = -D__ELPA
DFLAGS += -D__FFTW3
DFLAGS += -D__GSL
DFLAGS += -D__LIBINT
DFLAGS += -D__LIBVORI
DFLAGS += -D__LIBXC
DFLAGS += -D__LIBXSMM
DFLAGS += -D__MAX_CONTR=4
DFLAGS += -D__MKL
DFLAGS += -D__MPI_VERSION=3
DFLAGS += -D__PLUMED2
DFLAGS += -D__SPGLIB
DFLAGS += -D__parallel
DFLAGS += -D__SCALAPACK
DFLAGS += -D__CHECK_DIAG
FCFLAGS = $(CFLAGS) $(DFLAGS)
FCFLAGS += -diag-disable=8291
FCFLAGS += -diag-disable=8293
FCFLAGS += -fpp
FCFLAGS += -free
FCFLAGS += -I$(MKLROOT)/include -I$(MKLROOT)/include/fftw
FCFLAGS += -I$(ELPA_INC)/elpa -I$(ELPA_INC)/modules
FCFLAGS += -I$(LIBINT_INC)
FCFLAGS += -I$(LIBXC_INC)
FCFLAGS += -I$(LIBXSMM_INC)
FCFLAGS += -I$(SIRIUS_INC)
FCFLAGS += -I$(SPGLIB_INC)
LDFLAGS = $(FCFLAGS)
LDFLAGS_C = -nofor-main
MKL_LIB = $(MKLROOT)/lib/intel64
LIBS = $(PLUMED_DEPENDENCIES)
LIBS += -L$(ELPA_LIB) -lelpa_openmp
LIBS += -L$(LIBVORI_LIB) -lvori
LIBS += -L$(LIBXC_LIB) -lxcf03 -lxc
LIBS += -L$(LIBINT_LIB) -lint2
LIBS += -L$(LIBXSMM_LIB) -lxsmmf -lxsmm
LIBS += -L$(SPGLIB_LIB) -lsymspg
LIBS += -L$(MKL_LIB) -lmkl_scalapack_lp64
LIBS += -Wl,--start-group
LIBS += -L$(MKL_LIB) -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64
LIBS += -Wl,--end-group
LIBS += -L/opt/gsl-2.6/lib -lgsl -lgslcblas
LIBS += -L/opt/zlib-1.2.11/lib -lz
LIBS += -lstdc++
# Required due to memory leak that occurs if high optimisations are used
mp2_optimize_ri_basis.o: mp2_optimize_ri_basis.F
$(FC) -c $(subst O2,O0,$(FCFLAGS)) $<
然后使用 make -j ARCH=local VERSION=psmp开始编译即可。
测试
这里笔者用了一台老机器做官方test,即
make -j ARCH=local VERSION=psmp test
cpu为 "Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz",共16核,耗时54 min, 测试全部通过
与gcc-openmpi-intelmkl速度对比测试
case1
使用http://sobereva.com/587中提到的“做COF(共价有机框架)化合物的单点任务”直接生成的输入文件,gcc-openmpi-intelmkl版本耗时如图:
全intel版本耗时如图:
case2
使用群友提供的测试文件,见附件
coord.inc
(7.08 KB, 下载次数 Times of downloads: 8)
|