分子动力学仿真:GROMACS 与 LAMMPS 并行加速实践

分子动力学(MD)是 HPC 最经典的科学应用之一。本文系统讲解 MD 仿真原理:牛顿积分与力场、邻居列表与域分解并行、GROMACS 与 LAMMPS 的并行加速(OpenMP/MPI/GPU)、PMe 静电与约束算法、Amber 力场选择、性能调优与千万原子规模仿真,以及 MD 工作负载对 HPC 架构的启示。

引言

分子动力学(Molecular Dynamics, MD) 用牛顿定律数值积分粒子的运动,是蛋白质、材料、药物设计领域最常用的仿真工具。MD 的计算特征是「短程相互作用为主 + 每步计算量大 + 需跑数百万步」——天然适合并行,也把「邻居列表、域分解、GPU 加速」这些 HPC 经典技术全部用上。

本文系统讲解 MD 仿真:牛顿积分与力场、邻居列表与域分解并行、GROMACS 与 LAMMPS 两大引擎、PMe 静电与 SHAKE 约束、性能调优与大规模实践,最后讨论 MD 负载给 HPC 架构的启示。

前置:/hpc-mpi-basics/(MPI 并行)、/hpc-openmp/(OpenMP 共享内存)、/hpc-gpu-kernel-optimization/(GPU 加速)、/hpc-parallel-algorithms/(域分解)。


目录


1. 分子动力学原理:积分、力场与时间步长

MD 核心:对每个原子求解牛顿方程,数值积分运动:

F_i = m_i * a_i = -∇_i U(r)      (U 为势能)
r(t+Δt) = 2*r(t) - r(t-Δt) + a*Δt²   (Velocity Verlet 积分)

力场(决定势能形式):

U = 键伸缩 + 键角 + 二面角 + 范德华( Lennard-Jones ) + 静电(库仑)
  = 1/2k(r-r0)² + ... + 4ε[(σ/r)¹²-(σ/r)⁶] + q1q2/r

时间步长与精度:

□ 典型 Δt:1–2 fs(飞秒)
□ 氢原子运动快 → 约束(SHAKE)后可放宽到 2 fs
□ 需跑数百万步 → 总计算量 = 步数 × 每步成本

记忆:MD = 「数值解牛顿方程」——力场定势能、Verlet 做积分、步长受最快振动约束(氢键),跑百万步是常态。


2. 计算热点:短程力与邻居列表

MD 的计算特征:力主要是短程的(范德华/静电截断)。

朴素做法:N 个原子,每步算 N² 对相互作用 → 太慢
优化做法:只算截断半径 r_cut 内的邻居 → O(N)

邻居列表(Neighbor List / Verlet List):

□ 每个原子维护 r_cut + skin 半径内的邻居列表
□ 每 M 步重建一次列表(粒子移动出 skin 才重建)
□ 把「O(N²) 相互作用」降为「O(N × 邻居数)」

格子法(Cell List)进一步加速:

□ 空间分成格子,只查相邻格子
□ 与邻居列表配合,筛选候选对
□ 是域分解并行的前提

记忆:MD 加速第一招 = 邻居列表——「只算半径内的邻居」,用空间局部性把 O(N²) 砍成 O(N)。


3. 并行模型:域分解与三种并行层次

MD 并行的主流方式 = 域分解(Domain Decomposition):

把模拟盒子切成小区域 → 每个进程负责一个区域
  → 区域内原子自己算,区域边界原子靠邻居通信
  → 通信量 O(表面积),随规模扩展好

三种并行层次:

层次一:MPI 进程间并行(域分解,跨节点)
层次二:OpenMP 线程(共享内存,节点内)
层次三:GPU 加速(把短程力计算卸载到 GPU)

经典组合:

mpirun  ×  OMP_NUM_THREADS  ×  GPU
(跨节点域分解)+(节点内线程)+(GPU 加速)

记忆:MD 并行 = 域分解切空间 + MPI 跨节点 + OpenMP 节点内 + GPU 卸载——「切盒子、分层次」,通信只发生在边界。


