GLUED v0.1

Enhanced sampling that never leaves the GPU.

GLUED is an OpenMM plugin. Collective variables, bias deposition and the chain-rule force scatter all run as kernels inside OpenMM's per-step pipeline, so positions stay on the device between integration steps. Nothing crosses PCIe and the CPU never waits.

OpenMM 8.x on the CUDA, OpenCL and Reference platforms. Linux, Windows and macOS. Academic license, source build only. Measured against openmm-plumed on the benchmarks page.

opes_quickstart.py
 1import openmm as mm
 2import glued
 3
 4# One force. Temperature and PBC are set once.
 5force = glued.Force(pbc=True, temperature=300.0)
 6
 7# Register a CV from a plain Python list.
 8phi   = force.add_dihedral([4, 6, 8, 14])
 9
10# Bias it. OPES needs only sigma and a bias factor.
11force.add_opes(phi, sigma=0.35, gamma=10.0, pace=500)
12
13# Standard OpenMM from here.
14system.addForce(force)
15simulation.step(10_000_000)

One GPU context for CV evaluation, bias deposition and force scatter.

GLUED subclasses OpenMM's ForceImpl and adds its own NVRTC-compiled kernels to the per-step compute pipeline. There is no host-side buffer to download into and upload back. The benchmarks show what that round-trip costs a PLUMED bridge on the same hardware.

GPU device one ComputeContext 01 posq[] positions 02 CV kernel NVRTC-compiled 03 bias + scatter into the force buffer 0 bytes per step between CPU and GPU
Positionsnever leave posq[]
Forcesatomic-add into the OpenMM force buffer
Host sync per stepnone
Host trafficCOLVAR logging only, if you enable it

Build it once. Run on every platform OpenMM does.

The Reference, CUDA and OpenCL platforms build from one CMake invocation on Linux, Windows, WSL2 and macOS. There is no pip or conda package. You clone and build.