CUDA version of SETTLE algorithm with basic tests
authorArtem Zhmurov <zhmurov@gmail.com>
Wed, 27 Feb 2019 15:38:42 +0000 (16:38 +0100)
committerArtem Zhmurov <zhmurov@gmail.com>
Tue, 30 Apr 2019 15:19:14 +0000 (17:19 +0200)
commit02a92f23f651ff81784df71f3f17dcfff18ce32b
tree488f8341f2c02f6f40d748c46f7860b656af25c7
parent967d4d9c5c23c604055ff126ab61ea22802badc1
CUDA version of SETTLE algorithm with basic tests

CUDA-based GPU implementation of SETTLE. This is a part of
all-GPU loop. Can work isolated from other parts of the code
since coordinates are copied to (from) device before (after)
SETTLE kernel call. The velocity update as well as virial
evaluations can be enabled.

To enable, set GMX_SETTLE_GPU environment variable.

Limitations:
1. Does not work when domain decomposition is enabled.
2. Projection of the derivative is not implemented.
3. Not fully integrated/unified with the CPU version.

TODOs:
1. Multi-GPU case.
2. Better virial reduction. This is a more general feature,
   not only related to constraints.
5. More cleanup in constr.cpp needed.
6. Better unit tests.

Refs #2816, #2886

Change-Id: I218e1bf1f86a2351e189e3c27f950f45c06135a4
src/gromacs/mdlib/CMakeLists.txt
src/gromacs/mdlib/constr.cpp
src/gromacs/mdlib/settle_cuda.h [new file with mode: 0644]
src/gromacs/mdlib/settle_cuda_impl.cpp [new file with mode: 0644]
src/gromacs/mdlib/settle_cuda_impl.cu [new file with mode: 0644]
src/gromacs/mdlib/settle_cuda_impl.h [new file with mode: 0644]
src/gromacs/mdlib/tests/settle.cpp