4. GROMACS:高性能 MD 引擎实战

GROMACS 是速度最快、最流行的开源 MD 引擎,特别擅长生物大分子(蛋白质/DNA)。

# 预处理:构建体系
gmx pdb2gmx -f protein.pdb -ff amber99sb -water tip3p -o prot.gro
gmx editconf -f prot.gro -d 1.0 -box 10 10 10 -o box.gro
gmx solvate -cp box.gro -cs spc216 -o solv.gro
gmx grompp -f em.mdp -c solv.gro -p topol.top -o em.tpr   # 能量最小化

# 并行运行(域分解 + GPU)
mpirun -np 32 gmx mdrun -s md.tpr -deffnm md -nb gpu -pme gpu -bonded gpu

GROMACS 关键概念:

□ .tpr:预处理后的二进制输入(拓扑+参数)
□ mdrun:并行引擎
□ -nb gpu / -pme gpu / -bonded gpu:GPU 卸载选项
□ -deffnm:默认文件名前缀
□ 输出:.log / .edr(能量)/ .xtc(轨迹)

并行加速点:

□ 短程力(-nb)→ GPU 或 CPU SIMD
□ PME 静电(-pme)→ GPU 或专用线程
□ 约束(-bonded)→ GPU
□ 线程并行:OMP_NUM_THREADS 配合

落地:GROMACS 一句话——grompp 预处理成 .tpr,mdrun 并行跑,-nb/-pme/-bonded 三项 GPU 卸载是提速关键。


5. LAMMPS:通用 MD 引擎实战

LAMMPS 以「通用与可扩展」著称,覆盖材料、聚合物、粗粒化、反应等广泛体系。

# in.lammps 输入脚本
units           metal            # 单位制
atom_style      atomic
box             type boundary p p p

pair_style      lj/cut 10.0      # 截断 Lennard-Jones
read_data       data.lj

# 域分解并行设置
partition       8x8x8            # 8×8×8 进程网格

run             10000            # 跑 1 万步

运行:

# LAMMPS 内建域分解(-sf 加速开关)
mpirun -np 64 lmp -in in.lammps -sf gpu -pk gpu 2

# 或指定加速包
mpirun -np 64 lmp -in in.lammps -sf omp

LAMMPS 特点:

□ 输入脚本驱动(.in 文件)——灵活组合
□ 多种风格(atom_style / pair_style / fix)
□ 域分解 + 多种加速包(gpu/omp/opt/intel)
□ 大量力场与粗粒化模型(DPD、Langevin 等)

对比:GROMACS「开箱即用的生物 MD 引擎」,LAMMPS「灵活通用的材料/多体系沙盒」——生物体系选 GROMACS,材料与定制体系选 LAMMPS。


6. PMe 静电与约束算法

静电是 MD 的难点:库仑力是长程力,不能简单截断。

PMe 方法(Particle Mesh Ewald):

把静电拆成两部分:
□ 短程部分:实空间截断(邻居列表处理)
□ 长程部分:傅里叶变换到倒空间(网格 + FFT)
  → 网格求长程势,FFT 加速
  → 精度与效率平衡(网格密度决定)
PMe 3 步:
1. 把电荷分配到网格(charge spreading)
2. 求解泊松方程(FFT / 多级方法)
3. 从网格插回粒子力(force interpolation)

约束算法(SHAKE / LINCS):固定键长/键角,放宽时间步:

□ SHAKE:几何迭代法(适用于刚性键)
□ LINCS:线性约束求解(更快,GROMACS 默认)
□ 作用:去掉最高频振动 → 步长从 1 fs 提到 2 fs

记忆:静电靠 PMe(实空间截断 + FFT 倒空间),约束靠 SHAKE/LINCS 压掉高频——两者共同决定「步长能开多大、力算得准不准」。


7. 性能调优:从单核到千万原子

性能调优路径:

1. 并行度匹配:域分解规模 ≈ sqrt(原子数 × 邻居密度)
2. GPU 卸载:-nb/-pme/-bonded 上 GPU(通常 3–10× 提升)
3. 平衡负载:域分解的盒子尺寸与进程网格匹配
4. 步长选择:约束放开到 2 fs(少跑一半步数)
5. 邻居列表:重建频率与 skin 半径平衡

