分子动力学可以用PIM优化的可行性

9 min read
Arch4Chem Molecular Dynamics Blog

English version: Can PIM Accelerate Molecular Dynamics?

TL;DR

本文回答一个问题:PIM 能否在单 GPU 全原子 MD 的主 timestep loop 上带来显著加速?

简短回答:不能。现代单 GPU MD 引擎(GROMACS / NAMD / AMBER)已经把主导 kernel 压榨得很彻底,单 GPU 场景下真正 memory-bound、留给 PIM 的空间大概只占总运行时间的 10–25%。按 Amdahl 算一下,即使这部分拿到 10× 加速,整体也就 1.1–1.3×——不是一个量级。

但跳出 timestep loop,trajectory analysis、neighbour-list preprocessing、ensemble workflow 这些数据移动远多于计算的环节,对 PIM / in-storage processing 友好得多。这才是 PIM × MD 真正值得研究的方向。

几个术语

MD / 力场 / 仿真层面

  • Docking:快速预测小分子如何放入蛋白质结合口袋的方法,通常比 MD 更静态、更近似。
  • Trajectory:MD 输出的原子运动轨迹,即一系列随时间变化的分子结构。
  • Neighbour list(邻居列表):MD engine 维护的数据结构,对每个原子记录 cutoff 距离内的所有”邻居”原子,让短程力计算从朴素的 O(N2)O(N^2) pair sum 降到 O(N)O(N)(每原子只看 ~100 个邻居)。常见实现包括 Verlet list 和 cell list。访存模式不规则——是 §3.2 表 2 中”不规则内存访问 kernel”的物理来源。详细机制见 §2.2。
  • PME (Particle Mesh Ewald):在周期体系下计算长程 Coulomb 求和的标准方法,本质是 Coulomb 的实现方式,涉及网格 + 3D FFT。
  • Timestep loop:MD 的主循环,每一步都计算力并更新原子位置。
  • 构象 (conformation) / 构象重排 (conformational change):分子不断化学键、只通过单键旋转能形成的不同 3D 形状叫构象。“构象重排”特指蛋白结合药物后整体或局部 3D 形状随之变化——是 MD 能看到、docking 看不到的关键现象(induced fit、cryptic pocket、allosteric effect 都属于此类)。
  • AIMD (Ab Initio MD) / QM/MM:用量子力学方法算力的 MD 变体。AIMD 全用 QM;QM/MM 把感兴趣的小区域(如反应中心)用 QM、其它用经典力场。算力比经典 MD 高几个量级。

药物发现流程

  • Hit discovery / hit-to-lead:drug discovery 流程的两个阶段。Hit discovery 是初筛拿到的有活性候选(几百到几千个);hit-to-lead 是把 hit 进一步优化、验证、收敛成 lead compound(几个)的阶段。
  • FEP (Free Energy Perturbation) / MM-PBSA:两种基于 MD 的精算结合自由能的方法。FEP 走 alchemical 路径,最准但每个分子几个 GPU·day;MM-PBSA 用端点构象 + 隐式溶剂,便宜但精度低一档。
  • RMSD / RMSF:trajectory 分析里两个最常用的指标。RMSD (Root Mean Square Deviation) 衡量结构相对参考结构的整体偏离;RMSF (Root Mean Square Fluctuation) 衡量每个原子在时间上的波动幅度。

硬件 / 性能层面

  • PIM (Processing-in-Memory):把计算单元放在靠近存储单元或嵌入存储单元的位置,目的是减少数据搬运开销。适合算术强度低、访存密集的 workload。
  • Memory-bound / compute-bound:性能瓶颈在数据移动(带宽、延迟)还是算术运算上。PIM 主要对前者有效。
  • HBM (High Bandwidth Memory):GPU 上的高带宽显存,TB/s 量级,是现代 MD 引擎”虽然有大量内存流量但仍跑得快”的硬件基础。
  • Strong scaling:固定问题规模、加更多算力时性能能 scale 多好。MD 单 trajectory 的 strong scaling 被 timestep 依赖卡住——瓶颈是同步而不是算力。

1. 分子动力学是做什么的?

分子动力学(Molecular Dynamics, MD) 是按牛顿力学一帧一帧推演原子运动的计算方法。简单说,MD 回答的是:

给定当前所有原子的位置,下一小段时间之后它们会如何移动?

在药物设计的工作流里,MD 扮演的是”分子电影摄影师”的角色。 前面的虚拟筛选 (Virtual Screening, VS) ——常用手段是 docking、similarity search(按分子指纹相似度筛)、机器学习 ML scoring / docking 等——从十亿级化合物库里筛出几百几千个有希望的 hit。但 VS 给的只是一张静态合影:“小分子大概能塞进蛋白口袋”。

真实环境里,蛋白会呼吸、水分子会来回钻、侧链会摆动。所以 hit 拿到手之后还得让 MD 接手:按牛顿力学一帧一帧地推演几十到几百纳秒,看这个分子在水里到底稳不稳——关键氢键会不会断、口袋里的水怎么排列、蛋白会不会因为药物结合发生构象重排(见术语表)。如果”电影”看完分子没有从口袋里跑掉,下一步才是更贵的计算。

MD 不只在 drug discovery 里有用——蛋白质折叠、膜蛋白模拟、酶动力学、材料科学、生物分子机制研究都靠它。这些场景共享同一套底层引擎和算力结构,所以加速 MD 等于加速一整片下游 workflow。


2. MD 在算什么?

经典 MD 基于牛顿力学。对每个原子 ii

Fi=miai=riU(r)(1)F_i = m_i a_i = -\nabla_{r_i} U(\mathbf{r}) \tag{1}

其中 U(r)U(\mathbf{r}) 是系统总势能,作为所有原子坐标 r\mathbf{r} 的函数。MD 的核心循环就是:算每个原子受到的力、更新位置和速度、推进到下一个 timestep、重复。

一个简化的 MD 循环:

初始原子结构 → 分配力场参数 → 进入 timestep loop:
    构建/更新邻居列表
    计算成键力 (bonded)
    计算短程非成键力 (LJ + 短程 Coulomb)
    计算长程静电 (PME)
    应用约束
    更新位置和速度
    偶尔写 trajectory
→ 输出 trajectory

整个循环的算力开销几乎全部花在力计算——也就是 U(r)U(\mathbf{r}) 的具体形式上。这个 U(r)U(\mathbf{r}) 叫做力场(force field),是 MD 的灵魂。

2.1 力场的总体结构

力场把系统总势能拆成两大类:

U(r)=UNon-Bonded(r)+UBonded(r)(2)U(\mathbf{r}) = U_{\text{Non-Bonded}}(\mathbf{r}) + U_{\text{Bonded}}(\mathbf{r}) \tag{2}
  • 非成键作用 UNon-BondedU_{\text{Non-Bonded}}:通过空间靠近就能感受到的相互作用——静电、范德华
  • 成键作用 UBondedU_{\text{Bonded}}:通过共价键连接的原子之间的几何形变——键长、键角、二面角

这两类的算力特征截然不同,是后面分析瓶颈的关键,所以下面分别展开。

2.2 非成键作用:MD 的主要计算开销

非成键作用通常由静电(Coulomb)和范德华(Lennard-Jones)两部分组成:

UNon-Bonded(r)=ijqiqj4πϵ0rijCoulomb+ij4ϵij[(σijrij)12(σijrij)6]Lennard-Jones(3)U_{\text{Non-Bonded}}(\mathbf{r}) = \underbrace{\sum_{ij} \frac{q_i q_j}{4\pi\epsilon_0 r_{ij}}}_{\text{Coulomb}} + \underbrace{\sum_{ij} 4\epsilon_{ij}\left[\left(\frac{\sigma_{ij}}{r_{ij}}\right)^{12} - \left(\frac{\sigma_{ij}}{r_{ij}}\right)^{6}\right]}_{\text{Lennard-Jones}} \tag{3}
  • Coulomb 项:取决于原子对距离 rijr_{ij}、真空介电常数 ϵ0\epsilon_0、partial charges qiq_iqjq_j
  • LJ 项1/r61/r^6 描述长程吸引(dispersion / van der Waals),1/r121/r^{12} 描述短程电子云重叠造成的排斥

为什么非成键贵?因为原子对数量随系统大小膨胀。一个 100 万原子系统的 pair sum 是 5×1011\approx 5 \times 10^{11} 对相互作用——而 MD 一个 microsecond 仿真要跑 5×1085 \times 10^8 个 timestep,每步都要重算。所以大部分现代 MD engine 都不会做 O(N2)O(N^2) pair sum,而是用邻居列表 + cutoff 把短程部分降到 O(N)O(N)、用 PME 把长程部分降到 O(NlogN)O(N \log N)

关于邻居列表 (Neighbour List):邻居列表是 MD engine 用来避免 O(N2)O(N^2) 的关键数据结构——对每个原子 ii 预先记录”哪些原子 jj 在 cutoff 距离内”,每步力计算只遍历这些对就够了。

