cp2k安装教程
sudo apt install cp2k 是显然不够用的
编译一个软件, 需要分为多个环节. 基础的是编译软件本身, 其次是加入GPU的支持, 最后是和其他软件进行耦合. 首先我们先来编译cp2k本身.
A 基础安装
A.1 下载代码
先从GitHub上下载代码, 这里用到的是8.2, 用tar -jxvf cp2k-8.2.tar.bz2
解压.
A.2 前提条件
首先使用工具链脚本去编译所需要的库. 对于最基本的安装, 我们只需要调用
cd tools/toolchain/
./install_cp2k_toolchain.sh
这里会用本机的gcc 和 mpi来完成编译(Ubuntu直接apt install build-essential安装全部套件就行). 进阶的要求可以参考文件夹下的README. 一定要先看./install_cp2k_toolchain.sh --help
! 最后编译完成后会显示:
这里提到了指定机器架构的问题. 接下来我们就可以开始编译cp2k了
A.2.1 问题
我在直接执行这个脚本的时候遇到一个问题, 就是编译scalapack的时候报错:
Non-zero exit code detected.
-- Error Output:
/home/linuxbrew/.linuxbrew/bin/ld: CMakeFiles/xintface.dir/Cintface.c.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
这个错误可能是gcc版本过高导致的. 由于明确是某个lib有问题, 因此我使用系统的包管理器直接安装了一个lib, 然后将其连接到自己安装的lib上
brew install scalapack
brew list scalapack
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/home/linuxbrew/.linuxbrew/Cellar/scalapack/2.1.0_4/lib
./install_cp2k_toolchain.sh --with-scalapack=system
如果没有加入动态库查找路径, 会告诉你:
ERROR: (./scripts/stage4/install_scalapack.sh) ld cannot find -lscalapack, please check if ScaLAPACK is installed or in system search path
ERROR: (./scripts/stage4/install_scalapack.sh, line 76) Non-zero exit code detected.
你拿ld -lscalapack --verbose
一查, 发现.so文件压根不在查找列表里, 就会很自然地用export指定环境变量, 然后再执行.sh --with-scalapck=system就可以了. (实践证明这个方法四部并不一定奏效, 虽然所有博客都会这么说. 我最后的解决办法是将.so文件软连接到/usr/lib下)
A.3 编译cp2k
按照工具链脚本最后的要求, 首先先将架构文件拷贝到根目录下的arch文件夹:
cp /home/roy/work/cp2klearn/cp2k-8.2/tools/toolchain/install/arch/* /home/roy/work/cp2klearn/cp2k-8.2/arch
我们需要用工具链脚本编译的各种库, 所以先假如环境变量:
source /home/roy/work/cp2klearn/cp2k-8.2/tools/toolchain/install/setup
最后换到根目录下, 开始编译:
make -j8 ARCH=local VERSION="psmp"
这里的VERSION
含义可以在手册中找到:
这里有一个哲学问题, 就是mpi 8跑得快, 还是mpi 4 openmp 2跑得快. 我不确定所以只编译了popt
和psmp
.
评论区说, 现在只会编译出psmp, popt是psmp的软链, 所以只选一个就好
最后, 编译出来的文件在cp2k/exe/local
下:
很有意思的是, 即便选择了popt
, 也只编译出来了psmp
,而通过软链产生了新的popt
. 创建一个软链, 将可执行文件链接到环境变量的文件夹. Done.
最后执行sudo apt uninstall cp2k...
测试
对于编译出来的二进制文件, 建议进行一下回归测试, 以确保各个功能正常. 回到cp2k的根目录, 也就是exe文件夹的上级, 执行:
make -j8 ARCH=local VERSION="psmp" test
这里的ARCH
和VERSION
和安装时一致, 只是最后增加了test
, 测试完成后, 可以查看相应报告: