路线
表中版本信息核对日期为 2026-10-10。需要 GPU 加速时,只有前两种路线能装上当前版本并自行选择 CUDA 版本。
| 路线 | 能装到的版本 | NVIDIA GPU | 适用条件 | 主要限制 |
|---|---|---|---|---|
| WSL2 + 源码编译 | 任意版本,当前 2026.4 | 支持(CUDA) | Windows 10/11 个人电脑,有 NVIDIA 显卡 | WSL2 中 nvidia-smi 功能受限;多 GPU 时不能按索引筛选设备;源码须放在 Linux 文件系统内 |
| Linux 源码编译 | 任意版本,当前 2026.4 | 支持(CUDA/SYCL/HIP) | 工作站、服务器、集群 | 需要 CMake ≥ 3.28、GCC ≥ 11;CentOS 7(GCC 4.8.5)和 Rocky/RHEL 8(GCC 8.5)需先装新编译器 |
| conda-forge | 2026.3(官方已发布 2026.4) | 仅 linux-64 有 CUDA 构建 | 没有 root 权限、只想快速用上 | 不支持 Windows;CUDA 构建依赖 cuda-toolkit 12.9,驱动须支持 12.9;x86 最高只编到 AVX2_256;打包时未运行回归测试 |
| Ubuntu apt | 24.04 为 2023.3,22.04 为 2021.4 | 否 | 只做教学或 CPU 小体系 | 版本落后两到三年,依赖中没有 CUDA 运行库 |
| NVIDIA NGC 容器 | 最新标签 2023.2(2023-08 更新) | 支持 | 已有 Docker/Singularity 的 GPU 服务器 | 版本停更;示例命令中的 GMX_ENABLE_DIRECT_GPU_COMM 属于 2022/2023 的用法 |
| 原生 Windows(MSVC) | 可自行编译 | 支持(CUDA,官方测试过) | 必须在 Windows 原生环境运行 | 官方不提供 Windows 二进制;GMX_BUILD_OWN_FFTW 不可用,需 MKL、fftpack 或自建 FFTW;不支持 PLUMED;CMake < 4.3 编译 CUDA 版检测不到 OpenMP_CUDA |
版本差异
网上多数中文教程以 2018–2021 版为例。下表列出在 2026.x 中已经改变的要求和写法。
| 项目 | GROMACS 2026.x | 旧教程写法 | 照抄的后果 |
|---|---|---|---|
| CMake | ≥ 3.28(2025 起) | cmake3、3.13–3.17 | 配置阶段直接失败;Ubuntu 22.04 的 apt 版本 3.22.1 不够,24.04 的 3.28.3 够 |
| C++ 编译器 | GCC ≥ 11、Clang ≥ 14、MSVC 2019;Intel 经典编译器 icc 不再支持 | GCC 5–7 | CentOS 7、Rocky 8 自带 GCC 无法编译 |
| 启用 CUDA | -DGMX_GPU=CUDA | -DGMX_GPU=ON | 报错 Invalid value for GMX_GPU: ON. Pick one of: OFF, CUDA, OpenCL, SYCL, HIP |
| CUDA 路径 | -DCUDAToolkit_ROOT=/usr/local/cuda-12.9 | -DCUDA_TOOLKIT_ROOT_DIR=… | GROMACS 2026 的 CMake 脚本不再读取该变量,配置结束时只提示 Manually-specified variables were not used by the project: CUDA_TOOLKIT_ROOT_DIR(本页用 CMake 4.4 实测);多版本 CUDA 并存时可能找到另一个 nvcc,需在 cmake 输出中核对实际版本 |
| GPU 架构 | -DCMAKE_CUDA_ARCHITECTURES=89 | -DGMX_CUDA_TARGET_SM=… | 仍可用但给出弃用警告,2026 起统一改用 CMake 标准变量 |
| CUDA 版本 | ≥ 12.1,计算能力 ≥ 5.0 | CUDA 9–11 | CUDA 11.x 配置阶段即失败 |
| CUDA 13 | 2025.3 起支持;CUDA 13 不能为计算能力 < 7.5 的显卡编译 | 未提及 | GTX 10 系、P100、V100 用 CUDA 13 编译后无法使用 GPU;2025.0–2025.2 配 CUDA 13 链接失败 |
| AMD 显卡 | HIP 后端 2026 起支持完整卸载;或 SYCL + AdaptiveCpp | OpenCL | OpenCL 已弃用,且不支持 RDNA 系列 AMD 显卡和 Volta 及以后的 NVIDIA 显卡 |
| GPU 更新与约束 | -update auto 默认在 GPU 上执行(2023 起) | 需手动加 -update gpu 或设 GMX_FORCE_UPDATE_DEFAULT_GPU | 旧环境变量 GMX_GPU_DD_COMMS、GMX_GPU_PME_PP_COMMS 已删除,设置后不起作用 |
| MPI | 需 MPI 3.0(2026 起) | MPI 2.x | 单机运行用内置 thread-MPI 即可,不需要编译 MPI 版 |
| PLUMED | 2025 起自带接口,运行时加载 | 必须先 plumed patch | 常规用法不再需要打补丁,详见 PLUMED 一节 |
Linux
GMX_BUILD_OWN_FFTW=ON 会下载 FFTW 3.3.10 并以单精度和 GROMACS 推荐的 SIMD 选项编译。官方不推荐使用发行版的 FFTW 包,因为发行版默认包是双精度,编译选项也未针对 GROMACS 优化。
cmake 输出中要确认两行:SIMD 指令集是否与 CPU 匹配(例如 AVX2_256 或 AVX_512),以及 CUDA 版的 “Compiling GROMACS for CUDA architectures: …”。在登录节点编译、在计算节点运行时,SIMD 要按计算节点设置 -DGMX_SIMD;用 AVX-512 编译的程序在只支持 AVX2 的机器上会因非法指令退出。GPU 运行时官方建议优先用 AVX2_256。
CUDA 编译时 nvcc 默认用 CMAKE_CXX_COMPILER 作为主机编译器。系统 GCC 比 CUDA 支持的版本新时,同时指定 -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 这类旧版编译器,不要修改 CUDA 的 host_config.h。
# Ubuntu 24.04(含 WSL2 中的 Ubuntu 24.04);22.04 的 apt cmake 是 3.22,需先用 pip install cmake 升级
sudo apt update
sudo apt install -y build-essential cmake wget perl
wget https://ftp.gromacs.org/gromacs/gromacs-2026.4.tar.gz
tar xfz gromacs-2026.4.tar.gz
cd gromacs-2026.4
mkdir build && cd build
cmake .. \
-DGMX_BUILD_OWN_FFTW=ON \
-DREGRESSIONTEST_DOWNLOAD=ON \
-DCMAKE_INSTALL_PREFIX=$HOME/opt/gromacs-2026.4
make -j $(nproc)
make check
make install
echo 'source $HOME/opt/gromacs-2026.4/bin/GMXRC' >> ~/.bashrc
source $HOME/opt/gromacs-2026.4/bin/GMXRC
gmx --version# 前提:nvcc 可用(nvcc --version),nvidia-smi 能看到显卡
export PATH=/usr/local/cuda-12.9/bin:$PATH
cd gromacs-2026.4
mkdir build-cuda && cd build-cuda
# CMAKE_CUDA_ARCHITECTURES 填显卡计算能力去掉小数点:
# RTX 20/T4=75, A100=80, RTX 30/A40=86, RTX 40/L40=89, H100=90, RTX 50=120
# 不写则按 50..120 中 nvcc 支持的架构全部编译,编译更慢、二进制更大
cmake .. \
-DGMX_GPU=CUDA \
-DCUDAToolkit_ROOT=/usr/local/cuda-12.9 \
-DCMAKE_CUDA_ARCHITECTURES=89 \
-DGMX_BUILD_OWN_FFTW=ON \
-DREGRESSIONTEST_DOWNLOAD=ON \
-DCMAKE_INSTALL_PREFIX=$HOME/opt/gromacs-2026.4-cuda
make -j $(nproc)
make check
make install
source $HOME/opt/gromacs-2026.4-cuda/bin/GMXRC
gmx --version | grep -E "GPU support|CUDA targets|CUDA driver|CUDA runtime|SIMD"
# 服务器无法访问 fftw.org 或 ftp.gromacs.org 时,先在别处下载这两个文件再传上去
# http://www.fftw.org/fftw-3.3.10.tar.gz
# https://ftp.gromacs.org/regressiontests/regressiontests-2026.4.tar.gz
tar xfz regressiontests-2026.4.tar.gz -C $HOME/src
cmake .. \
-DGMX_GPU=CUDA \
-DGMX_BUILD_OWN_FFTW=ON \
-DGMX_BUILD_OWN_FFTW_URL=$HOME/src/fftw-3.3.10.tar.gz \
-DREGRESSIONTEST_PATH=$HOME/src/regressiontests-2026.4 \
-DCMAKE_INSTALL_PREFIX=$HOME/opt/gromacs-2026.4-cudaWindows
完成以上步骤后,按上一节的 CUDA 版命令编译即可。WSL2 的已知限制:nvidia-smi 只提供部分功能;多 GPU 机器上不能按索引号筛选显卡;不支持 CPU 与 GPU 并发访问同一内存。单卡运行 GROMACS 不受这些限制影响。
# Windows PowerShell(管理员)
wsl --install -d Ubuntu-24.04
wsl --update
# 可选:%UserProfile%\.wslconfig,修改后执行 wsl --shutdown 再进入
# [wsl2]
# memory=16GB
# processors=8# 在 WSL 的 Ubuntu 中执行;先确认 Windows 驱动已透传
nvidia-smi
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
# 只装 toolkit 元包;不要装 cuda、cuda-12-9 或 cuda-drivers,它们会带入 Linux 驱动
sudo apt-get install -y cuda-toolkit-12-9
echo 'export PATH=/usr/local/cuda-12.9/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
nvcc --version
# 源码和 build 目录放在 Linux 文件系统,不要放 /mnt/c
mkdir -p ~/src && cd ~/src- 01
在 Windows 上安装或更新 NVIDIA 驱动
NVIDIA 的 WSL 指南规定,这是唯一需要安装的驱动,不要在 WSL 内安装任何 Linux 显示驱动。Windows 驱动会以 libcuda.so 的形式映射进 WSL2,nvidia-smi 位于 /usr/lib/wsl/lib。WSL 中 nvidia-smi 右上角显示的 CUDA Version 应不低于你要安装的 toolkit 版本。
- 02
安装 WSL2 和 Ubuntu 24.04
CUDA 只支持 WSL 2,不支持 WSL 1。Ubuntu 24.04 的 apt 自带 CMake 3.28.3 和 GCC 13.2,满足 GROMACS 2026 的要求,可以省去手动升级 CMake。
- 03
只安装 cuda-toolkit-12-x 元包
使用 NVIDIA 的 wsl-ubuntu 仓库。cuda、cuda-12-x、cuda-drivers 这三个元包会安装 Linux 驱动并覆盖 WSL 的 libcuda 映射,导致 GPU 不可用。CUDA 12.9 能为计算能力 5.0 到 12.0 的显卡编译,包括 RTX 50 系列,也包括 GTX 10 系。
- 04
源码与 build 目录放在 ~ 下
微软建议在 Linux 命令行工作时把文件放在 /home/<用户名>,不要放在 /mnt/c。在 /mnt/c 下编译速度慢,GROMACS 论坛也有人在该路径下编译时出现 “Clock skew detected” 警告。
- 05
编译时内存不足就降并行数
WSL2 默认只分配 Windows 内存的 50%。make -j 中途出现 “c++: fatal error: Killed signal terminated program cc1plus” 是内存耗尽,可减小 -j 的数值,或在 .wslconfig 中调大 memory 后执行 wsl --shutdown。
conda
# 只适用于 linux-64(含 WSL2)。CUDA 构建要求驱动支持 CUDA 12.9
conda create -n gmx -c conda-forge "gromacs=2026.3=nompi_cuda*"
conda activate gmx
gmx --version | grep -E "GPU support|SIMD"
# CPU/OpenCL 构建
# conda create -n gmx-cpu -c conda-forge "gromacs=2026.3=nompi_h*"
# ~/.condarc(TUNA 帮助页给出的 conda-forge 写法;改完先 conda clean -i)
# channels:
# - conda-forge
# - nodefaults
# show_channel_urls: true
# custom_channels:
# conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
conda clean -i
conda create -n gmx -c conda-forge "gromacs=2026.3=nompi_cuda*"
# 用 mamba 时改用 mirrored_channels
# channels:
# - conda-forge
# mirrored_channels:
# conda-forge:
# - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
# 源码编译时用 pip 升级 CMake(需要 ≥ 3.28)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "cmake>=3.28"
版本落后官方一个补丁版
核对日期当天 conda-forge 最新为 2026.3,官方为 2026.4。bioconda 的 gromacs 停在 2021.3,不要从 bioconda 安装。
CUDA 构建只有 linux-64
aarch64、ppc64le 和 macOS 没有 CUDA 构建,Windows 完全没有构建。CUDA 构建会在环境中安装 cuda-toolkit 12.9,并通过 __cuda 虚拟包检查驱动。
SIMD 最高 AVX2_256
配方在 x86 上只编译 SSE2、AVX_256、AVX2_256 三种版本,启动时按 CPU 选择。支持 AVX-512 的 CPU 在纯 CPU 运行时可能比自编译版本慢。
打包时没跑回归测试
配方中 REGRESSIONTEST_DOWNLOAD 被注释掉,打包测试只执行 gmx -version。需要可信结果时,自行下载 regressiontests-2026.3 并运行 gmxtest.pl。
测试
官方安装指南的判断标准是:个别测试失败可能是编译器 bug,也可能只是容差略紧。应查看脚本指出的输出文件;失败若确实存在,就换一个更新的编译器重新编译。仍无法通过时,到 GROMACS 论坛发帖,并附上硬件描述和 gmx mdrun -version 的完整输出。
GROMACS 论坛中最常见的情况是 GPU 构建大量测试显示 Timeout。开发者的解释是测试默认会使用检测到的全部核心和 GPU,CPU 或 GPU 被其他任务占用时就会超时。一个 2021.1 案例中,GPU 检测开启时有 23 项超时,设置 GMX_DISABLE_GPU_DETECTION=1 后只剩 1 项。只有超时、且 CPU 模式能通过时,可以先用下一节的水盒子自检确认 GPU 运行正常;数值比较失败(输出中出现 reference 与计算值不符)则不应忽略。
# 只看失败项
make check 2>&1 | tee check.log
grep -A40 "tests FAILED" check.log
# 1. 排除 GPU 因素:CPU 通过而 GPU 超时,多半是 GPU 被其他进程占用
GMX_DISABLE_GPU_DETECTION=1 make check
# 2. 多 GPU 机器只让测试看到一张卡
CUDA_VISIBLE_DEVICES=0 make check
# 3. 慢机器或 WSL 中超时:放宽超时倍数后重新配置
cmake .. -DGMX_TEST_TIMEOUT_FACTOR=3 && make check
# 4. 单独重跑某个测试,看完整输出
ctest -R MdrunTests --output-on-failure报错
| 报错原文(节选) | 原因 | 处理 |
|---|---|---|
| Invalid value for GMX_GPU: ON | 沿用 2021 年以前的写法 | 改为 -DGMX_GPU=CUDA |
| Could not find `nvcc` executable in path specified by variable CUDAToolkit_ROOT=/usr/local/cuda-12.9 | CUDAToolkit_ROOT 指向的目录下没有 bin/nvcc(本页在无 CUDA 的机器上实测的 CMake 原文) | 用 ls /usr/local/ 确认实际安装的 CUDA 目录,改正 CUDAToolkit_ROOT |
| CMake 3.28 or higher is required | 系统 CMake 太旧(Ubuntu 22.04 为 3.22.1,CentOS 7 更旧) | pip install cmake,或使用 Kitware 官方二进制 |
| #error -- unsupported GNU version! gcc versions later than … are not supported! | GCC 比当前 CUDA 支持的主机编译器新 | 安装 CUDA 支持的 GCC,用 -DCMAKE_C_COMPILER/-DCMAKE_CXX_COMPILER 指定;或升级 CUDA |
| nvcc fatal : Unsupported gpu architecture 'compute_xx' | CMAKE_CUDA_ARCHITECTURES 或旧 GMX_CUDA_TARGET_SM 中写了当前 CUDA 不支持的架构(例如 CUDA 13 中的 61) | 改为显卡实际计算能力;计算能力低于 7.5 的显卡改用 CUDA 12.x |
| undefined reference to `void gmx::nbnxn_kernel_prune_cuda<true>(…)' | GROMACS 2025.0–2025.2 配 CUDA 13 | 升级到 2025.3 以上,或改用 CUDA 12.9,或加 -DCMAKE_CUDA_FLAGS=-static-global-template-stub=false |
| Unknown CUDA architecture: native / ptxas error : Value of threads per SM … is out of range | CMake 版本旧或使用旧源码 | 更新源码,删除 build 目录后重新配置,显式写 -DCMAKE_CUDA_ARCHITECTURES=86-real 这类值 |
| Cannot find FFTW 3 (with correct precision - libfftw3f for mixed-precision GROMACS …) | 只装了双精度 FFTW,或 CMAKE_PREFIX_PATH 未指向 FFTW | 使用 -DGMX_BUILD_OWN_FFTW=ON;需要离线编译时加 -DGMX_BUILD_OWN_FFTW_URL=绝对路径 |
| Cannot build FFTW3 automatically (GMX_BUILD_OWN_FFTW=ON) in Visual Studio / with ninja | Windows 原生构建或使用 Ninja 生成器时不支持自动构建 FFTW | 改用 -DGMX_FFT_LIBRARY=mkl,或先自行编译 FFTW |
| WARNING: The gmx binary does not include support for the CUDA architecture of the GPU ID #0 | 编译时指定的 CMAKE_CUDA_ARCHITECTURES 不含该显卡架构 | 按日志建议的值重新编译,例如 -DCMAKE_CUDA_ARCHITECTURES=89 |
| Cannot run short-ranged nonbonded interactions on a GPU because no GPU is detected. | 二进制带 GPU 支持,但运行时找不到可用 GPU:驱动不可用,或 WSL 中装了 Linux 驱动 | 检查 nvidia-smi;WSL 中卸载 cuda-drivers 类软件包 |
| Nonbonded interactions on the GPU were requested with -nb gpu, but the GROMACS binary has been built without GPU support. | 二进制本身没有 GPU 支持,gmx --version 中 GPU support 一行为 disabled(本页用 conda-forge 2026.3 CPU 版实测) | 安装 CUDA 构建或按上文重新编译 |
| make 中途 Killed signal terminated program cc1plus | 编译内存不足,常见于 WSL2 和小内存虚拟机 | 减小 -j 的数值,或增加内存 |
| mdrun -plumed 在 MPI 并行时启动即报 MPI_ERR_COMM | 2026.0–2026.3 的缺陷 | 升级到 2026.4 |
核对
先运行 gmx --version,确认 GPU support 一行是 CUDA,CUDA targets 中包含你的显卡架构,CUDA driver 不低于 CUDA runtime。启用 PLUMED 接口的构建会在 Plumed support 一行显示状态。
然后跑一个水盒子。mdrun 的 -nb、-pme、-update 默认都是 auto:检测不到可用 GPU 时会静默改用 CPU,只有运行速度变慢。自检时显式写 gpu,GPU 不可用就会直接报错退出。
mkdir -p ~/gmx-gpu-test && cd ~/gmx-gpu-test
# 5 nm 立方水盒子,约 4000 个 SPC/E 水分子
gmx solvate -cs spc216.gro -box 5 5 5 -o water.gro
cat > topol.top <<'EOF'
#include "oplsaa.ff/forcefield.itp"
#include "oplsaa.ff/spce.itp"
[ system ]
SPC/E water box
[ molecules ]
EOF
echo "SOL $(grep -c OW water.gro)" >> topol.top
cat > em.mdp <<'EOF'
integrator = steep
emtol = 1000
nsteps = 5000
cutoff-scheme = Verlet
coulombtype = PME
rcoulomb = 1.0
rvdw = 1.0
EOF
cat > md.mdp <<'EOF'
integrator = md
dt = 0.002
nsteps = 25000
cutoff-scheme = Verlet
coulombtype = PME
rcoulomb = 1.0
rvdw = 1.0
tcoupl = V-rescale
tc-grps = System
tau-t = 0.1
ref-t = 300
gen-vel = yes
gen-temp = 300
constraints = h-bonds
nstcalcenergy = 100
nstenergy = 1000
nstlog = 5000
EOF
gmx grompp -f em.mdp -c water.gro -p topol.top -o em.tpr
gmx mdrun -s em.tpr -c em.gro -g em.log
gmx grompp -f md.mdp -c em.gro -p topol.top -o md.tpr
# 显式写 gpu:GPU 不可用时直接报错,不会静默回退到 CPU
gmx mdrun -s md.tpr -g md.log -nb gpu -pme gpu -update gpu -ntmpi 1
grep -A2 "Mapping of GPU IDs" md.log
grep -E "PP task|PME tasks" md.log
grep "Performance:" md.log GPU info:
Number of GPUs detected: 1
#0: NVIDIA NVIDIA GeForce RTX 4090, compute cap.: 8.9, ECC: no, stat: compatible
1 GPU selected for this run.
Mapping of GPU IDs to the 2 GPU tasks in the 1 rank on this node:
PP:0,PME:0
PP tasks will do non-perturbed short-ranged interactions on the GPU
PP task will update and constrain coordinates on the GPU
PME tasks will do all aspects on the GPU- stat: compatible:显卡被识别且架构已编译。显示 “not in set of targeted devices” 时需按显卡架构重新编译。
- Mapping of GPU IDs 一行列出 PP 和 PME:两类任务都在 GPU 上。只有 PP 时,PME 在 CPU 上计算。
- PP task will update and constrain coordinates on the GPU:已进入 GPU-resident 模式。显示 CPU 说明体系或参数不满足条件,例如使用了虚拟位点、质量或约束的自由能扰动、副本交换,或在区域分解下使用了 constraints = all-bonds。
- 日志中出现含 “does not include kernels compiled natively” 的 NOTE:GPU 内核通过 PTX 即时编译运行,性能可能下降,应按日志给出的架构值重新编译。
- Performance 一行的 ns/day:与 -nb cpu -pme cpu -update cpu 的结果对比,同一体系 GPU 版应快得多;两者接近说明 GPU 没有参与计算。
- 本页实测(CPU 对照,不代表 GPU 速度):conda-forge GROMACS 2026.3 CPU 版在 Apple M2(8 核,测试时机器上同时运行其他任务)上运行上面的脚本:gmx solvate 生成 4055 个水分子、12165 个原子;能量最小化 12 步达到 Fmax < 1000;mdrun 加 -nb gpu 时直接报 Nonbonded interactions on the GPU were requested with -nb gpu, but the GROMACS binary has been built without GPU support.;改用 -nb cpu -pme cpu -update cpu -ntmpi 1 后,50 ps 在机器负载高时为 14.4 ns/day,负载较低时(1 分钟平均负载约 13)用 -nsteps 10000 -resethway 测得 27.8 ns/day;md.log 中为 Using SIMD4xM 4x4 nonbonded short-range kernels,没有 Mapping of GPU IDs 和 PP task 行。GPU 版在同一体系上应快得多,两者接近说明 GPU 没有参与计算。
运行参数
GPU-resident 模式(-update gpu)下,官方建议把 nstcalcenergy 和温度、压力耦合间隔设为 50–100 步以上,因为频繁计算维里和能量的开销不会体现在日志的周期计数表中;同时使用 constraints = h-bonds,这既是 GPU-resident 的前提之一,也符合多数力场的参数化方式。
在同一张卡上并行跑多个模拟时,如果不加 -update gpu,也不开 MPS 或 MIG,NVIDIA 的测试中多模拟吞吐没有提升。单个 A100 跑 2.4 万原子的 RNAse 体系为 1,083 ns/day,跑 9.6 万原子的 ADH 体系为 378 ns/day(GROMACS 2021.2),可作为估算同级别显卡速度的参照。
| 场景 | 推荐命令 | 依据 |
|---|---|---|
| 单卡、单个模拟 | gmx mdrun -s md.tpr -nb gpu -pme gpu -update gpu -ntmpi 1 -ntomp <物理核数> | 有 GPU 时默认就是每卡一个 rank;显式写出是为了让失败可见 |
| CPU 较强、GPU 较弱 | gmx mdrun -s md.tpr -ntmpi 4 -nb gpu -pme cpu | 官方示例:长程 PME 留在 CPU,bonded 自动分配到 GPU |
| 单节点多卡 | gmx mdrun -s md.tpr -ntmpi 4 -nb gpu -pme gpu -npme 1 -update gpu | PME 在 GPU 上时 -npme 只能为 1;每卡 1–3 个 rank,GPU-resident 加直接通信时每卡 1 个 rank 最好 |
| 一张卡跑多个小体系 | 每个模拟单独 -update gpu,配合 CUDA MPS,并用 -pin on -pinoffset 分开 CPU 核 | NVIDIA 在 A100 上测得 2.4 万原子体系总吞吐提升 1.8 倍,9.6 万原子提升 1.3 倍;不加 -update gpu 时性能约低一半 |
| 节点与他人共享 | gmx mdrun -s md.tpr -gpu_id 1 -pin on -pinoffset 0 -nt 8 | -gpu_id 限定可用显卡;-pin 避免线程互相抢核 |
经验
以下来自计算化学公社 Sobereva 博客和 GROMACS 论坛,多数有一手文档可以对照。
单机并行不要编 MPI 版
经验做法:单台机器上用默认的 thread-MPI 加 OpenMP,比 MPI 版少一步安装,效率也更高;只有跨节点并行才编 -DGMX_MPI=ON,生成的程序名为 gmx_mpi。官方安装指南同样说明单机多核无需任何 MPI 设置。
国内下载 FFTW 慢就离线给路径
经验做法:GMX_BUILD_OWN_FFTW 在国内访问 fftw.org 常卡住。先用浏览器下载 fftw-3.3.10.tar.gz,再用 -DGMX_BUILD_OWN_FFTW_URL=绝对路径 交给 CMake,MD5 会自动校验。
虚拟机里 make -j 卡住
经验做法:VMware 等虚拟机中并行编译偶尔卡住或报错,去掉 -j 或改为 -j 4 重新 make。WSL2 中对应的现象通常是内存耗尽导致 cc1plus 被杀。
日志里出现 plain-C 内核或 Compiled SIMD is None 就重编
md.log 中 “Using plain-C-4x4 4x4 nonbonded short-range kernels” 或启动时 “Compiled SIMD is None, but AVX2_256 might be faster (see log).” 说明没有用上 SIMD,速度会慢数倍;正常构建显示的是 “Using SIMD4xM 4x4 nonbonded short-range kernels” 这类 SIMD 内核(以上为 GROMACS 2026.4 源码中的原文,SIMD4xM 一行为本页实测)。旧教程中的 “Using the slow plain C kernels” 是旧版本的写法。重新 cmake 时显式加 -DGMX_SIMD=AVX2_256(或 CPU 支持的最高指令集)。gcc 太旧不支持 AVX-512 而报错时,也可以退到 AVX2_256。
双精度版另装一份
经验做法:简正振动分析的能量极小化和 Hessian 对角化需要双精度,加 -DGMX_DOUBLE=ON 另编一份,程序名为 gmx_d,可与单精度版装在同一目录。双精度版不支持 GPU,速度约为单精度的一半,轨迹和能量文件大一倍。
同一张 4090,整机不同速度差 2 倍
GROMACS 论坛实测(2023 版,-nb gpu -bonded gpu -update gpu -ntomp 12):约 3 万原子体系在两台 4090 主机上分别约 900 和 1500 ns/day,约 10 万原子为 170 和 360 ns/day。开发者建议用完全相同的输入和命令(例如 -nsteps 100000 -ntmpi 1 -pin on -nb gpu -pme gpu -update gpu -bonded gpu)对比,再用 Nsight Systems 查看 GPU 内核耗时。估算自己机器的速度时,把这组数当作同代显卡的大致范围。
Sobereva 预编译的原生 Windows 版最高到 2020.6
Sobereva 在 sobereva.com/458 提供自己编译的 Windows 64 位版:2018.8 CPU 版,2019.6、2020.3 CUDA 版(AVX),2020.6 CUDA 版(AVX2,NVIDIA 驱动需 ≥ 471.11)。用法:解压后把 bin 目录加入 Path;没有装 Visual Studio 2019 的机器先装 VC_redist.x64;CUDA 版不需要装 CUDA toolkit,只要驱动够新。它是命令行程序,双击 gmx.exe 会闪退。这些版本没有 gmx dssp(2023 起)、新版 gmx hbond(2024 起)和自带的 amber19sb.ff(2026 起),适合在 Windows 上准备输入文件和练习;用当前版本做正式模拟,按上文走 WSL2 编译。
国内常被引用的安装教程,哪些已经过时
Jerkwin 的《GROMACS程序编译》页首标注“本手册已过时, 不再更新”,示例为 2016.4,用的是 -DGMX_GPU=on、-DFFTWF_INCLUDE_DIR 等写法;《GROMACS中文手册》仍有隐式溶剂(2019 版删除)和 group 截断方案(2020 版删除)的章节。Sobereva 的《GROMACS的安装方法》最近更新于 2026 年 5 月,gcc 和 cmake 的版本要求是新的,可以参考;文中 CUDA 部分仍写 -DCUDA_TOOLKIT_ROOT_DIR,GROMACS 2026 不再读取这个变量,要改用 -DCUDAToolkit_ROOT(见上文版本差异表)。同文还提到,新 gcc 编译老版本 GROMACS 也会失败,例如 Rocky Linux 9 的 gcc 11.2.1 编不了 2018.8。
PLUMED
GROMACS 2025 起源码自带 PLUMED 2.10 的接口,官方说明该接口兼容任意 PLUMED 版本。在非 Windows 系统上默认启用(GMX_USE_PLUMED=AUTO),编译时只需要系统提供 dlopen,不需要预先安装 PLUMED。运行时用环境变量 PLUMED_KERNEL 指向内核库,并加 -plumed plumed.dat。
原生接口不支持:ENERGY 集体变量、副本交换、λ 动力学;使用多于 1 个 thread-MPI rank 时 PLUMED 报错退出,所以单机运行加 -ntmpi 1,多 rank 需编译 MPI 版。2026.0–2026.3 中 MPI 并行的 mdrun -plumed 启动即中止,2026.4 已修复。
需要 ENERGY、多 walker 或 OPES multithermal 时仍要打补丁。补丁按 GROMACS 具体版本号提供:PLUMED 2.10.1(2026 年 7 月发布)提供 gromacs-2022.5、2023.5、2024.3、2025.0 四个补丁;gromacs-2026.0 补丁目前只在 PLUMED 的开发分支中。打补丁的流程是在 GROMACS 源码根目录、运行 cmake 之前执行 plumed patch -p,PLUMED 文档建议同时设置 -DGMX_THREAD_MPI=OFF -DGMX_MPI=ON。
GROMACS 文档中内核库写作 libPlumedKernel.so,PLUMED 默认安装的文件名是 libplumedKernel.so。Linux 文件名区分大小写,照抄文档会找不到文件。
# 1. 编译 PLUMED(与 GROMACS 无先后要求)
wget https://github.com/plumed/plumed2/releases/download/v2.10.1/plumed-2.10.1.tgz
tar xzf plumed-2.10.1.tgz && cd plumed-2.10.1
./configure --prefix=$HOME/opt/plumed-2.10.1
make -j $(nproc) && make install
# 2. GROMACS 2025/2026 编译时强制启用接口(AUTO 找不到 dlopen 时只打印一条 STATUS 信息并关闭接口,ON 会直接报错)
cmake .. -DGMX_GPU=CUDA -DGMX_USE_PLUMED=ON -DGMX_BUILD_OWN_FFTW=ON
gmx --version | grep -i plumed
# 3. 运行时指定内核库。PLUMED 实际文件名是 libplumedKernel.so(小写 p)
export PLUMED_KERNEL=$HOME/opt/plumed-2.10.1/lib/libplumedKernel.so
gmx mdrun -s md.tpr -plumed plumed.dat -ntmpi 1智能体
指令示例:“在一张 GPU 上准备 GROMACS 2026 GPU 环境,用 5 nm 水盒子分别以 -update gpu 和 -update cpu 各跑 50 ps,报告两者的 ns/day,并贴出 md.log 中的 GPU 映射行和 gmx --version 输出。”
智能体会在隔离云电脑中使用预装的 GROMACS 2026.3 GPU 版,或在需要其他版本时按本页命令编译;按任务租用 GPU;生成 topol.top、em.mdp、md.mdp 和 tpr 文件,运行两组模拟,从日志中提取 ns/day 和 GPU 映射行,最后对结果做对抗审阅,检查 GPU 是否确实参与计算。工作区保留脚本、参数文件、日志和结果,关闭本机后任务继续运行。
你仍需自己核对:论文方法部分写的 GROMACS 版本与实际使用的版本一致;md.log 中 update 与 PME 的执行位置符合预期;正式体系的力场、水模型和 mdp 参数由你决定,水盒子自检不能代替正式体系的平衡检查。
参考资料
- GROMACS 2026.4 Installation guide — 构建要求、CMake 选项、GPU 后端、FFTW、Windows 构建、make check 判断标准
- GROMACS 2026 Release notes: Miscellaneous — CUDA 相关 CMake 变量改名
- GROMACS 2025 Release notes: Portability — CMake 3.28、GCC 11、CUDA 12.1 最低版本
- GROMACS 2026.4 release notes — MPI 并行 mdrun -plumed 启动中止的修复
- GROMACS Known issues — Windows CUDA 构建的 OpenMP_CUDA 检测问题
- Getting good performance from mdrun — -nb/-pme/-update/-gputasks 语义、GPU-resident 条件、rank 数建议
- GROMACS Environment variables — GMX_DISABLE_GPU_DETECTION;已删除的 GMX_GPU_DD_COMMS
- Using PLUMED(GROMACS 参考手册) — PLUMED_KERNEL、-plumed 与原生接口限制
- CUDA on WSL User Guide(NVIDIA) — 驱动只装在 Windows、只装 cuda-toolkit 元包、WSL2 限制
- CUDA Features Archive(NVIDIA) — CUDA 13.0 移除 Maxwell、Pascal、Volta 的离线编译支持
- Working across file systems(Microsoft) — 文件放在 Linux 文件系统内
- Advanced settings configuration in WSL(Microsoft) — .wslconfig 默认内存为 Windows 内存的 50%
- conda-forge gromacs-feedstock — conda 构建的平台、CUDA 依赖与 SIMD 版本
- NGC GROMACS container — 容器最新标签与示例命令
- GROMACS 论坛:Installation Error on WSL2 with CUDA Toolkit — 2025.2 配 CUDA 13 的链接错误与变通方法
- GROMACS 论坛:CUDA compilation error (WSL2, RTX 3050) — native 架构与 ptxas 报错
- GROMACS 论坛:Make check failing when GPU enabled — GPU 测试超时的原因与 GMX_DISABLE_GPU_DETECTION 对照
- GROMACS 论坛:State of native PLUMED interface — 原生接口缺失的功能
- PLUMED patch for gromacs-2025.0 — 补丁新增功能与 thread-MPI 建议
- NVIDIA:Maximizing GROMACS Throughput with Multiple Simulations per GPU — A100 上的 ns/day、多模拟吞吐与 -update gpu 的影响
- Sobereva:GROMACS 的安装方法(计算化学公社博客) — 经验帖:MPI 版取舍、FFTW 下载、虚拟机编译、SIMD 与双精度经验
- GROMACS 论坛:Low GROMACS performance on RTX 4090 — 经验帖:两台 4090 主机的 ns/day 实测与开发者的对比方法
- Sobereva:GROMACS 的原生 Windows 版的编译和安装方法 — 预编译 Windows 版的版本、驱动要求与使用方法
- Jerkwin:GROMACS 程序编译 — 页首标注已过时;示例为 2016.4 的旧选项
- Jerkwin:GROMACS 中文手册 — 页首标注已过时;含隐式溶剂与 group 方案章节
- GROMACS 2019 Release notes: Removed functionality — 隐式溶剂在 2019 版删除
- GROMACS 2020 Release notes: Removed functionality — group 截断方案在 2020 版删除
- 清华大学 TUNA 镜像:Anaconda 镜像使用帮助 — conda-forge 的 custom_channels 与 mamba 的 mirrored_channels 写法