主流实现两种:Verlet list(Verlet 1967)直接维护每原子的邻居索引数组,最直观但朴素构建是 O(N2)O(N^2)Cell list 把 simulation box 切成边长 \approx cutoff 的三维网格,每个原子归到一个 cell 里,查邻居只看所在 cell + 26 个相邻 cell,构建是 O(N)O(N)。现代 MD engine(GROMACS、NAMD)通常用 cell list 加速 Verlet list 构建。

关于 PME / Ewald:Coulomb 求和在周期性体系下 conditionally convergent,直接按 1/r1/r 加和不仅复杂度是 O(N2)O(N^2),物理上还是错的,因为求和结果取决于求和顺序。实践中用 Ewald 求和 把它分离出:(1)短程实空间部分(cutoff 内做 pair sum);(2)长程倒空间部分(Fourier 空间求和),整体 O(N3/2)O(N^{3/2})PME (Particle Mesh Ewald) 进一步用 3D FFT + 网格插值近似倒空间那段,把复杂度降到 O(NlogN)O(N \log N),是 GROMACS / NAMD / AMBER(主流 MD 仿真工具)的默认实现。所以 PME 不是一种独立的相互作用,而是 Coulomb 求和的标准计算方法。

在 PME / Ewald 视角下,公式 (3) 中的 Coulomb 求和在实际实现中被进一步展开为实空间 + 倒空间两部分:

UNon-Bonded(r)=  ijqiqjerfc(αrij)4πϵ0rijCoulomb, real-space+12Vϵ0k0ek2/4α2k2S(k)2Coulomb, reciprocal-space (PME)+ij4ϵij[(σijrij)12(σijrij)6]Lennard-Jones(4)\begin{aligned} U_{\text{Non-Bonded}}(\mathbf{r}) = \; & \underbrace{\sum_{ij} \frac{q_i q_j \, \text{erfc}(\alpha r_{ij})}{4\pi\epsilon_0 r_{ij}}}_{\text{Coulomb, real-space}} + \underbrace{\frac{1}{2V\epsilon_0} \sum_{\mathbf{k} \neq 0} \frac{e^{-k^2/4\alpha^2}}{k^2} |S(\mathbf{k})|^2}_{\text{Coulomb, reciprocal-space (PME)}} \\ & + \underbrace{\sum_{ij} 4\epsilon_{ij}\left[\left(\frac{\sigma_{ij}}{r_{ij}}\right)^{12} - \left(\frac{\sigma_{ij}}{r_{ij}}\right)^{6}\right]}_{\text{Lennard-Jones}} \end{aligned} \tag{4}

2.3 成键作用:函数复杂但项数线性

成键作用描述通过共价键连接的原子之间的几何形变,通常包含 4 类:bond stretching、angle bending、(proper) dihedral、improper dihedral:

UBonded(r)=Ubond+Uangle+Udihedral+Uimproper(5)U_{\text{Bonded}}(\mathbf{r}) = U_{\text{bond}} + U_{\text{angle}} + U_{\text{dihedral}} + U_{\text{improper}} \tag{5}

展开形式:

UBonded(r)=  12ijkr(rijr0)2bonds+12ijkkθ(θijkθ0)2angles+ijkln=1Nkϕ,n[1+cos(nϕijklδn)]dihedrals+ijklkω(ωijklω0)2improper dihedrals(6)\begin{aligned} U_{\text{Bonded}}(\mathbf{r}) =\; & \underbrace{\frac{1}{2}\sum_{ij} k_r (r_{ij} - r_0)^2}_{\text{bonds}} + \underbrace{\frac{1}{2}\sum_{ijk} k_\theta (\theta_{ijk} - \theta_0)^2}_{\text{angles}} \\ & + \underbrace{\sum_{ijkl}\sum_{n=1}^{N} k_{\phi,n}\left[1 + \cos(n\phi_{ijkl} - \delta_n)\right]}_{\text{dihedrals}} + \underbrace{\sum_{ijkl} k_\omega (\omega_{ijkl} - \omega_0)^2}_{\text{improper dihedrals}} \end{aligned} \tag{6}

成键项的关键特征:项数随原子数线性增长。每个原子周围的 bond / angle / dihedral 数量由分子拓扑决定,是常数,所以总项数 O(N)O(N),整体开销不大。

2.4 力场各项的计算特征

