计算化学公社

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

[CP2K] [实测] 双路 EPYC 9B45 上 CP2K 2026.2 十种编译栈与五种并行布局对比

[复制链接 Copy URL]

912

帖子

39

威望

5648

eV
积分
7340

Level 6 (一方通行)

本帖最后由 ggdh 于 2026-8-4 15:56 编辑

双路 AMD EPYC 9B45 上 CP2K 2026.2 编译与性能横评
10 种可用编译栈,5 种 MPI/OpenMP 布局,4 类负载,800 次直接实测





先说结论
1. 综合表现最好的通用版本是 G3:GCC 14.4 + Intel MPI 2021.18 + OpenBLAS 0.3.33,推荐从 64 MPI x 4 OpenMP 起步。
2. DBCSR 小矩阵稀疏乘法专项最快的是 A1:GCC 14.4 O3 + MPICH 5.0.1 + pure AOCL 5.3,最佳布局为 32 x 8。
3. 256 x 1 的纯 MPI 布局在本组测试中没有赢过;128 x 2 普遍好于 256 x 1,但多数完整 CP2K 负载继续减至 64 x 4 更快。
4. MKL 版本在本机并非普遍占优,尤其 DBCSR 明显落后;数学库优劣高度依赖具体负载。
5. ifx 编译的版本虽然能够正常退出并报告 SCF 收敛,但多线程 HFX 重复计算能量不稳定,因此没有进入性能排名。

一、测试目的与比较口径

这次测试的目标不是做严格的单因素因果分析,而是在同一台节点上寻找实际可用且最快的完整 CP2K 软件栈。因此编译器、MPI、数学库、优化级别和 MPI Fortran 接口允许同时变化。表中的结论可以说明“G3 这个完整版本比 N1 快”,但不能把全部差异单独归因于 Intel MPI、OpenBLAS 或某一个编译选项。



所有进入最终排名的版本均使用同一组输入、相同物理核心数、相同绑核原则、相同计时和重复策略,并先通过多线程 HFX 正确性门槛。



二、硬件与系统条件

项目实测条件
处理器2 x AMD EPYC 9B45 128-Core Processor
核心与线程每路 128 核,共 256 个物理核;SMT 关闭,Thread(s) per core = 1
NUMA2 个 NUMA node;CPU 0-127 属于 NUMA 0,CPU 128-255 属于 NUMA 1
缓存L1d 12 MiB,L1i 8 MiB,L2 256 MiB,L3 1 GiB(lscpu 汇总值)
内存754 GiB 可见内存,4 GiB swap;测试前无内存压力
操作系统Rocky Linux 9.5,kernel 5.14.0-503.23.2.el9_5.x86_64
CPU 频率策略amd-pstate,governor = performance,boost enabled
CP2KCP2K 2026.2,source revision c92cc08


三、参与排名的十个完整软件栈

ID编译器及优化MPI数学库关键区别
G0GCC 11.5,O2,mtune=nativeOpenMPI 5.0.10OpenBLAS 0.3.33最初的 GNU 基线版本
G1GCC 14.4,O2,mtune=znver5OpenMPI 5.0.10OpenBLAS 0.3.33升级 GCC 的 OpenMPI 版本
G2GCC 14.4,O2,mtune=znver5MPICH 5.0.1OpenBLAS 0.3.33与 G1 主要区别为 MPI
G3GCC 14.4,O2,mtune=znver5Intel MPI 2021.18OpenBLAS 0.3.33MPI_F08=OFF 兼容构建;综合冠军
G4GCC 14.4,O2,mtune=znver5MPICH 5.0.1AOCL 5.3 路线运行时仍含 OpenBLAS,不是 pure AOCL
G5GCC 14.4,O2,mtune=znver5MPICH 5.0.1Intel MKL 2026.1早期 MKL 路线
N1GCC 14.4,O3,march/mtune=znver5MPICH 5.0.1OpenBLAS 0.3.33Binutils 2.46.1;受控 GNU 基线
A1GCC 14.4,O3,march/mtune=znver5MPICH 5.0.1pure AOCL 5.3无 OpenBLAS 污染;DBCSR 冠军
M0GCC 14.4,O3,march/mtune=znver5MPICH 5.0.1OpenBLAS 0.3.33与 N1 相近,但 MPI_F08=OFF
K1GCC 14.4,O3,march/mtune=znver5MPICH 5.0.1Intel MKL 2026.1受控 O3 MKL 版本


G1、G2、G4 和 G5 的有效编译 flags 是 O2 + mtune=znver5;N1、A1、M0 和 K1 使用 O3 + march=znver5 + mtune=znver5,并在私有构建环境中统一使用 GNU Binutils 2.46.1。这里按实际 toolchain.env 记录,而不是只根据安装目录名称推断。



四、测试负载

简称输入与主要计算特征主要压力
GGAH2O-gga.inp;64 个水分子(192 原子),PBE/GPW,280 Ry,10 步 NVE MD常规 Quickstep DFT、SCF、FFT 和力计算
HybridH2O-hyb.inp;64 个水分子,PBE0-like 25% HF,ADMM,截断 HFX,单点 ENERGY多线程精确交换、积分与通信
Diagonalizationdiag_cu144_broy.inp;有效 144 个 Cu 原子,PBE+rVV10,标准对角化、Broyden mixing、电子展宽ScaLAPACK/ELPA、稠密线性代数与通信
DBCSRdbcsr.inp;3 组 12800-13800 阶稀疏块矩阵乘法,稀疏度 0.70,每组循环 3 次DBCSR、小块矩阵 kernel 与线程并行


五、运行、绑核与统计方法

  • 测试五种占满 256 个物理核的布局:256x1、128x2、64x4、32x8、16x16,其中前一数字为 MPI rank 数,后一数字为每 rank 的 OpenMP thread 数。
  • 每个“负载 x 编译版本 x 布局”重复 4 次,并轮换版本运行顺序,降低固定顺序与温度漂移造成的偏差。
  • 共 4 x 10 x 5 x 4 = 800 次有效运行,形成 200 个独立比较单元;每个单元均有 4 次有效值,无超时、异常退出或缺项。
  • 表中报告 CP2K 自身计时器的中位数,单位为秒;wall time 同时留档但不用于主排名。
  • 每次运行前要求节点 idle 不低于 95%,且没有其他 cp2k.psmp 进程;测试前后记录 Tctl。
  • 数学库内部线程固定为 1,避免 BLAS 再嵌套开线程。


统一 OpenMP 和数学库环境:
  1. export OMP_NUM_THREADS=<threads>
  2. export OMP_PLACES=cores
  3. export OMP_PROC_BIND=close
  4. export OMP_STACKSIZE=512M
  5. export OPENBLAS_NUM_THREADS=1
  6. export BLIS_NUM_THREADS=1
  7. export MKL_NUM_THREADS=1
  8. export MKL_DYNAMIC=FALSE
  9. ulimit -s unlimited
  10. ulimit -n 65536
复制代码


MPI 外层绑定:
  1. # OpenMPI
  2. mpiexec -n <ranks> --map-by ppr:<ranks>:node:PE=<threads> --bind-to core

  3. # MPICH
  4. mpiexec -n <ranks> -bind-to core:<threads>

  5. # Intel MPI
  6. export I_MPI_PIN=1
  7. export I_MPI_PIN_DOMAIN=omp
  8. export I_MPI_PIN_ORDER=compact
  9. mpiexec -n <ranks> -ppn <ranks>
复制代码


三种 MPI 的命令语法不同,但在节点名称上已经验证为相同的无重叠物理核覆盖。以 64x4 为例,rank r 获得 CPU 4r 到 4r+3,四个 OpenMP worker 各自固定在其中一个单核 affinity mask;256 个线程合计覆盖 CPU 0-255,没有重复占核或迁移。



六、正确性门槛

