计算化学公社

 找回密码 Forget password
 注册 Register
Views: 3191|回复 Reply: 34

[CP2K] CP2K-8.2 的全intel编译器编译

[复制链接 Copy URL]

13

帖子

1

威望

1172

eV
积分
1205

Level 4 (黑子)

发表于 Post on 2021-12-12 19:34:03 | 显示全部楼层 Show all |阅读模式 Reading model
本帖最后由 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, 测试全部通过
202112131828038708..png

与gcc-openmpi-intelmkl速度对比测试
case1


使用http://sobereva.com/587中提到的“做COF(共价有机框架)化合物的单点任务”直接生成的输入文件,gcc-openmpi-intelmkl版本耗时如图:
202112151940506724..png

全intel版本耗时如图:
202112151942154195..png

case2
使用群友提供的测试文件,见附件 coord.inc (7.08 KB, 下载次数 Times of downloads: 8)

评分 Rate

参与人数
Participants 10
威望 +1 eV +35 收起 理由
Reason
Johnson_Cheung + 3 赞!
乐平 + 5 赞!
panernie + 3 好物!
ggdh + 5 谢谢
ccjjww25 + 2 GJ!
Aridea + 5
丁越 + 5 斯国一
ezez + 5 赞!
sobereva + 1
hdhxx123 + 2 好物!

查看全部评分 View all ratings

222

帖子

6

威望

1310

eV
积分
1652

Level 5 (御坂)

发表于 Post on 2021-12-13 13:21:00 | 显示全部楼层 Show all
本帖最后由 丁越 于 2021-12-13 13:29 编辑

请问一下老师,这里的mkdir build && cd buildcmake .. 这一句是不是有些问题,整个执行这一句"mkdir build && cd buildcmake .. -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" 会报错。按我的理解这里的mkdir build && cd build与cmake及其之后的内容应该是两行执行命令,少了个空格;还有如果按分成两次执行后,执行"cmake --build ." 会报"gmake: Makefile: No such file or directory"。麻烦老师指导下该怎么弄?




202112131303168311..png
自由发挥,野蛮生长

13

帖子

1

威望

1172

eV
积分
1205

Level 4 (黑子)

 楼主 Author| 发表于 Post on 2021-12-13 14:05:25 | 显示全部楼层 Show all
丁越 发表于 2021-12-13 13:21
请问一下老师,这里的mkdir build && cd buildcmake .. 这一句是不是有些问题,整个执行这一句"[/backcolor ...

两行命令的理解没错,是断行显示问题,“mkdir build && cd build”是一行单独的命令。

至于你那个报错,cmake --build之前的那行命令是否成功运行了呢?

222

帖子

6

威望

1310

eV
积分
1652

Level 5 (御坂)

发表于 Post on 2021-12-13 14:25:02 | 显示全部楼层 Show all
本帖最后由 丁越 于 2021-12-13 14:27 编辑
sophie0720 发表于 2021-12-13 14:05
两行命令的理解没错,是断行显示问题,“mkdir build && cd build”是一行单独的命令。

至于你那个报 ...

老师,我把所有的库都编完了,就差这一个了。cmake 之前的都没问题,执行cmake这一句后开始有错误提示,我把log文件传上去,麻烦老师看下。
CMake Warning at CMakeLists.txt:70 (find_package):
  By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Eigen3", but
  CMake did not find one.

  Could not find a package configuration file provided by "Eigen3" with any
  of the following names:

    Eigen3Config.cmake
    eigen3-config.cmake

  Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
  "Eigen3_DIR" to a directory containing one of the above files.  If "Eigen3"
  provides a separate development package or SDK, be sure it has been
  installed.


CMake Error at /usr/share/cmake/Modules/FindBoost.cmake:1793 (file):
  file STRINGS file
  "/opt/package_cp2k/boost-1.78.0/include/boost/version.hpp" cannot be read.
Call Stack (most recent call first):
  CMakeLists.txt:79 (find_package)


-- Could NOT find Boost: Found unsuitable version "0.0.0", but required is at least "1.29" (found /opt/package_cp2k/boost-1.78.0/include, )
-- Found PythonInterp: /opt/oneapi/intelpython/latest/bin/python (found version "3.7.10")
-- === Libint2 Package/Feature Info ===
-- The following REQUIRED packages have been found:

* PythonInterp

-- The following OPTIONAL packages have not been found:

* Eigen3
* Boost (required version >= 1.29)

-- Configuring incomplete, errors occurred!
See also "/root/libint-v2.6.0-cp2k-lmax-5/build/CMakeFiles/CMakeOutput.log".



CMakeOutput.log

154.59 KB, 下载次数 Times of downloads: 2

自由发挥,野蛮生长

13

帖子

1

威望

1172

eV
积分
1205

Level 4 (黑子)

 楼主 Author| 发表于 Post on 2021-12-13 14:40:21 | 显示全部楼层 Show all
丁越 发表于 2021-12-13 14:25
老师,我把所有的库都编完了,就差这一个了。cmake 之前的都没问题,执行cmake这一句后开始有错误提示, ...

是boost库的问题。示例中给的是我自己服务器上boost的路径,需要根据你服务器来调整。可以先不外接boost库试试

222

帖子

6

威望

1310

eV
积分
1652

Level 5 (御坂)