表 1. 力场各项的函数形式、复杂度与计算开销。 Bonded 项数随原子数线性增长,整体开销低;Non-bonded 才是 MD 力计算的大头,其中长程 Coulomb 由 PME 用 grid + FFT 实现,访存特征与短程项截然不同。

类别函数形式复杂度计算开销
BondsBondedharmonicO(N)O(N)
Angle bendingBondedharmonicO(N)O(N)
Dihedral rotationBondedcosine seriesO(N)O(N)
Improper dihedralBondedharmonicO(N)O(N)
Lennard-Jones (VdW)Non-bonded12-6, pair sum (cutoff)O(N)O(N) 配邻居列表 (如果计算所有 pair,复杂度为 O(N2)O(N^2))
Coulomb — real-space partNon-bondederfc(αr)/r\text{erfc}(\alpha r)/r, pair sum (cutoff)O(N)O(N) 配邻居列表很高
Coulomb — reciprocal part (PME)Non-bondedcharge spread → 3D FFT → scatter/gatherO(NlogN)O(N \log N)

§2 小结:力场的算力开销集中在非成键作用——尤其是 LJ 和 Coulomb 这两个对所有原子对求和的项。成键项虽然函数形式更复杂,但项数线性。这种不均衡正是下一节要分析的 kernel-level 瓶颈来源。


3. MD 的算力结构:时间花在哪里?

知道了力场怎么算,下一个问题是:一次 MD 仿真的时间到底花在哪里? 这决定了 PIM 这种 memory-side 加速器有没有引入的价值。

3.1 为什么 MD 整体很贵?

正如我们之前所说,MD 仿真是像电影机一样逐帧计算的。正因为这个特性,MD 计算的开销不在于每一帧有多复杂,而是在于以下两个原因:

1. 计算次数巨大。典型全原子 MD 的 timestep 是 1–2 fs。以 2 fs 为例,1 ns 就需要 500,000 步,1 µs 需要 500,000,000 步。一个百万原子系统、microsecond 级仿真,每步约 5×1075 \times 10^7 对短程相互作用(按每原子 100 邻居算),累计就是 2.5×10162.5 \times 10^{16} 次 pair interaction——单步不复杂,但量积下来就贵。

2. Timestep 之间强依赖,并行加速困难。MD 是时间推进型(transient)仿真。每个 timestep 内部的力计算可以大规模并行,但 timestep 之间存在严格依赖,下一步必须等当前步的位置和速度更新完才能开始。这就决定了单条仿真的 scaling 会被 timestep 依赖、同步和通信开销卡住,投更多 GPU 进去回报递减。英伟达的一项测试表明,即使使用了 NVIDIA 的通信优化库,GPU Node 超过 8 个之后收益急剧下降,甚至造成了性能下跌 [4]。

3.2 单步 MD 的 kernel-level 拆解

§2 的表 1 讨论了 U(r)U(\mathbf{r}) 由哪些数学项组成。但 MD engine 在 GPU 上执行时并不是按表 1 的项一个个调函数,而是把这些项重新组织成更适合并行的 kernel,再加上力累加、积分、I/O 这些 timestep 必做的辅助操作(house-keeping)。表 2 提供了一个执行视角,也就是从”力场数学”到”GPU kernel”的映射。

表 2. 单步 MD timestep 的 kernel-level 拆解,以及与表 1 的对应关系。 表 1 的 7 个力场项被映射到 5 类 force-computing kernel(成键合并、短程非成键共享邻居列表、PME 拆成 spread + FFT),加上 3 类 house-keeping kernel(力累加、积分、I/O)。

Kernel对应表 1 项作用主导瓶颈
1. 成键作用力Bonded 4 项(bond / angle / dihedral / improper)计算分子内几何形变能算力轻、规整
2. 短程非成键作用力LJ + Coulomb real-space计算 cutoff 内 pair 相互作用计算密集,对内存敏感
3. 邻居列表构建服务于短程非成键(kernel 2)构建空间配对列表内存/数据结构密集
4. 邻居列表遍历服务于短程非成键(kernel 2)找到附近原子对不规则内存访问
5. PME 电荷分配/插值Coulomb reciprocal粒子 ↔ 网格映射scatter/gather 内存流量
6. PME FFTCoulomb reciprocalFourier 空间求和内存移动和通信
7. 力累加(跨所有 force 项)汇总各 kernel 的力贡献写入/reduction 开销
8. 积分(不属于 UU,对应式 1)FF 更新位置和速度流式内存访问
9. 轨迹输出(I/O,与 UU 无关)保存模拟帧到磁盘存储/I/O 密集