性能测试前,所有候选版本先在 64x4 下重复运行 5 次 Hybrid 输入。要求 5 次均正常结束、SCF 收敛、能量重复跨度不超过 1e-10 Ha,同时相对 GNU 受控基准的最大偏差不超过 1e-7 Ha。十个入选版本全部通过。



检查项目最终结果
最终矩阵 GGA 能量总跨度2.728e-12 Ha
最终矩阵 Hybrid 能量总跨度5.642e-09 Ha,低于 1e-7 Ha 接受线
最终矩阵 Diagonalization 能量总跨度3.638e-12 Ha
ifx I0,64x4 Hybrid 五次跨度1.527e-3 Ha,拒绝
ifx I2(O3)五次跨度3.291e-3 Ha,拒绝
ifx I3(Fortran O2)五次跨度4.012e-4 Ha,拒绝


ifx 问题的范围目前限定为“该版本 CP2K 的多线程 HFX 路径”:单 OpenMP thread、GGA 和 diagonalization 可以稳定,但 KMP_DETERMINISTIC_REDUCTION=true 和把 Fortran 从 O3 降为 O2 都没有修复。由于程序会以 exit code 0 正常退出,这类问题如果只看运行是否结束会被漏掉。



七、完整性能矩阵

下列全部数字均为 4 次有效运行的 CP2K time 中位数,单位为秒。每张表的列顺序一致:256x1、128x2、64x4、32x8、16x16。红色粗体为该负载的全局最快值。



7.1 GGA:64 个水分子 PBE/GPW,10 步 MD
版本256x1128x264x432x816x16
G07.42656.22005.71856.82958.7195
G17.24606.20755.68456.81808.7245
G27.12756.42355.55306.99158.8370
G36.50755.96454.90805.93208.4870
G47.20106.40605.55207.00259.0000
G57.71106.99556.06557.43309.5530
N17.19356.36205.57006.97908.7975
A17.21206.37155.53107.05458.8920
M07.30456.38055.54206.92258.7810
K17.75107.07355.99557.41659.5400


7.2 Hybrid:64 个水分子,25% HF + ADMM
版本256x1128x264x432x816x16
G012.091511.489510.867010.905511.3650
G112.067011.423010.819010.835511.3875
G211.830011.265010.623510.769511.2540
G311.390511.028510.462010.543511.0565
G411.918011.280510.665010.709011.3460
G512.243511.502010.874010.975511.5650
N112.069011.227510.607010.785511.2940
A112.309511.275010.663510.898011.4230
M012.069011.181010.677510.785011.3165
K112.105511.275010.704510.877011.4535


7.3 Diagonalization:144 Cu,PBE+rVV10,标准对角化
版本256x1128x264x432x816x16
G08.60107.54807.57908.315012.0020
G19.23657.62057.70808.397512.3005
G29.85858.81608.37208.603512.8470
G311.18907.25856.64607.568511.3540
G49.76158.70508.40458.922513.5430
G510.41059.37709.401010.337515.4605
N19.95408.56858.18958.335512.5010
A19.63158.52358.28608.653013.2630
M09.69908.60958.18208.301012.4920
K110.34109.28109.320010.051515.1145


7.4 DBCSR:三组稀疏块矩阵乘法
版本256x1128x264x432x816x16
G02.35952.06451.74451.69301.9440
G12.35452.06851.72601.67051.9350
G22.25452.04851.74601.68351.9555
G32.84952.17301.75151.73551.9260
G42.22802.01701.72751.65251.8925
G52.95852.90502.59902.69752.9760
N12.22952.01351.72001.65201.9460
A12.23701.99901.70301.63101.8705
M02.23052.01351.72051.64551.9375
K12.93802.90902.59952.73552.9785


八、冠军、总体排名与结果解释

负载最快组合中位时间第二名相对第二名降时
GGAG3,64x44.9080 sA1,64x4,5.5310 s11.26%
HybridG3,64x410.4620 sN1,64x4,10.6070 s1.37%
DiagonalizationG3,64x46.6460 sG0,128x2,7.5480 s11.95%
DBCSRA1,32x81.6310 sM0,32x8,1.6455 s0.88%


