GROMACS是开源MD软件中性能最强的之一,但默认配置往往只能发挥50-70%的硬件潜力。本项目中遇到过这样的情况:同一个体系在同一台机器上,优化前35 ns/天,优化后78 ns/天——差了1倍多。性能优化不是玄学,而是有明确的方法论。

GROMACS的性能优化分为四个层次:
| 层次 | 优化对象 | 预期提升 | 难度 |
| mdp参数层 | 截断半径、PME设置、约束方法 | 10-30% | 低 |
| 运行参数层 | ntomp/npme/ddrank | 20-50% | 中 |
| GPU offload | PME/短程力GPU加速 | 50-200% | 中 |
| 硬件层 | 节点数/网络/存储 | 线性~亚线性 | 高 |
从上到下逐层优化是最高效的策略——先调好单节点性能,再考虑跨节点扩展。更多关于[分子动力学](https://www.keyanxueshu.com/category/md/)的性能优化案例可参考站内文章。
| 参数 | 默认值 | 推荐值 | 影响 |
| rlist | 1.0 | 1.0-1.2 | 邻居列表半径 |
| rcoulomb | 1.0 | 1.0 | 库仑截断 |
| rvdw | 1.0 | 1.0 | LJ截断 |
| cutoff-scheme | Verlet | Verlet | GROMACS 2020+默认 |
| DispCorr | EnerPres | EnerPres | LJ长程校正 |
| pbc | xyz | xyz | 周期边界 |
Verlet截断方案是GROMACS 2020以后的默认方案,它自动调整邻居列表大小和更新频率,通常不需要手动优化。但如果使用老的group方案,性能会下降20-30%。
PME(Particle Mesh Ewald)是处理长程静电的标准方法,通常也是计算瓶颈之一:
| 参数 | 默认值 | 推荐值 | 说明 |
| coulombtype | PME | PME | 长程静电 |
| fourierspacing | 0.12 | 0.12-0.16 | PME网格密度 |
| pme-order | 4 | 4 | 插值阶数 |
| ewald-rtol | 1e-5 | 1e-5 | Ewald容差 |
fourierspacing从0.12放宽到0.16,精度损失<1%但PME计算量减少30%。对于力场参数本身就有5-10%不确定性的情况,这个精度损失完全可以接受。
| 约束方式 | 最大步长 | 速度 | 精度 | 适用 |
| 无约束 | 0.5 fs | 基准 | 最高 | 需要精确振动光谱 |
| LINCS (H) | 2.0 fs | 4× | 高 | 标准推荐 |
| LINCS (H+heavy) | 2.5 fs | 5× | 中高 | 极限优化 |
| SETTLE (水) | 2.0 fs | 4× | 高 | 水分子专用 |
constraints = h-bonds ; 约束含氢键
constraint-algorithm = lincs
lincs-iter = 1
lincs-order = 4
dt = 0.002 ; 2 fs
LINCS参数微调:lincs-order=4(默认)已经足够稳定。如果用lincs-order=6会更稳定但每步多消耗50%的LINCS计算时间——通常不值得。lincs-iter=1(默认)在99%的情况下足够,只有出现LINCS警告时才需要增加到2。
GROMACS的并行分为MPI进程和OpenMP线程两个层级:
gmx_mpi mdrun -deffnm prod -ntmpi 4 -ntomp 8 -npme 1 -pin on
| 参数 | 含义 | 设置建议 |
| -ntmpi | MPI进程数 | =物理CPU核数/ntomp |
| -ntomp | OpenMP线程数 | 4-8(取决于CPU架构) |
| -npme | PME专用进程数 | 通常是总进程数的1/4-1/3 |
| -ntomp_pme | PME线程数 | 与ntomp相同 |
| -pin on | CPU亲和性 | 固定线程到核心,避免迁移 |
| -ddorder | 域分解排列 | interleave(默认即可) |
PME进程数的选取:这是性能调优中影响最大的单个参数。经验公式:
npme ≈ 总进程数 × (PME计算时间占比) ≈ 总进程数的25-33%
实测方法:先跑1000步,检查日志中的”PME mesh”时间占比:
Core t (s) Wall t (s) (%)
Time: 12345.6 512.3 96.2
12.3% of the wall time was spent in PME
如果PME占比>25%,增加npme;如果<10%,减少npme。
对于大体系(>100000原子),GROMACS会将空间划分为多个域,每个MPI进程负责一个域:
| 参数 | 含义 | 设置建议 |
| -rdd | 域分解最小尺寸 | ≥最大截断半径(1.2nm) |
| -dds | 域缩放因子 | 0.8(默认) |
| -ddcheck | 域间通信检查 | 开启 |
如果出现”Domain decomposition cell size smaller than cutoff”错误,说明体系太小或MPI进程太多——要么减少进程数,要么增大体系盒子。
GROMACS从5.0版本开始支持GPU加速,是目前GPU加速效果最好的MD软件之一:
| 配置 | 说明 | 适用场景 |
| PME on GPU, PP on CPU | 基础配置 | 所有GPU系统 |
| PP on GPU, PME on GPU | 全GPU | 单GPU或PME不重时 |
| PP on GPU, PME on CPU | 分离PME | PME计算重的体系 |
| Multiple GPUs | 每GPU一个PP域 | 大体系多GPU |
# 单GPU,PME也在GPU上
gmx mdrun -deffnm prod -nb gpu -pme gpu -bonded cpu -update cpu
# 双GPU,一个PP一个PME
gmx mdrun -deffnm prod -nb gpu -pme gpu -bonded cpu -npme 1 -ntmpi 2
以50000原子蛋白质-膜-水体系为例(GROMACS 2024, NVIDIA A100):
| 配置 | ns/day | 相对性能 | 说明 |
| 32 CPU核 (无GPU) | 28 | 1.0× | 基准 |
| 32 CPU核 + 1×A100 | 75 | 2.7× | PP+PME均offload |
| 32 CPU核 + 2×A100 | 128 | 4.6× | 1 PP + 1 PME |
| 64 CPU核 + 4×A100 | 210 | 7.5× | 3 PP + 1 PME |
| 64 CPU核 + 4×A100 (全GPU) | 185 | 6.6× | 2 PP + 2 PME |
关键发现:GPU数量增加到4块后,性能提升开始递减(7.5× vs 4.6×的增益只有1.6×而非2×),这主要受限于PME通信和bonded力仍在CPU上计算。
| 体系规模 (原子) | 推荐配置 | 预期ns/day | 并行效率 |
| 5,000 | 1 GPU + 8 CPU | 200-400 | — |
| 20,000 | 1-2 GPU + 16 CPU | 80-150 | >85% |
| 50,000 | 2-4 GPU + 32 CPU | 50-120 | 75-85% |
| 100,000 | 4-8 GPU + 64 CPU | 20-60 | 60-75% |
| 500,000 | 8-16 GPU + 128 CPU | 3-15 | 40-60% |
| 1,000,000 | 16-32 GPU + 256 CPU | 1-5 | 30-50% |
并行效率随体系增大而下降是正常的——通信开销随进程数增加而增长。对于百万原子级别的体系,建议考虑LAMMPS(域分解效率更高)或使用GROMACS的Verlet缓冲方案配合更优的域分解。
GROMACS内置了强大的性能分析工具:
# 运行时输出详细性能信息
gmx mdrun -deffnm prod -perflog perf.txt
# 事后分析
gmx report-pull -f perf.txt
关键性能指标:
| 指标 | 理想值 | 原因 |
| Performance | 越高越好 | ns/day |
| PP force | 40-60% | 短程力计算占比 |
| PME | 15-30% | 长程静电占比 |
| Bonded | 5-15% | 键合项占比 |
| Comm | <5% | 通信开销 |
| Wait | <5% | 负载不均衡等待 |
| Domain dec. | <3% | 域分解开销 |
如果Comm或Wait占比>10%,说明并行配置有问题——通常是进程数过多或域分解不均匀。关于[科研计算服务](https://www.keyanxueshu.com/)中的性能优化方案,本项目可提供针对性诊断。
本项目使用的标准生产模拟mdp参数:
; RUN CONTROL
integrator = md
dt = 0.002
nsteps = 5000000 ; 10 ns
; OUTPUT CONTROL
nstxout = 0
nstvout = 0
nstfout = 0
nstxout-compressed = 5000 ; 每10ps存一帧
nstenergy = 1000 ; 每2ps存能量
nstlog = 1000
; BONDS
constraints = h-bonds
constraint-algorithm = lincs
lincs-iter = 1
lincs-order = 4
; NEIGHBORSEARCHING
cutoff-scheme = Verlet
nstlist = 20
rlist = 1.2
; ELECTROSTATICS
coulombtype = PME
rcoulomb = 1.0
fourierspacing = 0.14
pme-order = 4
ewald-rtol = 1e-5
; VAN DER WAALS
vdwtype = Cut-off
rvdw = 1.0
DispCorr = EnerPres
; TEMPERATURE COUPLING
tcoupl = V-rescale
tc-grps = Protein MEMB SOL
tau-t = 0.1 0.1 0.1
ref-t = 310 310 310
; PRESSURE COUPLING
pcoupl = Parrinello-Rahman
pcoupltype = semiisotropic
tau-p = 5.0
ref-p = 1.0
compressibility = 4.5e-5 4.5e-5
; PBC
pbc = xyz
GROMACS分子动力学模拟的性能优化是一个系统工程,从mdp参数到运行配置到硬件利用,每个环节都有优化空间。本项目的经验是:先用标准参数跑通流程,再用bench工具(gmx bench)做参数扫描,最后根据诊断结果做针对性优化。盲目增加GPU或CPU数量而不优化配置,往往只能获得理论性能的50-60%。
GROMACS分子动力学模拟的性能调优与并行计算
GROMACS分子动力学模拟的性能调优与并行计算
gpcr分子动力学模拟
gromacs自由能计算
高通量分子筛选:从算力并行到结果聚合的工程化路径
GROMACS分子动力学模拟:从建模到轨迹分析完整流程
Gromacs代算 — 科研用户的GROMACS分子动力学外包服务选型与质量验收指南
高斯加速分子动力学模拟 — GaMD突破常规MD采样瓶颈的原理与实践