跳转至

8.1 比较 MPI、线程与求解器

8.1.1 必须测量相同科学工作

加快 ABACUS 只有在完成同样合格的计算时才有意义。增加处理器同时改变轨道、精度、SCF 阈值或 k 网格,不是强扩展测试。短小硅教学任务也不能预测大型金属表面的最佳布局。本课只设计实验,不虚构加速比,不提交真实集群任务。

模板尚未执行,依据 ABACUS 3.9.0 CPU 接口。从已收敛的首次 LCAO 硅计算或首次 PW 硅计算出发。该性能实验保持哈密顿量不变,原始 LDA 教学文件可保留。选择足够反映目标瓶颈的工作量,再冻结 INPUT、STRU、KPT 和物种文件哈希。

记录程序、编译器、MPI、BLAS/ScaLAPACK/ELPA、CPU、内存、节点数及绑定方式。GPU 和混合精度是另设的版本/构建相关实验。手册支持求解器名称,并不证明二进制包含其依赖。

8.1.2 分解与扩展定义

相同工作量、参考布局 \(p_0\) 下,

\[ S(p)=\frac{t(p_0)}{t(p)},\qquad \eta(p)=\frac{S(p)}{p/p_0}. \]

必须说明参考:16 相对 4 进程的加速比,与相对单进程不同。节点时或核时可衡量成本;更短墙钟时间可能消耗更多总计算资源,应按排队和吞吐目标选择。

PW 包含波函数、FFT、k 点任务;LCAO 包含数值网格组装和广义对角化,后者有重叠矩阵,求解器必须匹配表示。小矩阵可能由通信主导,有效 k 点过少会使池负载失衡。

MPI k 点池和线程块的概念分解,以及明确非实测的墙钟时间扩展示意曲线

打开原尺寸图

分块图表示任务分解;曲线不是硬件实测,也不是宣传加速比。

8.1.3 布局增量与启动示例

复制相同父任务,仅改变布局参数:

# ABACUS 3.9.0 layout experiment; retain all scientific inputs
suffix  Si_layout_k1
kpar    1

第二目录将 kpar 1 替换为 kpar 2 前,检查程序接受的 k 点数和 MPI 进程数;文档上限为二者较小值。选择程序与 MPI 能合理均匀分配的进程布局。Gamma 单点不会因请求两个池就产生两组有用 k 任务。

以下 Linux shell 仅为未执行的启动语法,不是集群提交脚本:

# Run separately inside a fresh, identically prepared benchmark folder.
export OMP_NUM_THREADS=1
mpirun -np 4 abacus > stdout.log 2>&1

实际启动遵循本机构资源和调度规则。四进程不是材料生产推荐。线程实验保持分配核数固定,仅在构建及线性代数库支持的配置间比较进程/线程拆分,同时记录 BLAS 和 ELPA 线程。设置 OMP 却不控制嵌套库线程,会超额订阅;不要用未验证的程序环境变量掩盖问题。

8.1.4 求解器与布局分开测试

PW 文档列出 cg、dav、dav_subspace、bpcg,内存和设备限制不同;LCAO 的 genelpa、scalapack_gvx 等广义求解器依赖构建,串行默认路径又不同。不能因为 genelpa 加速 LCAO 就用于 PW。

先固定求解器测试布局,再保持物理问题与精度目标,独立测试求解器。检查残差和本征值精度,不只看迭代次数。Davidson 子空间改变会影响内存和每步时间;初始化也可能改变 SCF 次数。冷启动和暖启动应分组记录。

不能把 bndpar 当通用 LCAO 能带并行开关;该版说明仅针对随机轨道。各 k 池、GPU、杂化交换路径未必有相同扩展性,需验证所测组合。

8.1.5 输出、空白计时表与验收

保存 stdout.log、完整 OUT.<suffix>/running_scf.log、求解器/布局信息与计时概要。使用平台适合工具记录墙钟时间,并说明初始化和 I/O 是否包含。相近负载下重复多次,报告离散程度,不能仅挑最小值。复用旧输出与新目录首次运行不是相同条件。

问题哈希 进程×线程 kpar 求解器/库 SCF 次数 能量/力检查 重复耗时(s) 峰值内存 核时
4 × 1 1 已记录
4 × 1 合法时为 2 相同
固定核数,另一拆分 合法 相同

快速却不收敛或改变电子/磁分支的布局应拒绝。归约次序造成的小差异可以出现,但须小于科学容差。迭代次数不同,应报告总耗时及可比每步耗时;后者不单独代表端到端吞吐。

8.1.6 易错点、练习与答案

易错点。 只数进程忽略线程成本;不控绑定使求解器比较变成位置比较;池多于 k 点浪费资源;强扩展同时改精度改变工作量;用两原子绝缘体布局直接推广到大型金属;计时未收敛任务得到没有意义的快结果。

练习 1。 相对四进程,八进程耗时加速 1.5 倍,效率多少?答案: \(1.5/(8/4)=0.75\)。这是算术练习,不是性能实测。

练习 2。 线程布局更快但分配核数加倍,是否更高效?答案: 不一定;应在相同科学精度下比较核时、内存和吞吐目标,说明真实资源分配。

8.1.7 参考

下一例:安全重启与溯源。