1. 05 Sep, 2024 4 commits
    • Anton Gorenko's avatar
      Always use hipRTC, support Windows · b9c45d45
      Anton Gorenko authored
      * Unload all loaded modules in HipContext's destructor,
        HIP modules keep file desctriptors opened, but OpenMM never unloads
        modules leaking these file descriptors. This can cause crashinf of
        some scripts like test-openmm-platforms from openmmtools.
      * ROCm 6.0 defines operator* for complex types (that are typedefs for
        float2 and double2), they conflict with operators defined for vectors.
        This is fixed in newer ROCm versions.
      * Revert HIP_DYNAMIC_SHARED back to extern __shared__ (the macro is
        in the headers).
      * Reduce the speed of the HIP platform if there are no HIP devices in
        the system.
      b9c45d45
    • Anton Gorenko's avatar
      Optimize PME kernels · a0acfbc9
      Anton Gorenko authored
      * Compile with -munsafe-fp-atomics to enable fast hardware f32 atomic
        add on global memory on pre-MI100 GPUs;
      * Use fixed point charge spreading on other GPUs, otherwise float atomic
        add will be compiled as a slow CAS loop;
      * Tune block sizes, use executeKernelFlat;
      * Tune launch bounds of PME grid-related kernels: force the compiler to
        use all registers by limiting max waves per EU to 1.
      a0acfbc9
    • Anton Gorenko's avatar
      Optimize findInteractingBlocks · a96534c1
      Anton Gorenko authored
      Optimize findBlocksWithInteractions
      
      * Replace volatile shared mem accesses with shuffles;
      * Add NUM_TILES_IN_BATCH for processing block1 by multiple warps
        (for small systems);
      * Cherry-pick missing changes from .cu;
      * Tune MAX_BITS_FOR_PAIRS depending on device and the system size;
      * Store single pairs immediately (if there are any), this allows not to
        store flags to shared memory and filter buffer and flagsBuffer after
        saving single pairs;
      * Use fma explicitly and sign bit for better device code;
      * Use CDNA's MFMA with singe/mixed precision;
      * On CDNA the coarse grained stage processes warpSize blocks for
        one block1, the fine grained stage checks atoms of two block2 vs atoms
        of the same block1, singlePairs and interactingAtoms are also stored
        by warps, not half-warps;
      
      Optimize findBlockBounds
      
      * Use shuffles;
      * Use executeKernelFlat;
      * Process 2 tiles per warp 64 on CDNA;
      * Use more uniformly distributed keys when sorting blocks;
      
      Use compareInt2LargeSIMD when tile size < SIMD width
      
      Fix exclusion tiles sorting on AMD CDNA (64 threads per wave)
      
          The nonbonded kernel uses USE_NEIGHBOR_LIST (useNeighborList)
          so host code also must check it instead of useCutoff.
      
          See also https://github.com/openmm/openmm/issues/3462
      a96534c1
    • Anton Gorenko's avatar
      Optimize computeNonbonded · 67f5644d
      Anton Gorenko authored
      * All AMD GPUs support shuffle, double precision and 64-bit int atomics;
      * Remove unused code: !ENABLE_SHUFFLE code paths in nonbonded.hip;
      * Use intrinsics in single-precision;
      * Use realToFixedPoint (faster float32-to-int64);
      * Remove shared atomIndices, use shuffles;
      * Check early if atoms are in the cutoff range, sometimes all lanes in
        a warp can skip computations, single pairs can also skip useless
        atomics with zero values;
      * Remove volatile skipTiles access, use shuffles;
      * Distribute work for warps in a strided order;
      * Skip warps that may be still busy in the first loop;
      * Unify conditions for excluded atoms with `includeInteraction`;
      * Move multiprocessors to HipContext;
      * Increase number of warps for computeNonbonded;
      * Disable packed math for >=MI200 (it affects performance of some
        kernels like computeGKForces of amoebagk);
      * Remove defaultOptimizationOptions and createModule's optimizationFlags
        as they are never used;
      * Support -save-temps.
      67f5644d
  2. 01 Sep, 2024 2 commits
    • Anton Gorenko's avatar
      Optimize sorting kernels and tune block sizes · 7279c539
      Anton Gorenko authored
      * Compile kernels with max block size of 256 threads:
        The default hipcc behavior since ROCm 4.2 is to compile kernels
        with 1024 threads unless __launch_bounds__ is specified. This
        significantly increases register pressure especially in heavy kernels
        (double precision, for example), requiring register spilling;
      * Optimize computeRange by using multiple blocks for reduction;
      * Use blocks of 1024 threads for computeBucketPositions - it is executed
        as a single work group so larger block size is faster;
      * Sort up-to lenghtNextPow2 instead of blockDim.x (faster for short
        buckets);
      * Optimize sortShortList2;
      * Optimize sortBuckets with bit instructions;
      * Decrease bucket size for non-uniform sorting: too many buckets may
        have sizes too large to sort in shared memory;
      * Add more sizes in tests.
      7279c539
    • Anton Gorenko's avatar
      Add hipification of CUDA platform · 89d2ff0e
      Anton Gorenko authored
      Port changes in CUDA backend to HIP
      
      Fix a warning about arithmetic operations on void* in HipArray::uploadSubArray
      
      Fix "Error Initializing context ROCm 5.3.0"
      
          https://github.com/StreamHPC/openmm-hip/issues/3
      
      
          hipDeviceSetCacheConfig returns hipErrorNotSupported on 5.3
      Co-authored-by: default avatarNick Curtis <nicholas.curtis@amd.com>
      89d2ff0e
  3. 12 Dec, 2023 1 commit
  4. 20 Jul, 2023 1 commit
  5. 13 Apr, 2022 1 commit
  6. 04 Oct, 2021 1 commit
  7. 22 May, 2021 1 commit
    • Peter Eastman's avatar
      Converted AMOEBA to common platform (#3120) · 8e8923a7
      Peter Eastman authored
      * Began converting AMOEBA to common platform
      
      * Beginning of OpenCL platform for AMOEBA
      
      * Converted AmoebaVdwForce to common platform
      
      * Cleaned up reference AMOEBA tests
      
      * Began converting AmoebaMultipoleForce to common platform
      
      * Continue converting AmoebaMultipoleForce to common platform
      
      * Bug fixes
      
      * Bug fix
      
      * Continue converting AmoebaMultipoleForce to common platform
      
      * Converting AmoebaMultipoleForce and AmoebaGeneralizedKirkwoodForce to common platform
      
      * Converting AmoebaMultipoleForce and AmoebaGeneralizedKirkwoodForce to common platform
      
      * Creating OpenCL version of AmoebaMultipoleForce and AmoebaGeneralizedKirkwoodForce
      
      * Creating OpenCL version of AmoebaMultipoleForce and AmoebaGeneralizedKirkwoodForce
      
      * Creating OpenCL version of AmoebaMultipoleForce and AmoebaGeneralizedKirkwoodForce
      
      * Converted arrays from real3 to real
      
      * Bug fix to OpenCL AmoebaGeneralizedKirkwoodForce
      
      * Fixes for AMD GPUs
      
      * Began converting HippoNonbondedForce to common platform
      
      * Continuing to convert HippoNonbondedForce to common platform
      
      * Continuing to convert HippoNonbondedForce to common platform
      
      * Working on unifying PME kernels
      
      * Fixed error on devices without 64 bit atomics
      
      * Unified PME kernels
      
      * Converted HippoNonbondedForce to common platform
      
      * Creating OpenCL implementation of HippoNonbondedForce
      
      * Continuing OpenCL implementation of HippoNonbondedForce
      
      * Mostly finished OpenCL implementation of HippoNonbondedForce
      
      * Eliminated three component vector types in host code
      
      * Fix errors on CPU OpenCL
      
      * Skip double precision tests for AMOEBA on OpenCL
      
      * Bug fixes
      
      * Bug fixes
      
      * Fixed compilation error
      8e8923a7
  8. 19 Mar, 2021 1 commit
  9. 22 Feb, 2021 1 commit
  10. 11 Feb, 2021 1 commit
  11. 08 Jan, 2020 1 commit
    • peastman's avatar
      Common compute framework to unify CUDA and OpenCL code (#2488) · edbc8407
      peastman authored
      * Began creating common compute framework to unify code between CUDA and OpenCL
      
      * Began OpenCL implementation of common compute framework
      
      * Common implementation of CMMotionRemover
      
      * CUDA implementation of common compute interface
      
      * Converted HarmonicBondForce to common compute API
      
      * Converted standard bonded forces to common compute API
      
      * Converted ExpressionUtilities to common compute API
      
      * Created ComputeParameterSet
      
      * Converted custom bonded forces to common compute API
      
      * Converted CustomCentroidBondForce to common compute API
      
      * Converted CustomManyParticleForce to common compute API
      
      * Moved lots of duplicate code from CudaContext and OpenCLContext to ComputeContext
      
      * Converted GayBerneForce to common compute API
      
      * Removed obsolete kernels
      
      * Converted verlet integrators to common compute API
      
      * Converted Langevin and Brownian integrators to common compute API
      
      * Converted CustomIntegrator to common compute API
      
      * Converted CustomNonbondedForce to common compute API
      
      * Removed uses of a deprecated API
      
      * Fixed failing test cases
      
      * Converted GBSAOBCForce to common compute API
      
      * Began converting CustomGBForce to common compute API
      
      * Finished converting CustomGBForce to common compute API
      
      * Merged duplicated code in CudaIntegrationUtilities and OpenCLIntegrationUtilities
      
      * Converted RMSDForce and AndersenThermostat to common compute API
      
      * Converted CustomHbondForce to common compute API
      
      * Merged scripts for encoding kernel sources
      
      * Converted Drude plugin to common compute API
      
      * Fixed errors in CMake scripts
      
      * Attempt at fixing errors on Windows
      
      * Added discussion of common compute API to developer guide
      
      * Added Windows export macro for common classes
      
      * Fixed error in CMMotionRemover
      
      * Ubdated travis to newer Ubuntu version
      
      * Fixed errors on CPU OpenCL
      
      * Fixed Windows linking errors
      
      * Added missing pragma for 32 bit atomics
      
      * Replaced long long with mm_long
      
      * More fixes to Windows linking
      
      * Bug fix
      edbc8407
  12. 14 Jun, 2019 1 commit
  13. 29 May, 2018 1 commit
  14. 12 Feb, 2018 1 commit
  15. 02 Feb, 2018 1 commit
  16. 19 Jun, 2017 1 commit
  17. 16 Jun, 2017 1 commit
  18. 15 Feb, 2017 1 commit
  19. 05 Aug, 2016 1 commit
  20. 27 Jul, 2016 1 commit
  21. 25 May, 2016 1 commit
  22. 25 Oct, 2015 1 commit
  23. 15 May, 2015 1 commit
  24. 13 Feb, 2015 1 commit
  25. 07 Jan, 2015 1 commit
  26. 05 Jan, 2015 1 commit
  27. 08 Oct, 2014 1 commit
  28. 13 Dec, 2013 1 commit
  29. 08 Nov, 2013 1 commit
  30. 01 Aug, 2013 1 commit
  31. 30 Jul, 2013 1 commit
  32. 08 Jul, 2013 1 commit
  33. 28 Jun, 2013 1 commit
  34. 27 Jun, 2013 1 commit
  35. 21 Jun, 2013 1 commit
  36. 28 May, 2013 1 commit