8.4 性能优化必须保持科学可复现性
这些输入和起始模型为未执行的教学示例。原创配图为示意图,不是计算结果。使用前请验证版本相关语法、授权数据、数值收敛及科学模型。
8.4.1 模型、单位与来源记录
保持基组、赝势文件与程序版本可追溯。网格控制使用 Ry;常见能量与力输出使用 hartree 和 hartree/bohr。以各输出标题所示单位为准。
8.4.2 未执行输入与明确修改片段
按照下方说明确认每个片段的母计算与替换位置;片段不自动构成独立输入。保留空行与文件来源要求。
8.4.2.1 输入块 1
8.4.2.2 输入块 2
export OMP_NUM_THREADS=4
export OMP_PLACES=cores
export OMP_PROC_BIND=close
mpiexec -n 4 cp2k.psmp -i bench.inp -o bench_4x4.out
8.4.3 实作研究
参见上方输入块 1。
参见上方输入块 2。
直觉与前置条件。 进程更多不保证计算更快。CP2K 的网格、稀疏矩阵、交换积分等部分采用不同并行方式,因此 MPI/OpenMP 最佳组合依赖体系和机器。强扩展保持问题不变而增加资源;吞吐量则关心同样配额能完成多少独立有效任务。小水分子不能代表生产级液态水 MD 或杂化计算。先选具有代表性且已经数值收敛的输入,固定几何、重启状态、阈值、输出频率及步数,再研究性能。
输入与启动。 把上方 PRINT_LEVEL 与 TIMINGS 合并进已有 GLOBAL;它们改变报告方式,不改变 Hamiltonian。THRESHOLD 0.01 对应约百分之一的计时报告门槛。独占/自身时间与包含子程序的总时间不同,把嵌套程序的总时间相加会重复计数。第二段是未执行的 shell 模板,不是 CP2K 输入;它假设至少分配16个物理核心、可用 MPI 启动器及名为 cp2k.psmp 的混合并行程序。四进程乘四线程形成16个软件工作单元,仍须确认实际核心绑定,并检查数学库是否额外开线程造成超额订阅。调度器命令和绑定策略应遵守实际计算中心要求。
操作步骤。 1. 记录 CP2K 版本及构建、编译器、MPI、BLAS/FFT、加速后端、CPU/GPU、节点数、进程线程布局、绑定和数据文件哈希。 2. 建立初始文件一致的独立目录,明确目标成本是否包含初始化;相关时同时报告端到端时间和稳定阶段 MD/SCF 性能。 3. 固定核心数比较合理的 MPI×线程组合,再保持科学问题不变做跨配置强扩展。 4. 重复测试以识别机器噪声,记录时间中位数与波动、内存、收敛 SCF 次数及完成步数。未收敛结果即使更快,也不算加速。 5. 按明确数值容差比较能量和力。长时间混沌 MD 应比较统计观测量,而不要求后期坐标逐位相同。 6. 保存输入、重启、完整输出、作业脚本、环境清单及分析代码,确认他人能够依此重建测试。
解释与检查。 基准使用 P0 个核心时,S(P)=T(P0)/T(P),效率为 S(P)/(P/P0)。核心小时随 P×T(P) 变化,因此最短墙钟时间不一定最省配额。不同求和顺序可能改变 SCF 次数,性能报告应比较实际计算工作量。独立伞形窗口或位移任务可能更适合多任务并行,而不是把大量核心塞给单个小计算。GPU 收益依赖构建、后端及可加速工作比例,不能预先承诺通用加速倍数。
陷阱与练习。 调整并行布局时若同时改变截断、基组、ADMM 或 SCF 阈值,就混合了科学模型与性能变化。固定随机种子不能保证不同进程数、软件库或硬件之间逐位一致,应分别说明逐位、数值和统计可复现性。练习是建立空白结果表,列出布局、时间、核心小时、SCF 工作量、能量偏差与内存;先确定验收标准,再按最快交付或最高吞吐量选择配置。