Gromacs
2021-sycl
|
Computes forces and energies for short-range pair-interactions based on the Verlet algorithm. The algorithm uses pair-lists generated at fixed intervals as well as various flavors of pair interaction kernels implemented for a wide range of CPU and GPU architectures.
The module includes support for flavors of Coulomb and Lennard-Jones interaction treatment implemented for a large range of SIMD instruction sets for CPU architectures as well as in CUDA and OpenCL for GPU architectures. Additionally there is a reference CPU non-SIMD and a reference CPU for GPU pair-list setup interaction kernel.
The implementation of the kernels is based on the cluster non-bonded algorithm which in the code is referred to as the NxM algorithms ("nbnxm_" prefix); for details of the algorithm see DOI:10.1016/j.cpc.2013.06.003.
Algorithmically, the non-bonded computation has two different modes: A "classical" mode: generate a list every nstlist steps containing at least all atom pairs up to a distance of rlistOuter and compute pair interactions for all pairs that are within the interaction cut-off. A "dynamic pruning" mode: generate an "outer-list" up to cut-off rlistOuter every nstlist steps and prune the outer-list using a cut-off of rlistInner every nstlistPrune steps to obtain a, smaller, "inner-list". This results in fewer interaction computations and allows for a larger nstlist. On a GPU, this dynamic pruning is performed in a rolling fashion, pruning only a sub-part of the list each (second) step. This way it can often overlap with integration and constraints on the CPU. Currently a simple heuristic determines which mode will be used.
TODO: add a summary list and brief descriptions of the different submodules: search, CPU kernels, GPU glue code + kernels.
TODO: add more authors!