计算化学公社

标题: CentOS7系统编译CP2K 9.1分享(GCC+Intel MKL+Intel MPI) [打印本页]

作者
Author:
DoorBell    时间: 2022-2-7 23:22
标题: CentOS7系统编译CP2K 9.1分享(GCC+Intel MKL+Intel MPI)
本帖最后由 DoorBell 于 2022-2-7 23:59 编辑

CP2K 9.1版本发布也有一段时间了,总的来说使用自带的toolchain编译之,与之前版本所需的步骤差别不大。最近看到社长和几位老师均指出在CentOS 7上编译较新版本的CP2K由于自带GCC版本老旧而有一些问题,故自己研究折腾了一下,成功在CentOS 7.9上编译CP2K 9.1,将方法发出与大家一起讨论,希望能够抛砖引玉~

编译环境:CentOS 7.9  +  GCC 8.4.0  +  Intel Parallel Studio XE 2020 Update 2
目标CP2K版本:toolchain  +  GNU编译器  +  Intel MKL  +  Intel MPI


环境配置

GCC 8.4.0推荐按此文步骤:Linux下安装高版本GCC,个人所使用的四个依赖库版本为GMP 6.2.0/MPFR 4.1.0/MPC 1.2.0,安装完成后在shell窗口中执行命令:
  1. export PATH=/opt/apps/GCC_840/bin:$PATH
  2. export LD_LIBRARY_PATH=/opt/apps/GCC_840/lib64:$LD_LIBRARY_PATH
  3. export LD_LIBRARY_PATH=/opt/apps/GMP_620/lib:$LD_LIBRARY_PATH
  4. export LD_LIBRARY_PATH=/opt/apps/MPFR_410/lib:$LD_LIBRARY_PATH
  5. export LD_LIBRARY_PATH=/opt/apps/MPC_120/lib:$LD_LIBRARY_PATH
复制代码
需注意各个path路径根据自己实际情况调整,安装完成后执行gcc -v && g++ -v && gfortran -v检查是否安装成功。

Intel Parallel Studio XE 2020 Update 2安装方法相对简单,启动安装程序之后正常完成安装即可,个人是选择安装了所有组件。安装完成后执行命令:
  1. source /opt/apps/intel/20.2/compilers_and_libraries_2020.2.254/linux/mkl/bin/mklvars.sh intel64
  2. source /opt/apps/intel/20.2/compilers_and_libraries_2020.2.254/linux/mpi/intel64/bin/mpivars.sh intel64
复制代码

同样各个path路径根据自己实际情况调整,完成后执行mpicc -v && mpicxx -v && mpif90 -v,应能正常显示Intel MPI和GNU编译器的环境变量,类似如下所示:
  1. mpigcc for the Intel(R) MPI Library 2019 Update 8 for Linux*
  2. Copyright 2003-2020, Intel Corporation.
  3. Using built-in specs.
  4. COLLECT_GCC=gcc
  5. COLLECT_LTO_WRAPPER=/opt/apps/GCC_840/libexec/gcc/x86_64-pc-linux-gnu/8.4.0/lto-wrapper
  6. Target: x86_64-pc-linux-gnu
  7. Configured with: ./configure --prefix=/opt/apps/GCC_840 --with-gmp=/opt/apps/GMP_620 --with-mpfr=/opt/apps/MPFR_410 --with-mpc=/opt/apps/MPC_120 --disable-multilib --enable-languages=c,c++,fortran --enable-checking=release
  8. Thread model: posix
  9. gcc version 8.4.0 (GCC)
  10. mpigxx for the Intel(R) MPI Library 2019 Update 8 for Linux*
  11. Copyright 2003-2020, Intel Corporation.
  12. Using built-in specs.
  13. COLLECT_GCC=g++
  14. COLLECT_LTO_WRAPPER=/opt/apps/GCC_840/libexec/gcc/x86_64-pc-linux-gnu/8.4.0/lto-wrapper
  15. Target: x86_64-pc-linux-gnu
  16. Configured with: ./configure --prefix=/opt/apps/GCC_840 --with-gmp=/opt/apps/GMP_620 --with-mpfr=/opt/apps/MPFR_410 --with-mpc=/opt/apps/MPC_120 --disable-multilib --enable-languages=c,c++,fortran --enable-checking=release
  17. Thread model: posix
  18. gcc version 8.4.0 (GCC)
  19. mpif90 for the Intel(R) MPI Library 2019 Update 8 for Linux*
  20. Copyright 2003-2020, Intel Corporation.
  21. Using built-in specs.
  22. COLLECT_GCC=gfortran
  23. COLLECT_LTO_WRAPPER=/opt/apps/GCC_840/libexec/gcc/x86_64-pc-linux-gnu/8.4.0/lto-wrapper
  24. Target: x86_64-pc-linux-gnu
  25. Configured with: ./configure --prefix=/opt/apps/GCC_840 --with-gmp=/opt/apps/GMP_620 --with-mpfr=/opt/apps/MPFR_410 --with-mpc=/opt/apps/MPC_120 --disable-multilib --enable-languages=c,c++,fortran --enable-checking=release
  26. Thread model: posix
  27. gcc version 8.4.0 (GCC)
复制代码


编译CP2K

https://github.com/cp2k/cp2k/releases/下载CP2K源码cp2k-9.1.tar.bz2,执行tar xjf cp2k-9.1.tar.bz2命令解压。

