1. 12 May, 2026 2 commits
    • one's avatar
      Add experimental HIP PME fast grid level · 348a03e6
      one authored
      Introduce OPENMM_HIP_PME_FAST_GRID_LEVEL as a HIP-only experimental
      control for reducing automatically selected PME grid dimensions.  A
      positive level repeatedly steps each grid dimension down to the previous
      legal FFT size, while level 0 preserves the existing OpenMM behavior.
      
      Keep explicit user-provided PME grid parameters unchanged so the feature
      only affects automatic grid selection.  This is intended for performance
      and accuracy exploration, not as a default tuning policy.
      348a03e6
    • one's avatar
      Tune HIP LangevinMiddle launch block size · 97239ca6
      one authored
      Use explicit 128-thread launches for the three LangevinMiddle integration kernels to improve HIP throughput while
      preserving the existing PME launch heuristics.
      97239ca6
  2. 11 May, 2026 1 commit
    • one's avatar
      Tune HIP PME kernel launch block sizes · 20e4b551
      one authored
      Use explicit 128-thread block launches for selected HIP PME kernels that
      benefit from larger blocks.  Keep the platform default block size unchanged,
      and leave small-system grid indexing and charge spreading on the existing
      default launch configuration.
      
      The heuristic applies 128-thread launches to finishSpreadCharge on HIP, and
      uses 128-thread launches for findAtomGridIndex and gridSpreadCharge only for
      larger systems.  Coulomb PME and LJPME dispersion paths are handled in
      parallel, while interpolation and energy evaluation remain unchanged.
      20e4b551
  3. 10 May, 2026 1 commit
    • one's avatar
      Tune HIP neighbor-list launch heuristics · 4d20b76e
      one authored
      Apply heuristics for HIP neighbor-list construction:
      use fewer nonbonded force blocks for small neighbor-list systems, use two
      tiles per batch for larger atom-block counts, and increase the
      findBlocksWithInteractions thread block size for small atom-block counts.
      
      Standard concurrent validation shows no clear per-case regression and a
      small geomean throughput improvement over the current blocksPerCU baseline.
      4d20b76e
  4. 06 May, 2026 2 commits
    • one's avatar
      Add wave64 LDS spreading in HIP LJ-PME · 4e7070c2
      one authored
      4e7070c2
    • one's avatar
      Optimize HIP pair-list handling for CDNA LJPME · 939ecf28
      one authored
      - Use bitwise prefix accounting when storing sparse interactions as single pairs in the HIP pair-list kernel. This reduces the number of ballot operations needed to compute per-lane single-pair offsets.
      - For HIP CDNA single precision, raise MAX_BITS_FOR_PAIRS to 8 so more sparse interactions are emitted as single pairs instead of full tiles. Keep the existing double precision and RDNA thresholds unchanged.
      - Also simplify the HIP LJPME direct correction by computing alpha^2*r2
      939ecf28
  5. 29 Apr, 2026 1 commit
  6. 24 Apr, 2026 1 commit
  7. 17 Apr, 2026 2 commits
  8. 16 Apr, 2026 4 commits
  9. 06 Apr, 2026 1 commit
  10. 31 Mar, 2026 1 commit
  11. 30 Mar, 2026 1 commit
  12. 27 Mar, 2026 2 commits
  13. 05 Mar, 2026 1 commit
  14. 19 Feb, 2026 1 commit
  15. 10 Feb, 2026 2 commits
    • Peter Eastman's avatar
    • Evan Pretti's avatar
      GPU implementation of L-BFGS (#5198) · 4ab645ea
      Evan Pretti authored
      * Make reference/CPU minimizer into a kernel
      
      * Add per-platform support for GPU minimization
      
      * Initial implementation of GPU minimization
      
      * Fixes
      
      * Increase robustness when initial gradient is huge
      
      * Handle overflow leading to non-finite values gracefully
      
      * Handle large forces in single precision more robustly
      
      * Optimize kernels
      
      * Fix kernel launch size
      
      * Update banner years
      
      * Don't create MinimizeKernel until first minimization requested
      
      * Make some compile-time constants into kernel arguments
      
      * Consolidate scale calculation kernel
      
      * Condense alpha/beta reduction kernels using atomics
      
      * Condense line search dot kernels with reductions
      
      * Remove a download, and download grad norm separately
      
      * Asynchronously check lbfgs convergence condition
      
      * Restructure line search to avoid download waiting
      
      * Start line search preemptively in case CPU evaluation is not needed
      
      * In rare cases, constraint error might not decrease after one optimization round
      
      * Better handling of unsupported 64-bit atomics, use FLT_MAX
      
      * Pick gradient mode based on GPU vs. CPU evaluation
      
      * Rework getDiff/getScale reduction, remove reduceBuffer
      
      * Older CUDA might not like float hex literals
      
      * Fix error in a comment
      4ab645ea
  16. 09 Feb, 2026 1 commit
    • Peter Eastman's avatar
      API for querying devices (#5192) · add95438
      Peter Eastman authored
      * API for querying devices
      
      * CUDA and HIP implementations of getDevices()
      
      * Fix test failures
      
      * Fix test failures
      
      * CUDA returns correct devices even if no context has been created
      
      * Return a single device for Reference and CPU
      
      * Fix CI failure
      add95438
  17. 14 Dec, 2025 1 commit
    • Anton Gorenko's avatar
      Support ROCm 7 (#5162) · 07b738c5
      Anton Gorenko authored
      * Remove std::enable_if, warpRotateLeft is always used with TILE_SIZE
      
      * Do not use built-in warpSize in constexpr contexts
      
      Starting from ROCm 7 warpSize is no longer constexpr.
      findInteractingBlocks.hip uses it for sizes of __shared__ arrays.
      
      * Check if hipHostMallocNumaUser is allowed before using it
      07b738c5
  18. 13 Dec, 2025 1 commit
    • Anton Gorenko's avatar
      Fix uninitialized buffers in QTB (#5163) · bb5552c0
      Anton Gorenko authored
      adaptFrictionPart1 is executed first, it reads randomForce and
      segmentVelocity buffers before other kernels write them so they can
      contain garbage after allocation (cuMemAlloc/hipMalloc/clCreateBuffer
      do not clear allocated memory).
      bb5552c0
  19. 11 Dec, 2025 1 commit
    • Evan Pretti's avatar
      Add LCPO method (#5130) · adfd84c2
      Evan Pretti authored
      * Basic LCPO support
      
      * Add basic test for LCPO from a prmtop file
      
      * API for LCPOForce
      
      * Started LCPO reference implementation
      
      * Finished reference forces & test cases
      
      * Use other test for finite difference since grid might have discontinuous forces
      
      * Reference platform formatting
      
      * Initial implementation of CPU platform
      
      * Bugfixes
      
      * More vectorization and improve neighbor list query speed
      
      * Parallelize part of neighbor search
      
      * Check box size for LCPO with periodic boundary conditions
      
      * Fixes for updating parameters in context
      
      * GBSAOBCForce doesn't use first & last indices for updates, so no need for this optimization here
      
      * Changes to neighbor checking and optimization
      
      * Fixes and minor changes
      
      * Add global surface tension parameter
      
      * Only process half of the pairs in the neighbor list
      
      * Remove unnecessary checks
      
      * Initial version of common platform implementation
      
      * Asynchronously download neighbor list size
      
      * Debugging
      
      * Do pair precomputation in copyPairsToNeighborList
      
      * Recompute interactions instead of scanning neighbor list in inner loop
      
      * Condense position array before computations
      
      * Also make neighbor count download asynchronous on device
      
      * Fixes for kernel launching
      
      * Topology-based LCPO parameter assignment
      
      * Fixes, and use test system for LCPO with nucleic acids
      
      * Always raise instead of warn when LCPO parameters can't be assigned
      
      * Use Amber convention for phosphates
      adfd84c2
  20. 01 Dec, 2025 1 commit
  21. 13 Nov, 2025 1 commit
  22. 12 Nov, 2025 1 commit
    • Peter Eastman's avatar
      Created PythonForce (#5122) · 2fbed592
      Peter Eastman authored
      * Initial implementation of PythonForce
      
      * Continuing implementation of PythonForce
      
      * Tests for PythonForce
      
      * Fix memory leaks
      
      * Documentation for PythonForce
      
      * Fixed incorrect return type
      
      * Fix compilation error on Python older than 3.12
      
      * Handle all dtypes
      
      * Optimizations to PythonForce
      
      * Optimized getPositions()
      
      * Test all platforms
      
      * Fix test failures
      2fbed592
  23. 11 Nov, 2025 1 commit
  24. 06 Nov, 2025 1 commit
  25. 22 Oct, 2025 3 commits
  26. 21 Oct, 2025 1 commit
  27. 25 Sep, 2025 1 commit
  28. 23 Sep, 2025 1 commit
  29. 17 Sep, 2025 1 commit
  30. 12 Sep, 2025 1 commit
    • Evan Pretti's avatar
      Add constant potential method (#4870) · f55abcaa
      Evan Pretti authored
      
      
      * Initial implementation of C++ API
      
      * Add kernel interface and information for API generation
      
      * API updates for updating electrode parameters
      
      * Add serialization proxy for ConstantPotentialForce
      
      * Update file headers
      
      * Add CG error tolerance and fix units on getCharges() return value
      
      * Initial implementation of matrix solver
      
      * Fixes and conjugate gradient solver
      
      * Try to fix Linux and Windows builds
      
      * Make sure charge constraint target is on total charge
      
      * Restore handling of exceptions like NonbondedForce since they won't involve electrode atoms
      
      * Ameliorate numerical instability in constrained conjugate gradient
      
      * Fix uninitialized pointers, memory leak, and style
      
      * Set CG tolerance units in Python API
      
      * Test ConstantPotentialForce serialization
      
      * Read/write ExceptionsUsePeriodicBoundaryConditions as bool
      
      * Improve constrained conjugate gradient robustness to roundoff error accumulation
      
      * Recompute matrix if electrode atoms move due to setPositions()
      
      * Tolerance is now in gradient (potential) units again
      
      * Add neutralizing background correction
      
      * Add Python API tests
      
      * Fixes for CG and nonbonded exceptions
      
      * Add initial tests checking against existing NonbondedForce behavior
      
      * Expand test suite and fix some implementation issues
      
      * Add additional tests using larger reference system
      
      * Add Gaussian test
      
      * Finish test against reference computation
      
      * CPU platform implementation
      
      * Fixes for compilation on some platforms
      
      * Fixes for constant potential with AVX/AVX2
      
      * Test linking CPU PME library to constant potential test directly
      
      * Older SWIG versions don't support Python set to C++ set conversion
      
      * Add user guide entry
      
      * Increase speed of reference test
      
      * Conditional building constant potential CPU test is unreliable
      
      * Debugging
      
      * Miscellaneous fixes and improvements for CI
      
      * Cache charges so solver will not run if system and coordinates have not changed
      
      * Preconditioner flag, stability, and automatic detection improvements
      
      * Add GPU platform-specific constant potential kernel classes
      
      * PME and device-host I/O changes to support constant potential
      
      * Initial common constant potential implementation
      
      * Constant potential fixes:
      
      * Fix preconditioner PME position/charge save/restore logic
      
      * Fix reduction synchronization in constant potential solver kernels
      
      * Add double-float accumulation for conjugate gradient solver when
        double unsupported by hardware
      
      * Improve conditioning of a test system, and make sure particles are in or
      out of cutoff for consistency and ease of comparing between platforms
      
      * Reorder guess charges for CG when atom reordering changes positions
      
      * Remove PME queue for now
      
      * Trying to debug optimized direct space derivative kernel
      
      * Remove extraneous debugging lines
      
      * Style updates; just make CPU preconditioner double precision
      
      * Debugging updated optimized direct derivatives kernel for all but OpenCL CPU
      
      * OpenCL CPU implementation of direct space derivatives, and cleanup
      
      * Try to make test even shorter to not time out on CI
      
      * Temporary - Debugging
      
      * Debugging
      
      * Debugging
      
      * Debugging
      
      * Debugging
      
      * Remove debugging code and fix reduction synchronization
      
      * Fix other reductions
      
      * Debugging - are tests hanging or just slow on CI?
      
      * Debugging
      
      * Debugging
      
      * Fix macro for case when double precision is available on hardware
      
      * Remove changes for debugging again
      
      * Try to improve matrix solver cache locality by uploading transpose
      
      * Fixes for atom ordering and periodic images
      
      * Can't rely on reorder listener for cell offset updates
      
      * Test reducing number of contexts and timing for CI
      
      * Debugging
      
      * Remove timing code and revert debugging changes
      
      * Matrix solver and plasma term optimizations
      
      * Reduce CG solver kernel calls and downloads
      
      * Don't read back convergence flag from global memory
      
      * Update PME due to refactoring in master branch
      
      * Faster matrix solver (1st step)
      
      * Faster matrix solver for CUDA
      
      * Faster matrix solver compatibility with non-CUDA platforms
      
      * Matrix solver fixes
      
      * Use warp shuffle reductions when possible
      
      * Attempt to work around intermittent compiler crash in Intel CPU OpenCL
      
      * Optimize CG solver kernel 1
      
      * Rework CG solver so some kernels can use more than 1 block
      
      * Don't run out of shared memory
      
      * Asynchronously download convergence flag while clearing buffers
      
      ---------
      Co-authored-by: default avatarEvan Pretti <pretti@sh03-17n15.int>
      f55abcaa