计算化学公社

 找回密码 Forget password
 注册 Register
Views: 976|回复 Reply: 42
打印 Print 上一主题 Last thread 下一主题 Next thread

[CP2K] 利用cmake编译和安装CP2K

[复制链接 Copy URL]

76

帖子

0

威望

414

eV
积分
490

Level 3 能力者

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 UW_0728. 于 2026-1-22 00:50 编辑

从版本2026.1开始,CP2K的编译将全面转为cmake,彻底放弃原有的GNU makefile和相应的arch文件集。个人感觉在cmake下编译比传统的编译模式报错概率更低一点。然而,目前toolchain尚未实现针对自定义的配置设计合适的cmake指令,因此只能自己根据CMakeLists.txt里面的选项逐个添加与既有toolchain配置相对应的到命令行中,比较麻烦,且开发者貌似并不打算解决这一点;另外,目前无法通过cmake同时编译ssmp和psmp(检测出MPI就只编译psmp,否则只编译ssmp),且编译成的程序没有相应的符号链接sopt和popt,不过这不算什么大问题,毕竟psmp同时支持MPI和OpenMP并行,只要设置OMP_NUM_THREADS为物理核心数且不用mpirun指令就相当于运行ssmp,只要export OMP_NUM_THREADS=1 并利用mpirun -np N (N为并行核数)运行就相当于运行popt了。

接下来讲一讲从cmake编译CP2K可执行文件的基本步骤:(假设为root用户,使用2026.1版本;更早版本用传统模式编译更省事一点)

