cp2k安装教程

您现在的位置是:首页 > 软件环境 > 正文

软件环境

cp2k安装教程

三米哥2022-12-03软件环境530725
sudoaptinstallcp2k是显然不够用的编译一个软件,需要分为多个环节.基础的是编译软件本身,其次是加入GPU的支持,最后是和其他软件进行耦合.首先我们先来编译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安装教程  第1张

这里提到了指定机器架构的问题. 接下来我们就可以开始编译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含义可以在手册中找到:

cp2k安装教程  第2张

这里有一个哲学问题, 就是mpi 8跑得快, 还是mpi 4 openmp 2跑得快. 我不确定所以只编译了poptpsmp.

评论区说, 现在只会编译出psmp, popt是psmp的软链, 所以只选一个就好

最后, 编译出来的文件在cp2k/exe/local下:

cp2k安装教程  第3张

很有意思的是, 即便选择了popt, 也只编译出来了psmp,而通过软链产生了新的popt. 创建一个软链, 将可执行文件链接到环境变量的文件夹. Done.

最后执行sudo apt uninstall cp2k...

测试

对于编译出来的二进制文件, 建议进行一下回归测试, 以确保各个功能正常. 回到cp2k的根目录, 也就是exe文件夹的上级, 执行:

make -j8 ARCH=local VERSION="psmp" test

这里的ARCHVERSION和安装时一致, 只是最后增加了test, 测试完成后, 可以查看相应报告:

cp2k安装教程  第4张