表 2 的核心观察是:MD 的 kernel 是异构的——既有计算密集(短程非成键、成键),又有内存密集(邻居列表、PME spread),还有通信/IO 密集(PME FFT、轨迹输出)。这种异构性意味着:单一类型的加速器(包括 PIM)不可能对所有 kernel 都同样有效——它最多只能优化其中一部分。

为了让表 2 的 9 个 kernel 更直观,下面这个交互动画把单步 timestep 内每个 kernel 的访存与计算特征逐一演示出来——左下角的 detail panel 会显示当前 kernel 在算什么、涉及多少 pair / cell / atom。

3.3 存储需求:容量不是瓶颈

一个常见误解是 MD 内存占用很大,实际上内存容量并非性能瓶颈。以马克斯·普朗克研究所提供的一个 benchmark 为例 [5],对于一个大型仿真(12M 原子),原始原子状态占用的文件大小在 ~300 MB 左右,实际模拟内存约数个 GB。这个数量完全可以装入现代 GPU 显存——比如常见的 RTX 4090 显卡显存为 24 GB,计算中心常用的 A100 更是高达 80 GB。所以容量不是核心瓶颈

但现代 GPU MD 引擎已经用 GPU-resident execution(让 timestep loop 留在 GPU 上、避免 CPU↔GPU 来回搬数据)、kernel 优化、通信/计算重叠等手段把数据移动开销压得很低 [2]——大量内存流量被高带宽 HBM + 优化的 kernel 吃掉,内存访问不一定是全局主导瓶颈。

§3 小结:MD 时间几乎全花在 timestep loop 内的若干异构 kernel 上。非成键计算是大头但已经被深度优化(compute-bound),剩下的 memory-bound 工作只占一部分。下一节回答:PIM 在 MD 上的实际优化空间到底有多大?


4. PIM 适合 MD 吗

4.1 PIM 喜欢的目标

PIM 适合的 workload 通常具备:低算术强度、大量内存流量、较差缓存局部性、显著运行时占比。

从表 2 看,MD 在每个 timestep 反复读写坐标、力、邻居列表和 PME 网格。这些数据在数百万个 timestep 中循环访问,访存频率高、locality 不规则——和 PIM 喜欢的 pattern 看起来很匹配。

问题在于:PIM 提议加速 MD 时,对比的 baseline 是什么? 现代 MD 几乎全跑在 GPU 上——GROMACS、NAMD、AMBER、OpenMM、Desmond 这些主流引擎都对主导 kernel 做了深度 GPU 优化。以 GROMACS 为例,官方文档指出 non-bonded pair kernels 占总 runtime 的 60–90% [1],且已是高度优化的 compute-bound kernel。

所以正确的问题不是 “PIM 能不能比 CPU 跑得快”,而是:

PIM 能不能在已经被深度优化的单 GPU baseline 之上继续加速?

从 §3 我们已经看到:MD 最贵的部分(非成键计算)已经是 compute-bound 而不是 memory-bound 了,PIM 在这里没有结构性优势。

§4 小结:MD 表面上有 PIM-friendly 的访存特征,但单 GPU 上的主导瓶颈是计算而不是数据移动。PIM 的潜在收益局限在剩下的 memory-bound 部分。下一节用 Amdahl 量化这个上限。


5. 定量分析:Amdahl 给出的上限

5.1 单 GPU 上 MD 运行时间的组成

把表 2 的 kernel 按运行时间占比汇总:

表 3. 单 GPU 上 MD 运行时间的组成与 PIM 适配性评估。 Memory-bound 部分(PME 的访存部分 + 邻居列表)总共约占 10–25% 运行时间,是 PIM 在 timestep loop 内的潜在优化空间;其余部分要么已经 compute-bound、要么不在 critical path 上。

组成部分运行时间占比是否适合 PIM说明
优化后的非成键作用力计算60–90%不合适GPU 高度优化:数百万个 pair 同时并行计算,典型的 compute bound
PME10–20%部分适合FFT、grid mapping、通信影响较大
邻居列表构建/遍历5–15%适合不规则内存访问,但不一定每步执行
积分/约束5–10%有限GPU-resident 模式下也可 offload
I/O 和其他1–10%有时适合不在 MD 仿真的 critical path 上

具体比例仍然依赖 MD engine、force field、PME 设置、GPU 型号、系统大小和 simulation parameters;对目标系统的严格结论需要用 Nsight / GROMACS timing breakdown profile 确认 [3]。

