“Let’s go!”
前言
这个记录是两年前写的,当时考虑到CP2K计算速度快,而且免费,就打算编译一个以备不是之需,但后面安装过程十分坎坷,陆陆续续花了大约一周的时间,把CP2K的所有插件全安装成功了,以下是当时使用Markdown记录的编译安装成功的过程。
准备工作
这里选取的版本是 CP2K v2022.2,CP2K 对于很多编译器是不支持的,有的会编译不通过,有的或许编译通过了但是测试结果不可靠。所以要选取官网明确标明完全支持的编译器,这在官网的Compiler support界面有详细信息。
编译器选择
gcc编译器
这里选取的gcc版本是gcc8.3.0,可以使用命令查询。
1
gcc --version
如果版本太低了的话需要升级。学校超算系统默认gcc太低了,好在已经提供了更高版本的gcc,可以使用命令将已经安装成功的gcc导入。
1
module load 7/compiler/gnu_8.3.0
这样再使用命令查看版本确实变成了8.3.0。
intel编译器
之所以选取intel编译器是因为我们需要安装IntelMKL数学库,这个库只能用Intel编译器来编译,学校超算上也提供了Intel的编译器,选取一个CP2K支持的版本导入。
1
module load 7/compiler/intel_2019.5
如果没有的话,就需要自己去Intel官网下载一个版本支持的编译器安装在用户目录下,都是图形化界面,没什么好说的。
依赖库准备
MKL数学库
CP2K默认情况下会使用OpenBlAS库,据说OpenBLAS的LAPACK子程序效率没有Intel的MKL库好(但我并未实测),因此在这里我们选用MKL库。 这个库一般来说其实不用自己装,在超算上导入Intel编译器后就会自己导入了。如果也没有的话,就去官网下载安装。
安装CP2K的依赖库
CP2K的依赖库非常之多(差不多二十几种),这也是其被称为最难编译的软件的原因。如果自己一个一个编译不知道要弄到何时,好在官方提供了一个安装脚本toolchain,其路径为/cp2k/tools/toolchain/install_cp2k_toolchain.sh,可以通过下列命令查看其详细说明。
1
./install_cp2k_toolchain.sh -h
在这里我选择全部安装了,也就是用下列命令。
1
./install_cp2k_toolchain.sh --install-all --mpi-mode=openmpi --math-mode=mkl --with-gcc=system --with-scalapack=no --no-check-certificate
如果顺利的话,这个版本是可以直接下载成功并自动安装的,之前在安装v2023.1版本时,参数--no-check-certificate是不起作用的,导致碰到个库就会下载失败,要手动进入build目录用wget下载。
尽管有这个脚本在,安装过程中还是会碰到好多事情,有各种各样的事情。之前我是听说InteMPI速度会比使用OpenMPI快,所以选择用Intel编译器去编译所有的库的,但是在安装COSMA库时,会有问题无法解决,只能够舍弃这个库,类似的还有其他库并不支持Intel编译器。最后还是选择的OpenMPI,就没有到这么多事情了。当然期间还是会碰到一些其他难以预料的事情,比如cmake编译某个库时警告,说某个文件时间与系统时间不一致,可能导致编译不完整。当时我选择重新编译这个库,于是就把install中的库文件删除重新运行上述命令。结果很顺利,但在下一步遇到了一个更复杂的问题。
编译、安装、测试
编译本体
当所有库全部安装完毕后,会有提示下一步怎么做。也就是运行如下命令
1
2
3
4
cp install/arch/* ../../arch/
source install/setup
cd ../../
make -j 8 ARCH=local VERSION="ssmp psmp"
然后就是漫长的编译时间了,大约四五十分钟(具体时间取决于机器性能)。
添加环境变量
命令如下
1
2
3
vim ~/.bashrc
source (path)cp2k/tool/toolchina/install/setup
export PATH="(path)/cp2k/exe/local"
这里的(path)是指cp2k路径
1
source ~/.bashrc
测试结果的可靠性
命令如下
1
2
cd cp2k/
make -j test
大约四五十分钟,结果有少量错误也是没问题的,至此CP2K就算安装完成了。
提交任务
命令如下
1
cp2k.popt cp2k.inp 1>cp2k.out 2>cp2k.err
后记
虽然过程非常简单,但是每一台机器的环境不同,编译参数设置的会有所不同,不然很难编译通过,这些参数也只是学校集群的环境摸索出来的,不同机器实际运行环境天差地别,这些参数也只是仅供参考。