常见指标:

□ ns/day:每天模拟多少纳秒(性能主指标)
□ 并行效率:N 进程加速比曲线(找拐点)
□ GPU 利用率:是否喂饱 GPU(负载均衡)
□ 通信占比:域分解边界通信 vs 计算

千万原子规模:

□ 域分解网格随规模扩展(数千核)
□ GPU 集群 + NVLink:节点内高速互联
□ 检查点:长跑必需(见容错篇)
□ 数据输出:轨迹/能量文件的 I/O 规划

心法:MD 调优三问——GPU 卸载了吗?并行效率到拐点了吗?步长能再大吗?——用 ns/day 说话,别凭感觉。


8. MD 工作负载与 HPC 架构

MD 是 HPC 架构的「真实试金石」:

架构要素MD 的需求
CPUSIMD 向量化(AVX-512)算短程力
内存邻居列表驻留 + 带宽敏感
网络域分解边界通信,低延迟关键
GPU短程力/PMe 卸载,双精度偏好
存储轨迹/检查点 I/O

对架构的启示:

□ MD 是「带宽 + 通信敏感」负载(非纯计算密集)
□ 大规模 MD 集群普遍配 InfiniBand + GPU
□ CPU 向量化(AVX-512)直接决定单核短程力速度
□ 加速比拐点后加核无益 → 算力要「匹配体系规模」

认知:MD 展示了 HPC 负载的多样性——不是越算越快,而是「通信、带宽、GPU、向量化」四者都要跟上,架构要按负载画像设计。


9. 选型:GROMACS vs LAMMPS vs Amber

三大引擎对比:

GROMACSLAMMPSAmber
定位生物大分子 MD通用/材料 MD生物+QM/MM
速度最快(GPU 优化深)高(风格多样)高
力场Amber/CHARMM 等广泛+自定义Amber 系为主
体系蛋白质/DNA/膜材料/聚合物/粗粒化药物/酶体系
脚本.mdp/.tpr.in 脚本Amber 输入
定制中高中

选型建议:

□ 蛋白质/生物体系 → GROMACS(性能与生态最佳)
□ 材料/聚合物/粗粒化 → LAMMPS(灵活)
□ 药物设计与 QM/MM → Amber
□ 大规模 GPU 集群 → GROMACS 优化最成熟
□ 自定义力场/新模型 → LAMMPS

记忆:生物大分子选 GROMACS、材料体系选 LAMMPS、药物/QM/MM 选 Amber——按体系与定制需求定引擎。


10. 速查表与一句话记忆

需求手段
模拟积分Velocity Verlet
短程加速邻居列表 + Cell List
跨节点并行域分解 + MPI
节点内并行OpenMP 线程
GPU 加速GROMACS -nb/-pme/-bonded gpu
长程静电PMe(实空间+FFT)
放宽步长SHAKE / LINCS 约束
生物体系GROMACS
材料/通用LAMMPS
性能指标ns/day

一句话记忆:MD = 牛顿积分 + 力场 + 邻居列表——域分解切空间、MPI/OpenMP/GPU 三层并行、PMe 处理静电、SHAKE 放宽步长;生物选 GROMACS、材料选 LAMMPS,用 ns/day 衡量快慢。


延伸阅读

  • /hpc-mpi-basics/ — MPI 并行与通信
  • /hpc-openmp/ — 共享内存并行
  • /hpc-gpu-kernel-optimization/ — GPU 加速与调优
  • /hpc-parallel-algorithms/ — 域分解与工作负载平衡
  • /hpc-fault-tolerance/ — 长跑仿真的检查点
  • [[hpc]] — 高性能计算专题

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「hpc」更多文章

  1. ARM 超算与专用加速器:A64FX 与 NVIDIA Grace
  2. HPC 与 AI 融合:超算跑大模型训练
  3. 绿色 HPC:能耗优化与功率封顶实战