LJ combination rule kernels for OpenCL
commit74a72a9006248e0dce25c9a73cb6c74c7e18b769
authorSzilárd Páll <pall.szilard@gmail.com>
Tue, 1 Mar 2016 20:30:18 +0000 (1 21:30 +0100)
committerMark Abraham <mark.j.abraham@gmail.com>
Wed, 30 Mar 2016 18:25:56 +0000 (30 20:25 +0200)
tree86c6dc4fda6483f4923ebfc74c7f2efab3350e0e
parent001b6e76700a2228a60d28223f7fb37ed5b7d3be
LJ combination rule kernels for OpenCL

The current implementation enables combination rules for both AMD and
NVIDIA OpenCL (also ports the changes to the "nowarp" test/CPU kernel).

Like in the CUDA implementation, all kernels support it, but only for
plain cut-off are combination rules used.

Notes:
- On AMD tested on Hawaii, Fiji, Spectre and Oland devices;
  combination rules in all cases improve performance, although combined
  with the i-prefetching, the improvement is typically only ~10%.
- On NVIDIA tested on Kepler and Maxwell; in most cases the combination
  rule kernels are fastest.
  However, with certain inputs these kernels are 25% slower on Maxwell
  (e.g. pure water box, cut-off LJ, pot shift), but not on Kepler.
  This is likely a compiler mis-optimization, so we'll just leave the
  defaults the same as AMD.

Change-Id: I05396e000cdf93c1d872729e6b477192af152495
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl.cpp
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl_data_mgmt.cpp
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl_internal.h [new file with mode: 0644]
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl_jit_support.cpp
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl_kernel_amd.clh
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl_kernel_nowarp.clh
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl_kernel_nvidia.clh
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl_kernel_utils.clh
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl_kernels.clh
src/gromacs/mdlib/nbnxn_ocl/nbnxn_ocl_types.h