1. 按照社长的文章(http://sobereva.com/586)正常完成toolchain工具链安装步骤,然后执行source /root/CP2K/src/cp2k-2026.1/tools/toolchain/install/setup

2. 切到cp2k源码目录,执行mkdir build && cd build,进入构建和编译专用目录。

3. 运行构建指令。如上所述,这里需要手动输入构建选项。假如完全按照社长文章里的选项配置好toolchain,那么你所需要的cmake命令为:
cmake .. -DCMAKE_INSTALL_PREFIX=../install -DCP2K_USE_MPI=ON -DCP2K_USE_FFTW3=ON -DCP2K_USE_LIBINT2=ON -DCP2K_USE_LIBXC=ON -DCP2K_USE_SPGLIB=ON -DCP2K_USE_VORI=ON -DCP2K_USE_COSMA=ON -DCP2K_USE_ELPA=ON -DCP2K_USE_LIBXSMM=ON -DCP2K_USE_PLUMED=ON -DCP2K_DATA_DIR=/root/CP2K/src/cp2k-2026.1/data

这里包括toolchain默认安装的,以及根据自己的设置选择多安装或不安装的包。命令中的-DCMAKE_INSTALL_PREFIX 设置到自己想安装到的路径(可以使用相对路径;为省事我直接设置在了父目录下的一个新文件夹;如果不设置,默认将为/usr/local)。由于OpenBLAS是强制性的、Scalapack在有MPI的情况下是强制性的,因此无论如何它们都会被检查,这里无需写出。之所以特别设置-DCP2K_DATA_DIR=/root/CP2K/src/cp2k-2026.1/data是因为cmake构建系统安装好后默认读取基组的位置是${CMAKE_INSTALL_PREFIX}/shared/cp2k/data,会导致编译时生成与/root/CP2K/src/cp2k-2026.1/data内容完全重复的/root/CP2K/src/cp2k-2026.1/install/shared/cp2k/data目录,加上这一设置可以避免这一问题(但注意这里不能使用相对路径)

4. 构建完成后,运行
make install -jN,N是并行核数。

5. 写入以下三行至~/.bashrc中以添加环境变量:
export PATH=$PATH:/root/CP2K/src/cp2k-2026.1/install/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/CP2K/src/cp2k-2026.1/install/lib64
source /root/CP2K/src/cp2k-2026.1/tools/toolchain/install/setup


6. 如果硬盘有点吃紧,可以
删除该build文件夹(或者不删除但在build目录内执行make clean)以腾出部分空间。

评分 Rate

参与人数
Participants 3
eV +10 收起 理由
Reason
北大-陶豫 + 5
牧生 + 2 终于装上2025.2了
LittlePupil + 3 谢谢分享

查看全部评分 View all ratings

76

帖子

0

威望

414

eV
积分
490

Level 3 能力者

43#
 楼主 Author| 发表于 Post on yesterday 16:50 | 只看该作者 Only view this author
kogareru1z 发表于 2026-1-22 16:49
太奇怪了,我重启电脑又在另一个目录进行测试,发现当我添加LEVEL_SHIFT 0.5关键词后,计算耗时就大幅 ...

应该是编译问题,能级移动设置不应该显著影响SCF计算速度

14

帖子

0

威望

127

eV
积分
141

Level 2 能力者

42#
发表于 Post on yesterday 16:49 | 只看该作者 Only view this author
UW_0728. 发表于 2026-1-22 15:48
我简单试了下,没有这样的问题:(我看到你发的另一个帖子里面带的输出显示了)
怀疑是你编译或者编译环 ...


太奇怪了,我重启电脑又在另一个目录进行测试,发现当我添加LEVEL_SHIFT 0.5关键词后,计算耗时就大幅增加,很诡异

76

帖子

0

威望

414

eV
积分
490

Level 3 能力者

41#
 楼主 Author| 发表于 Post on yesterday 15:48 | 只看该作者 Only view this author
本帖最后由 UW_0728. 于 2026-1-22 15:51 编辑

我简单试了下,没有这样的问题:(我看到你发的另一个帖子里面带的输出显示了)
  1. SCF WAVEFUNCTION OPTIMIZATION

  2.   Step     Update method      Time    Convergence         Total energy    Change
  3.   ------------------------------------------------------------------------------
  4.      1 NoMix/Diag. 0.40E+00   32.6     0.70457347    -38566.0388841912 -3.86E+04
  5.      2 Broy./Diag. 0.40E+00   38.6     1.56786457    -38770.3746255539 -2.04E+02
  6.      3 Broy./Diag. 0.40E+00   38.2     1.34567754    -38569.9193082223  2.00E+02
复制代码
怀疑是你编译或者编译环境的问题

14

帖子

0

威望

127

eV
积分
141

Level 2 能力者

40#
发表于 Post on yesterday 13:25 | 只看该作者 Only view this author
UW_0728. 发表于 2026-1-22 12:43
没遇到。输入文件发来我再测一测

这是输入文件

opt_bri.inp

21.74 KB, 下载次数 Times of downloads: 1

输入文件

76

帖子

0

威望

414

eV
积分
490

Level 3 能力者

39#
 楼主 Author| 发表于 Post on yesterday 12:43 | 只看该作者 Only view this author
kogareru1z 发表于 2026-1-22 10:25
请问各位有遇到cp2k2026.1版的性能问题吗?我发现对于同一个任务同样的设置,最新版的scf从第二步开始的耗 ...

没遇到。输入文件发来我再测一测

14

帖子

0

威望

127

eV
积分
141

Level 2 能力者

38#
发表于 Post on yesterday 10:25 | 只看该作者 Only view this author
请问各位有遇到cp2k2026.1版的性能问题吗?我发现对于同一个任务同样的设置,最新版的scf从第二步开始的耗时是2025.2版的4倍以上,参考的是sob老师的教程且我自己也编译了mkl版,结果都是一样,很不解

76

帖子

0

威望

414

eV
积分
490

Level 3 能力者

37#
 楼主 Author| 发表于 Post on 前天 17:01 | 只看该作者 Only view this author
本帖最后由 UW_0728. 于 2026-1-21 17:12 编辑
乐平 发表于 2026-1-21 16:08
并不是 “而非编译后未安装时的路径”

cmake --build build -j 32

"cmake --build build -j N"后其实还有一步"cmake --install build",执行了这一步带"--install"的指令才会安装到${CMAKE_INSTALL_PREFIX}所指的地方,只是这个指令CP2K手册里没有提及而已(附:cmake --install指令无法也无需带-j)。多做一步install是为了编译和安装后(如果硬盘空间吃紧)可以直接把build目录删除掉(或者不删掉但执行make clean),能节省出1GB左右的空间。
另外注意cmake执行后build目录里是生成了Makefile的(但是显然不是之前的GNU Makefile的格式),因此make指令完全可以用,切到build目录下(cd build)就可以用了;在此情况下,"make -j N"等价于"cmake --build . -j N";"make install -j N"等价于"cmake --build . -j N && cmake --install ."。

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
hebrewsnabla + 1 我很赞同

查看全部评分 View all ratings

1150

帖子

0

威望

4377

eV
积分
5527

Level 6 (一方通行)

36#
发表于 Post on 前天 16:08 | 只看该作者 Only view this author
本帖最后由 乐平 于 2026-1-21 16:30 编辑
UW_0728. 发表于 2026-1-21 16:02
这里指的是install之后的路径,而非编译后未安装时的路径。

我没加那些OFF的选项,但也没出任何问题

并不是 “而非编译后未安装时的路径”

cmake --build build -j 32

之后,在 ~/cp2k-2026.01/build/bin 目录下就是

  1. cp2k.psmp              dbt_unittest.psmp          graph.psmp          gx_ac_unittest.psmp             nequip_unittest.psmp
  2. dbm_miniapp.psmp       dumpdcd.psmp               grid_miniapp.psmp   libcp2k_unittest.psmp           parallel_rng_types_unittest.psmp
  3. dbt_tas_unittest.psmp  gemm_square_unittest.psmp  grid_unittest.psmp  memory_utilities_unittest.psmp  xyz2dcd.psmp
复制代码



另外,我发现您最后编译用的是 make install -jN, 而不是您标题里说的 cmake


而 CP2K-2026.01 推荐的 cmake 是
  1. ========================== usage =========================
  2. Done!
  3. To use the installed tools and libraries and cp2k version
  4. compiled with it you will first need to execute at the prompt:
  5.   source /public/apps/cp2k/202601/tools/toolchain/install/setup

  6. If you invoked the toolchain with --install-all then you can proceed to build cp2k like this:
  7.   cd cp2k/
  8.   cmake -S . -B build -DCP2K_USE_EVERYTHING=ON -DCP2K_USE_DLAF=OFF -DCP2K_USE_PEXSI=OFF
  9.   cmake --build build -j 32

  10. If you installed only some packages then you'll have to assemble the matching cmake command yourself.
  11. For available build options see: https://manual.cp2k.org/trunk/getting-started/build-from-source.html
复制代码


您最终稿的编译跟您前面写的一大段完全背道而驰了……

76

帖子

0

威望

414

eV
积分
490

Level 3 能力者

35#
 楼主 Author| 发表于 Post on 前天 16:02 | 只看该作者 Only view this author
本帖最后由 UW_0728. 于 2026-1-21 16:03 编辑
乐平 发表于 2026-1-21 12:07
谢谢讨论
感觉 CP2K 用来 cmake 之后把编译弄得更复杂了。
从 issue 里反馈的信息来看,需要根据报错把 ...
另外,我没有指定 -DCMAKE_INSTALL_PREFIX= 参数,编译之后 CP2K 可执行程序放在 ~/cp2k-2026.01/build/bin 目录下了。而不是您说的 /usr/local 目录下。
这里指的是install之后的路径,而非编译后未安装时的路径。

将所有没有在 toolchain 里预先安装的库都需要 OFF 掉。
我没加那些OFF的选项,但也没出任何问题

1150

帖子

0

威望

4377

eV
积分
5527

Level 6 (一方通行)

34#
发表于 Post on 前天 12:07 | 只看该作者 Only view this author
本帖最后由 乐平 于 2026-1-21 12:18 编辑
UW_0728. 发表于 2026-1-20 11:26
那个Issue有回复了
顺带一提,如果cmake环节出错而重新构建时,cmake默认会在考虑新构建选项的同时从失 ...

谢谢讨论
感觉 CP2K 用来 cmake 之后把编译弄得更复杂了。
从 issue 里反馈的信息来看,需要根据报错把该补上的参数都补上,而参数均来自下面的链接里各个库
https://manual.cp2k.org/trunk/technologies/libraries.html

根据上面的链接,将所有没有在 toolchain 里预先安装的库都需要 OFF 掉。

我预先编译的库有
  1. ./install_cp2k_toolchain.sh --with-mkl=system --with-gcc=system --with-openmpi=install --with-plumed=install --with-tblite=install --with-hdf5=install
复制代码



我的 cmake 命令是
  1. cmake -S . -B build -DCP2K_USE_MPI=ON -DCP2K_USE_FFTW3=ON -DCP2K_USE_LIBINT2=ON -DCP2K_USE_LIBXC=ON -DCP2K_USE_SPGLIB=ON -DCP2K_USE_VORI=ON -DCP2K_USE_COSMA=ON -DCP2K_USE_ELPA=ON -DCP2K_USE_LIBXSMM=ON -DCP2K_USE_PLUMED=ON -DCP2K_USE_SIRIUS=ON -DCP2K_USE_LIBVDWXC=ON -DCP2K_USE_SIRIUS_DFTD4=ON -DCP2K_USE_DFTD4=ON -DCP2K_USE_TBLITE=ON -DCP2K_USE_HDF5=ON -DCP2K_USE_LIBSMEAGOL=OFF -DCP2K_USE_DEEPMD=OFF -DCP2K_USE_ACE=OFF -DCP2K_USE_LIBTORCH=OFF -DCP2K_USE_MIMIC=OFF -DCP2K_USE_TREXIO=OFF -DCP2K_USE_GREENX=OFF
复制代码



也就是说,需要把没有预先安装的 libsmeagol, DeePMD, ACE, LibTorch, MIMIC,TREXIO, GreenX 这些库都 OFF (命令中最后 7 个)
  1. -DCP2K_USE_LIBSMEAGOL=OFF -DCP2K_USE_DEEPMD=OFF -DCP2K_USE_ACE=OFF -DCP2K_USE_LIBTORCH=OFF -DCP2K_USE_MIMIC=OFF -DCP2K_USE_TREXIO=OFF -DCP2K_USE_GREENX=OFF
复制代码


另外,我没有指定 -DCMAKE_INSTALL_PREFIX= 参数,编译之后 CP2K 可执行程序放在 ~/cp2k-2026.01/build/bin 目录下了。而不是您说的 /usr/local 目录下。


76

帖子

0

威望

414

eV
积分
490

Level 3 能力者

33#
 楼主 Author| 发表于 Post on 3 day ago | 只看该作者 Only view this author
本帖最后由 UW_0728. 于 2026-1-20 11:33 编辑
乐平 发表于 2026-1-19 22:20
跟 GPU 没有任何关系……

如果你在 cp2k 的路径下进入 cmake 目录,里面有 cmake_cp2k.sh 文件,打开 ...

那个Issue有回复了
顺带一提,如果cmake环节出错而重新构建时,cmake默认会在考虑新构建选项的同时从失败的地方继续(类似于新的选项在一定程度上是叠加而非完全覆盖?),因此为保险起见一定要先清空build目录下产生的所有文件(rm -rf *)再执行cmake,以免和残留的缓存文件起冲突;我根据那个回复合理怀疑你没有删旧的缓存文件直接重新cmake导致的出错

1150

帖子

0

威望

4377

eV
积分
5527

Level 6 (一方通行)

32#
发表于 Post on 4 day ago | 只看该作者 Only view this author
UW_0728. 发表于 2026-1-19 19:35
我没出过这样的问题
手册里那个应该是带GPU加速的,对我来说没意义
带个-G Ninja也不知道用处在哪儿

跟 GPU 没有任何关系……

如果你在 cp2k 的路径下进入 cmake 目录,里面有 cmake_cp2k.sh 文件,打开它就能看到
  1. elif [[ "${PROFILE}" == "toolchain" ]] && [[ "${VERSION}" == "psmp" ]]; then
  2.   # TODO Re-enable SIRIUS once performance regression of COSMA is fixed:
  3.   # https://github.com/cp2k/cp2k/issues/4663
  4.   cmake \
  5.     -GNinja \
  6.     -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
  7.     -DCP2K_USE_EVERYTHING=ON \
  8.     -DCP2K_USE_DLAF=OFF \
  9.     -DCP2K_USE_PEXSI=OFF \
  10.     -DCP2K_USE_SIRIUS=OFF \
  11.     -Werror=dev \
  12.     .. |& tee ./cmake.log
  13.   CMAKE_EXIT_CODE=$?
复制代码

76

帖子

0

威望

414

eV
积分
490

Level 3 能力者

31#
 楼主 Author| 发表于 Post on 4 day ago | 只看该作者 Only view this author
dahai7719 发表于 2026-1-19 07:54
因为用tootchain安装后(--with-dftd4=install),到了Cmake的时候会出现同样的出错问题,找不到dftd4的安 ...

加--with-dftd4和--with-dftd4=install没有区别。有可能你toolchain一步没弄成功就急着编译CP2K了,注意运行toolchain脚本安装依赖过程中的提示

76

帖子

0

威望

414

eV
积分
490

Level 3 能力者

30#
 楼主 Author| 发表于 Post on 4 day ago | 只看该作者 Only view this author
Qilin 发表于 2026-1-13 15:41
把下面三行直接写入 `~/.bashrc` 会把初学者拐带坏的。再不济也应该写入 `~/env/cp2k_2026.1.env`。
```
...

单另写个环境变量文件多此一举,我又没有区分不同环境的需要,需要区分不同环境的应该也不是初学者水平了,要么就是计算集群
在自己的个人电脑上开root用户完全可行,没有权限限制,畅行无阻,我也没有因为用root把系统搞不对劲过

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-1-23 21:33 , Processed in 0.222908 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list