发表于 Post on 2021-12-13 14:58:22 | 显示全部楼层 Show all
本帖最后由 丁越 于 2021-12-13 15:02 编辑
sophie0720 发表于 2021-12-13 14:40
是boost库的问题。示例中给的是我自己服务器上boost的路径,需要根据你服务器来调整。可以先不外接boost ...

是的老师,不加boost库就可以正常编译了。我的服务器上boost库的路径是:boost: /usr/include/boost 。我该怎么调整路径使其编译时能调用这个boost呢?如果不咋影响计算速度的话我就不加了。
自由发挥,野蛮生长

13

帖子

1

威望

1172

eV
积分
1205

Level 4 (黑子)

 楼主 Author| 发表于 Post on 2021-12-13 15:22:41 | 显示全部楼层 Show all
丁越 发表于 2021-12-13 14:58
是的老师,不加boost库就可以正常编译了。我的服务器上boost库的路径是:boost: /usr/include/boost 。我 ...

Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,只要成功编译了libint应该就无所谓,而且你这个boost路径是默认路径,说不定已经自动调用了

222

帖子

6

威望

1310

eV
积分
1652

Level 5 (御坂)

发表于 Post on 2021-12-13 16:07:07 | 显示全部楼层 Show all
sophie0720 发表于 2021-12-13 15:22
Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,只要成功编译了libint应该就无所谓,而且你这 ...

谢谢老师。编译这个libint-v2.6.0-cp2k-lmax-5是真的慢啊
自由发挥,野蛮生长

222

帖子

6

威望

1310

eV
积分
1652

Level 5 (御坂)

发表于 Post on 2021-12-13 16:46:53 | 显示全部楼层 Show all
本帖最后由 丁越 于 2021-12-13 16:57 编辑
sophie0720 发表于 2021-12-13 15:22
Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,只要成功编译了libint应该就无所谓,而且你这 ...

老师,我的没有编译成功,出现了下面所示的错误,这有啥办法么?
make[2]: *** [/opt/cp2k-8.2/Makefile:144: all] Error 2
make[1]: *** [/opt/cp2k-8.2/Makefile:126: psmp] Error 2
make: *** [Makefile:121: all] Error 2
自由发挥,野蛮生长

13

帖子

1

威望

1172

eV
积分
1205

Level 4 (黑子)

 楼主 Author| 发表于 Post on 2021-12-13 17:03:58 | 显示全部楼层 Show all
丁越 发表于 2021-12-13 16:46
老师,我的没有编译成功,出现了下面所示的错误,这有啥办法么?
make[2]: *** [/opt/cp2k-8.2/Makefile ...

这么三行里看不到具体的报错信息

222

帖子

6

威望

1310

eV
积分
1652

Level 5 (御坂)

发表于 Post on 2021-12-13 17:06:26 | 显示全部楼层 Show all
本帖最后由 丁越 于 2021-12-13 17:10 编辑
sophie0720 发表于 2021-12-13 17:03
这么三行里看不到具体的报错信息

我再试试。
自由发挥,野蛮生长

1379

帖子

1

威望

2012

eV
积分
3411

Level 5 (御坂)

喵星人

发表于 Post on 2021-12-13 17:17:53 | 显示全部楼层 Show all
速度和测试情况呢?

13

帖子

1

威望

1172

eV
积分
1205

Level 4 (黑子)

 楼主 Author| 发表于 Post on 2021-12-13 18:34:20 | 显示全部楼层 Show all
喵星大佬 发表于 2021-12-13 17:17
速度和测试情况呢?

测试可全部通过,图片已补上。我这机器比较老,速度的参考意义不大

222

帖子

6

威望

1310

eV
积分
1652

Level 5 (御坂)

发表于 Post on 2021-12-13 19:10:26 | 显示全部楼层 Show all
sophie0720 发表于 2021-12-13 18:34
测试可全部通过,图片已补上。我这机器比较老,速度的参考意义不大

这里我发现几点小问题:
1.ELPA_INC    = /opt/package_cp2k/elpa-$(ELPA_VER)/include/elpa_openmp-$(ELPA_VER)
ELPA_LIB    = /opt/package_cp2k/elpa-$(ELPA_VER)/lib
编译安装的时候ELPA的库是在/opt里,老师这里写错了。要不就所有的依赖库都给他整到package_CP2K中吧。
2.LIBS       += -L/opt/gsl-2.6/lib -lgsl -lgslcblas
这里好像还需要编译gsl库,要不然报错找不到链接。麻烦老师再写下该库的intel编译所需的参数吧。
3.LIBS       += -L/opt/package_cp2k/SpFFT-1.0.5/lib64 -lspfft
LIBS       += -L/opt/hdf5-1.12.0/lib -lhdf5
这里SIRIUS可以直接不用编译了吧,是不是可以把这两行给注释了。如果不注释的话显示缺少hdf5-1.12.0
自由发挥,野蛮生长

13

帖子

1

威望

1172

eV
积分
1205

Level 4 (黑子)

 楼主 Author| 发表于 Post on 2021-12-13 19:42:36 | 显示全部楼层 Show all
丁越 发表于 2021-12-13 19:10
这里我发现几点小问题:
1.ELPA_INC    = /opt/package_cp2k/elpa-$(ELPA_VER)/include/elpa_openmp-$(E ...

好的好的,安排上了

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )

GMT+8, 2022-5-18 02:47 , Processed in 0.569214 second(s), 28 queries .

快速回复 返回顶部 返回列表 Return to list