|
本帖最后由 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窗口中执行命令:
- export PATH=/opt/apps/GCC_840/bin:$PATH
- export LD_LIBRARY_PATH=/opt/apps/GCC_840/lib64:$LD_LIBRARY_PATH
- export LD_LIBRARY_PATH=/opt/apps/GMP_620/lib:$LD_LIBRARY_PATH
- export LD_LIBRARY_PATH=/opt/apps/MPFR_410/lib:$LD_LIBRARY_PATH
- 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安装方法相对简单,启动安装程序之后正常完成安装即可,个人是选择安装了所有组件。安装完成后执行命令:
- source /opt/apps/intel/20.2/compilers_and_libraries_2020.2.254/linux/mkl/bin/mklvars.sh intel64
- 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编译器的环境变量,类似如下所示:
- mpigcc for the Intel(R) MPI Library 2019 Update 8 for Linux*
- Copyright 2003-2020, Intel Corporation.
- Using built-in specs.
- COLLECT_GCC=gcc
- COLLECT_LTO_WRAPPER=/opt/apps/GCC_840/libexec/gcc/x86_64-pc-linux-gnu/8.4.0/lto-wrapper
- Target: x86_64-pc-linux-gnu
- 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
- Thread model: posix
- gcc version 8.4.0 (GCC)
- mpigxx for the Intel(R) MPI Library 2019 Update 8 for Linux*
- Copyright 2003-2020, Intel Corporation.
- Using built-in specs.
- COLLECT_GCC=g++
- COLLECT_LTO_WRAPPER=/opt/apps/GCC_840/libexec/gcc/x86_64-pc-linux-gnu/8.4.0/lto-wrapper
- Target: x86_64-pc-linux-gnu
- 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
- Thread model: posix
- gcc version 8.4.0 (GCC)
- mpif90 for the Intel(R) MPI Library 2019 Update 8 for Linux*
- Copyright 2003-2020, Intel Corporation.
- Using built-in specs.
- COLLECT_GCC=gfortran
- COLLECT_LTO_WRAPPER=/opt/apps/GCC_840/libexec/gcc/x86_64-pc-linux-gnu/8.4.0/lto-wrapper
- Target: x86_64-pc-linux-gnu
- 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
- Thread model: posix
- 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文件夹中运行命令:
- ./install_cp2k_toolchain.sh \
- --math-mode=mkl \
- --with-intelmpi=system \
- --with-scalapack=no \
- --with-sirius=no \
- --with-plumed=install
- cp ./install/arch/* ../../arch/
- source ./install/setup && cd ../..
- make -j ARCH=local VERSION="psmp"
复制代码 之后的步骤与一般用toolchain编译CP2K一致,可参考社长和刘博撰写的博文(http://sobereva.com/586 和 http://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)引起。
|
评分 Rate
-
查看全部评分 View all ratings
|