计算化学公社

 找回密码 Forget password
 注册 Register
Views: 17410|回复 Reply: 34
打印 Print 上一主题 Last thread 下一主题 Next thread

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

[复制链接 Copy URL]

13

帖子

1

威望

2482

eV
积分
2515

Level 5 (御坂)

本帖最后由 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: 11)
cp2k.inp (2.58 KB, 下载次数 Times of downloads: 9)
gcc-openmpi-intelmkl版本耗时如图:


全intel版本耗时如图:



在笔者的测试中,全intel版本编译的cp2k并未见有速度优势,速度比起gcc-openmpi-intelmkl版本反而慢20%~30%。






评分 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

158

帖子

0

威望

2333

eV
积分
2491

Level 5 (御坂)

35#
发表于 Post on 2022-1-6 18:11:27 | 只看该作者 Only view this author
Quantum198907 发表于 2022-1-6 17:41
安排之后发现,同样的编译条件,比8.2慢10%%¥*&……%*……&*

57

帖子

0

威望

2661

eV
积分
2718

Level 5 (御坂)

34#
发表于 Post on 2022-1-6 17:41:44 | 只看该作者 Only view this author
PoorChaos 发表于 2022-1-6 14:21
CP2K 9.1 出来了,要不要安排一下

安排之后发现,同样的编译条件,比8.2慢10%%¥*&……%*……&*

158

帖子

0

威望

2333

eV
积分
2491

Level 5 (御坂)

33#
发表于 Post on 2022-1-6 14:21:45 | 只看该作者 Only view this author
CP2K 9.1 出来了,要不要安排一下

1665

帖子

5

威望

4788

eV
积分
6553

Level 6 (一方通行)

喵星人

32#
发表于 Post on 2021-12-24 09:34:08 | 只看该作者 Only view this author
sophie0720 发表于 2021-12-24 09:29
我这里用的 intel2020u2版,oneapi恐怕不行,官网明确说了的

OneAPI 2021.3版本的classic编译器官网明确说了可以的,不要用那个测试版的ifx
而实际上2020.2版本并没有测试过

13

帖子

1

威望

2482

eV
积分
2515

Level 5 (御坂)

31#
 楼主 Author| 发表于 Post on 2021-12-24 09:29:51 | 只看该作者 Only view this author
乐平 发表于 2021-12-23 10:19
请问您用的是哪个版本的 Intel compiler 呢?Intel OneAPI?

我这里用的 intel2020u2版,oneapi恐怕不行,官网明确说了的

1155

帖子

0

威望

4425

eV
积分
5580

Level 6 (一方通行)

30#
发表于 Post on 2021-12-23 10:19:33 | 只看该作者 Only view this author
请问您用的是哪个版本的 Intel compiler 呢?Intel OneAPI?

158

帖子

0

威望

2333

eV
积分
2491

Level 5 (御坂)

29#
发表于 Post on 2021-12-23 09:44:51 | 只看该作者 Only view this author
厉害

128

帖子

1

威望

429

eV
积分
577

Level 4 (黑子)

28#
发表于 Post on 2021-12-18 11:03:22 | 只看该作者 Only view this author
啦啦黑还黑 发表于 2021-12-14 11:28
intel编译器和mpi编译出来的cp2k比 openmpi + gnu要快30%左右。用mpich也比openmpi快不少。

自己测试似乎发现Intel编译器+Intel MPI/GNU编译器+OpenMPI(toolchain)/GNU编译器+Intel MPI(toolchain)三个版本的CP2K 8.2和GNU编译器+OpenMPI(toolchain)的CP2K 7.1的相对快慢,受到具体的任务类型、任务所使用算法甚至是核数的影响...

非常诡异的情况QAQ

358

帖子

0

威望

2307

eV
积分
2665

Level 5 (御坂)

27#
发表于 Post on 2021-12-17 17:18:17 | 只看该作者 Only view this author
amd的机器上,用gcc、mpich和acml,所有外部连接库,该是能全部安装上。

13

帖子

1

威望

2482

eV
积分
2515

Level 5 (御坂)

26#
 楼主 Author| 发表于 Post on 2021-12-17 09:19:17 | 只看该作者 Only view this author
DoorBell 发表于 2021-12-16 23:18
对比了一下,可能是COSMA这个库的原因?老师能不能考虑下吧COSMA编译进去?感谢~

在我的测试里,两种编译都没有用COSMA

128

帖子

1

威望

429

eV
积分
577

Level 4 (黑子)

25#
发表于 Post on 2021-12-16 23:18:18 | 只看该作者 Only view this author
sophie0720 发表于 2021-12-15 20:01
我的测试也是,intel版反而慢20%~30%左右,无语了。。

对比了一下,可能是COSMA这个库的原因?老师能不能考虑下吧COSMA编译进去?感谢~

13

帖子

1

威望

2482

eV
积分
2515

Level 5 (御坂)

24#
 楼主 Author| 发表于 Post on 2021-12-15 20:02:49 | 只看该作者 Only view this author
丁越 发表于 2021-12-15 08:54
我测试了一下 gcc+OpenMPI-4.1.1+Intel MKL版的CP2K-8.2与这种intel编译器编译的CP2K-8.2在Co-MOF-74单胞 ...

我的测试也是gcc-openmpi-intelmkl版本更快。。

minimal与regtest区别在于外接库,minimal里仅连接了intelmkl的数学库

13

帖子

1

威望

2482

eV
积分
2515

Level 5 (御坂)

23#
 楼主 Author| 发表于 Post on 2021-12-15 20:01:03 | 只看该作者 Only view this author
DoorBell 发表于 2021-12-15 05:18
对比了一下严格按照主楼老师的方法编译的“Intel版”CP2K 8.2并不比用toolchain编译的“gcc+OpenMPI+Intel  ...

我的测试也是,intel版反而慢20%~30%左右,无语了。。

496

帖子

11

威望

4277

eV
积分
4993

Level 6 (一方通行)

22#
发表于 Post on 2021-12-15 08:54:32 | 只看该作者 Only view this author
本帖最后由 丁越 于 2021-12-15 18:42 编辑
DoorBell 发表于 2021-12-15 05:18
对比了一下严格按照主楼老师的方法编译的“Intel版”CP2K 8.2并不比用toolchain编译的“gcc+OpenMPI+Intel  ...

我测试了一下 gcc+OpenMPI-4.1.1+Intel MKL版的CP2K-8.2与这种intel编译器编译的CP2K-8.2在Co-MOF-74单胞上SCF的速度,发现还是gcc+OpenMPI-4.1.1+Intel MKL版的CP2K-8.2的快不少,这也许与楼主老师用的机子上之前默认装了某些库,而我的恰好没装有关。另外,在测试CP2K自带的测试文件中,错误2个,失败50个,可能是还有些库没装上导致的。
要不楼主老师也试试gcc+OpenMPI-4.1.1+Intel MKL版的CP2K-8.2对比看看速度咋样?
其次,问下Linux-x86-64-intel-minimal.psmp、Linux-x86-64-intel-regtest.psmp这两个的差别在哪些地方?
自由发挥,野蛮生长

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

GMT+8, 2026-2-19 10:15 , Processed in 0.196858 second(s), 25 queries , Gzip On.

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