真正适合 PIM 的部分大概占总运行时间的 10–25%——主要是 PME 的 scatter/gather + 邻居列表的不规则访问。

5.2 Amdahl’s Law:PIM 的天花板

套用 Amdahl’s Law(式 7)量化这个 10–25% 能带来多少整体加速:

Stotal=1(1f)+fSacc(7)S_{total}=\frac{1}{(1-f)+\frac{f}{S_{acc}}} \tag{7}

其中 StotalS_{total} 是总加速倍数,ff 是可加速部分的比例,SaccS_{acc} 是可加速部分的加速倍数。

乐观估计:取 f=0.25f=0.25(25% 适合 PIM),假设 PIM 对 memory-bound 部分做到 10× 加速,且不考虑其他 overhead:

Stotal=10.75+0.25/10=1/0.7751.29S_{total}=\frac{1}{0.75+0.25/10}=1/0.775\approx 1.29

整体加速也不过 1.29×

理论上限:即便这 25% 被无限加速:

Smax=110.25=1.33S_{max}=\frac{1}{1-0.25}=1.33

整体上限也就 1.33×

5.3 结论

这个 1.29× / 1.33× 数字传达了一个明确信号:对单 GPU MD 的原始吞吐量来说,PIM 大概率拿不到一个量级的提升。它能改善若干 memory-bound kernel,但无法撼动 compute-bound 的非成键计算这个大头。


6. PIM 的机会:跳出 timestep loop

如果 timestep loop 内部没空间,机会大概率在 loop 之外。MD 仿真的完整 lifecycle 不止 timestep loop——还包括前后的数据密集型环节,这些是 PIM × MD 可能优化的环节。

6.1 Trajectory analysis:data-centric workload

仿真完成后产出 trajectory(轨迹)文件——这是 PIM 或 in-storage processing (ISP) 真正能发力的地方。

  • 数据量大:长时间 MD 不会每步都存轨迹,但会按固定间隔输出 trajectory frame。百万原子系统跑长时间尺度仿真,轨迹文件累积到几百 GB 甚至 TB 级是常态。
  • 访问模式 scan-heavy:后续的 RMSD/RMSF 分析、contact map(原子对接触频率矩阵)、氢键统计、距离查询、binding pose stability filtering(筛掉短时间 MD 就跑飞的不稳定结合姿态)这些分析任务,需要反复扫描整条 trajectory。
  • 计算简单:每帧上的计算(距离、角度、原子对统计)算术强度极低。

这种”大量数据 × 简单计算 × 反复扫描”的组合,对 PIM 或 in-storage processing 来说远比原始 MD timestep loop 友好。

§6 小结:PIM × MD 的研究方向可以从”加速 timestep loop”转向”加速 MD 周边的数据密集型工作流”。


7. Limitations 与适用范围

本文的结论严格依赖几个假设,在以下范围之外不一定成立:

  • 单 GPU 全原子 MD:本文假设标准全原子 force field (AMBER / CHARMM / OPLS family) + PME,在单 GPU 上跑。粗粒度模型(coarse-grained,大幅减少自由度,比如 MARTINI) 的算力结构完全不同,PME 也不一定存在。
  • 多 GPU / 集群 strong scaling:多 GPU 上同步通信、domain decomposition(把 simulation box 划成子区域分给不同 GPU)是新的瓶颈点。
  • 不包含专用硬件:D. E. Shaw 的 Anton 系列(为 MD 专门设计的 ASIC + 低延迟互联,单芯片就把 timestep loop 跑到极致)、Google 的 TPU-MD 这类专用架构走的是另一条 path(SIMD)。
  • 不包含 ab initio MD / QM/MM(AIMD):本文只讨论经典 MD(也就是本文 §2 中主要提到的方法)。AIMD 和 QM/MM 的瓶颈在 SCF iteration(求解电子结构的 self-consistent field 迭代,需要反复对角化大矩阵)/ electron density 计算上,是另一个完全不同的问题。
  • Runtime 占比是估计值:§5.1 的占比来自一般经验(GROMACS docs + 多 paper 报告),对具体目标系统应该用 profiler 实测,不要直接套用。

References

[1] gmx nonbonded-benchmark - GROMACS documentation

[2] Performance improvements - GROMACS 2026.2 documentation

[3] Getting good performance from mdrun - GROMACS documentation

[4] Massively Improved Multi-node NVIDIA GPU Scalability with GROMACS

[5] A free GROMACS benchmark set — Max Planck Institute for Multidisciplinary Sciences