总体排名采用归一化几何平均:每个版本在每类负载中使用自己的最佳布局,再除以该负载的全局最快时间,最后对四个比值取几何平均。1.0 表示四类负载均达到各自全局最快。



排名版本归一化几何平均高于逐负载理想值
1G31.0156471.56%
2G11.0890408.90%
3G01.0929169.29%
4M01.0938059.38%
5A11.0939379.39%
6N11.0947019.47%
7G41.10251010.25%
8G21.10554410.55%
9K11.29147429.15%
10G51.30361130.36%


  • 并行布局:256x1 增加了 MPI 通信和同步开销;128x2 基本全面改善;64x4 对三类完整 CP2K 负载最合适;DBCSR 更偏好 32x8。
  • MPI:三种 MPI 已验证具有等价的物理绑核结果,但通信实现、共享内存路径和集合通信算法仍不同,因此性能不必相同。
  • 数学库:OpenBLAS 与 AOCL 在完整 CP2K 负载中总体接近;MKL 在本机这组 DBCSR 小块矩阵负载上明显较慢。这不是对所有体系或所有 BLAS 尺寸的普遍结论。
  • 优化级别:O3 + march=znver5 并没有自动压倒 O2 版本;G3 的完整栈仍显著领先,说明最终性能是编译器、MPI、数学库、接口和负载共同作用的结果。


九、推荐启动方式

通用计算首选:G3,64 MPI x 4 OpenMP
  1. source /home/software/cp2k/2026.2-gcc144-intelmpi2021.18-openblas-znver5-mpif08off/cp2k-install/cp2k_env

  2. ulimit -s unlimited
  3. ulimit -n 65536
  4. export OMP_NUM_THREADS=4
  5. export OMP_PLACES=cores
  6. export OMP_PROC_BIND=close
  7. export OMP_STACKSIZE=512M
  8. export OPENBLAS_NUM_THREADS=1
  9. export I_MPI_PIN=1
  10. export I_MPI_PIN_DOMAIN=omp
  11. export I_MPI_PIN_ORDER=compact

  12. mpiexec -n 64 -ppn 64 cp2k.psmp -i input.inp -o output.out
复制代码


DBCSR 类负载专项:A1,32 MPI x 8 OpenMP
  1. source /home/software/cp2k/2026.2-gcc144-mpich501-aocl5.3-o3-znver5-pure/cp2k-install/cp2k_env

  2. ulimit -s unlimited
  3. ulimit -n 65536
  4. export OMP_NUM_THREADS=8
  5. export OMP_PLACES=cores
  6. export OMP_PROC_BIND=close
  7. export OMP_STACKSIZE=512M
  8. export BLIS_NUM_THREADS=1

  9. mpiexec -n 32 -bind-to core:8 cp2k.psmp -i input.inp -o output.out
复制代码


十、适用范围与局限

  • 这是单节点、双路 Zen5、256 物理核条件下的结果,不能直接外推到多节点通信或其他 CPU 架构。
  • 四个输入刻意控制在较短时间内,用于高重复数筛选。大体系、长 MD、不同基组、不同 SCF 算法或多节点任务可能改变最佳版本与布局。
  • 比较对象是完整可执行栈,不是严格控制变量实验。若要回答“只更换 MPI 带来多少提升”,还需要专门的单因素矩阵。
  • A1 曾在较早的四版本矩阵中出现一次 300 s diagonalization 卡顿,但相同条件立即重试 10 次均通过,最终 80 个正式 case 也全部通过。该事件未复现,但作为可靠性记录保留。
  • G3 使用 MPI_F08=OFF,是为解决 GCC 14.4 无法读取 Intel MPI 所带 mpi_f08.mod 的兼容构建;其数值门槛、动态链接检查和绑核探针均通过。


十一、复现资料