假定解压后的目录是/opt/apps/CP2K_9.1,进入/opt/apps/CP2K_9.1/tools/toolchain文件夹,打开scripts/stage1/install_intelmpi.sh,将脚本中所有mpiicc均替换为mpicc,所有mpiifort均替换为mpif90,保存。

在toolchain文件夹中运行命令:
  1. ./install_cp2k_toolchain.sh \
  2. --math-mode=mkl \
  3. --with-intelmpi=system \
  4. --with-scalapack=no \
  5. --with-sirius=no \
  6. --with-plumed=install

  7. cp ./install/arch/* ../../arch/
  8. source ./install/setup && cd ../..
  9. make -j ARCH=local VERSION="psmp"
复制代码
之后的步骤与一般用toolchain编译CP2K一致,可参考社长和刘博撰写的博文(http://sobereva.com/586http://bbs.keinsci.com/thread-19009-1-1.html)。编译完成后可得到psmp版本的CP2K。可能在编译途中遇到报错,先检查对应库的源码压缩包是否下载成功,若不成功可到https://www.cp2k.org/static/downloads/去下载对应包,放到toolchain/build中即可。


已知问题 & 讨论 & 其他碎碎念

1. 之所以要用toolchain  +  GNU compiler  +  Intel MPI的组合,是因为这样的组合在CP2K 8.2上测试计算速度是最快的(非严谨测试,非常期待各位有条件的老师进行更严谨的测试)
2. 在CP2K 8.2使用toolchain默认elpa库时会遇到bug(详见:http://bbs.keinsci.com/thread-25553-1-1.html),可以通过更改toolchain/scripts/stage5/install_elpa.sh并使用elpa-2021.05.002_bugfix来解决,并不一定要放弃elpa带来的速度提升。目前来看该问题在上述9.1版本中已经不存在。
3. 更改install_intelmpi.sh是因为该脚本错误设置编译器为Intel编译器而非GNU编译器。
4. 在CP2K 8.2上发现使用Intel Parallel Studio XE 2020 Update 2的Intel MPI时有内存泄漏问题,无意间发现直接使用2017U8版本的Intel MPI无内存泄漏问题,程序运行正常。按照上述步骤编译的9.1同样可使用2017U8的MPI。
5. 在CP2K 8.2上发现无论使用2020U2的Intel MPI还是2017U8的Intel MPI,均会引起一CPU内核调度问题,即在启动一Intel MPI并行的程序(例如CP2K)后,若再启动一Intel MPI程序有概率会出现两个不同程序MPI进程跑在一个核心上。但是一Intel MPI程序和一OpenMPI程序同时跑无此问题,两个OpenMPI程序也无此问题。
6. 在CP2K 8.2上发现使用Intel Parallel Studio XE 2017 Update 8的Intel MPI时,使用机器物理核心数(36核并行)来并行速度远慢于较低的核心数(例如24核或者32核并行)。推测问题5.6.可能是由于CPU为工程版(Gold 6139ES)引起。


作者
Author:
达斯维达尼亚    时间: 2022-4-23 17:39
您好,我最近也在用Centos7系统编译CP2K9.1,昨天看了您的帖子安装,前期都挺顺利的,但是在make阶段,一直出现“f951: Fatal Error: Reading module ‘elpa_constants’ at line 1 column 2: Unexpected EOF”错误,反复检查确认文件格式也没有解决,想请问一下您编译的过程中有出现类似的错误吗?或者能够分享一下您编译成功的elpa_constants.F90文件版本吗?谢谢!

作者
Author:
DoorBell    时间: 2022-5-16 19:07
达斯维达尼亚 发表于 2022-4-23 17:39
您好,我最近也在用Centos7系统编译CP2K9.1,昨天看了您的帖子安装,前期都挺顺利的,但是在make阶段,一直 ...

好像没有印象遇到过这种错误...
编译的临时文件夹lib、obj都删掉了,我好像没有找到这个F90文件?
作者
Author:
zhukangg    时间: 2022-5-31 12:40
达斯维达尼亚 发表于 2022-4-23 17:39
您好,我最近也在用Centos7系统编译CP2K9.1,昨天看了您的帖子安装,前期都挺顺利的,但是在make阶段,一直 ...

您好,您的这个问题解决了吗
作者
Author:
达斯维达尼亚    时间: 2022-8-26 15:52
zhukangg 发表于 2022-5-31 12:40
您好,您的这个问题解决了吗

没有 但换了个方法编译出来了。
作者
Author:
scottwu    时间: 2022-10-14 00:05
刚重装的2022.2版,安装流程大致相同,但是遇到点坑,再此提醒,希望后面装新版的人可以避免。
1. 不需要把mpiicc改成mpicc,以及不需要把mpiifort改成mpif90,否则make阶段libxsmm模块会出问题
2. 需要再加一个关键词--with-intel=no,否则quip库无法安装,因为安装脚本里是不允许intel编译器的
作者
Author:
Aridea    时间: 2023-6-15 07:10
scottwu 发表于 2022-10-14 00:05
刚重装的2022.2版,安装流程大致相同,但是遇到点坑,再此提醒,希望后面装新版的人可以避免。
1. 不需要 ...

请问这种编译方法 和openmpi编译的计算速度差别多少呢




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3