附件“CP2K-2026.2-build-recipes-and-inputs.zip”中包含各版本的实际编译方法、关键 patch、安装前缀、有效 flags、动态链接验证、ifx 失败路线,以及本帖使用的四个原始输入文件:H2O-gga.inp、H2O-hyb.inp、diag_cu144_broy.inp 和 dbcsr.inp。本文正文只展示方法与结果,不把几十页编译命令和输入坐标直接塞进主帖。


大家后面测试的时候把本帖内容,和附件内容发给自己的agent,应该能省不少token,省下的token记得 请我喝奶茶!!!





欢迎交流不同 CPU、MPI、数学库和实际生产体系上的复现结果。

CP2K-2026.2-build-recipes-and-inputs.zip

16.87 KB, 下载次数 Times of downloads: 9

评分 Rate

参与人数
Participants 11
威望 +2 eV +47 收起 理由
Reason
小墨 + 5 GJ!
壹零壹室掃地僧 + 5 赞!
hdhxx123 + 5 GJ!
Assiduitas + 3 牛!
乐平 + 5 谢谢分享!
huangxc82 + 5 好物!
student0618 + 5
sobereva + 2
LittlePupil + 5 GJ!
phchhh + 4 牛!
李唯一 + 5 赞!

查看全部评分 View all ratings

246

帖子

2

威望

948

eV
积分
1234

Level 4 (黑子)

2#
发表于 Post on 前天 17:19 | 只看该作者 Only view this author
本帖最后由 UW_0728. 于 2026-8-4 17:31 编辑

关于ifx,补充一句,CP2K目前是明确不支持Intel编译器的(包括以前的ifort和现在的ifx);而且实际上除了GCC以外大多数其他编译器应该都无法正常编译和使用CP2K。目前regtest workflow刻意对ifx跳过了所有使用libint的测试,原因就是ifx编译出来的CP2K算利用libint的杂化泛函要么segfault要么wrong result

Intel MPI并行的性能在AMD上占优是我意料之外的,因为我一直将Intel MPI仅视为MPICH的Intel定制变体。

MKL之所以没有什么提升是因为CP2K对Gamma-only大体系的运算几乎全部走了稀疏矩阵途径(即DBCSR -> libxs;toolchain中libxs默认选用libxsmm作为JIT后端),其后端运行的是大量的小矩阵乘法;真正直接由BLAS驱动的只占不到5%。不过即使对于k点计算,我的观察是CP2K走了COSMA和BLACS/ScaLAPACK,也同样难以观察到MKL的收益,原因应该也类似:CP2K的主要运算和开销不在MKL等定制化数学库能带来优势的地方

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
乐平 + 5 谢谢分享

查看全部评分 View all ratings

Failed to load the content due to unknown reasons.

32

帖子

0

威望

628

eV
积分
660

Level 4 (黑子)

3#
发表于 Post on yesterday 10:45 | 只看该作者 Only view this author
感谢分享

1160

帖子

0

威望

4772

eV
积分
5932

Level 6 (一方通行)

4#
发表于 Post on yesterday 11:25 | 只看该作者 Only view this author
UW_0728. 发表于 2026-8-4 17:19
关于ifx,补充一句,CP2K目前是明确不支持Intel编译器的(包括以前的ifort和现在的ifx);而且实际上除了GC ...

所以,编译 CP2K 的时候不用 MKL 也不会对计算效率有什么明显的影响,对吧?

246

帖子

2

威望

948

eV
积分
1234

Level 4 (黑子)

5#
发表于 Post on yesterday 11:57 | 只看该作者 Only view this author
乐平 发表于 2026-8-5 11:25
所以,编译 CP2K 的时候不用 MKL 也不会对计算效率有什么明显的影响,对吧?

完全不会
Failed to load the content due to unknown reasons.

1254

帖子

1

威望

4049

eV
积分
5323

Level 6 (一方通行)

6#
发表于 Post on yesterday 13:13 | 只看该作者 Only view this author
intel mpi不内存泄漏了?以前的版本一直存在这种问题

本版积分规则 Credits rule

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

GMT+8, 2026-8-6 11:32 , Processed in 0.229402 second(s), 25 queries , Gzip On.

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