SYCL NBNXM offload support
authorAndrey Alekseenko <al42and@gmail.com>
Thu, 18 Feb 2021 11:51:28 +0000 (11:51 +0000)
committerAndrey Alekseenko <al42and@gmail.com>
Thu, 18 Feb 2021 11:51:28 +0000 (11:51 +0000)
commitb8fb87a0c5d65014d97e618241a0075875a81199
tree1d993840b47e37589f1d18b44abdf86d8ace5b52
parent30313e82e1f1fff3c51a5475c43243477118b69b
SYCL NBNXM offload support

Associated changes:

- Added function stubs to PME: necessary for compilation.
- Stricter SYCL hardware compatibility checks: limits on subgroup size
  and the availability of local memory.
- The kernel implementation and overall logic closely follow the OpenCL
  implementation. Divergences are documented locally.

Limitations:

- No fine-grained timings yet.
- Code-duplication with CUDA and OpenCL: see #2608.
- Minor differences in local/nonlocal synchronization: see #3895,
  related to #2608.
- Only the OpenCL backend was extensively tested. LevelZero works fine
  without MPI but stalls due to a known bug. The fix for DPCPP runtime
  is available, but not yet part of any OneAPI release:
  https://github.com/intel/llvm/pull/3045.
- The complex/position-restraints regression test fails: see #3846.
- No performance tuning: see #3847.

Performance on rnase-cubic system is similar to OpenCL implementation.
29 files changed:
src/gromacs/ewald/CMakeLists.txt
src/gromacs/ewald/pme_gpu_3dfft.h
src/gromacs/ewald/pme_gpu_internal.cpp
src/gromacs/ewald/pme_gpu_sycl_stubs.cpp [new file with mode: 0644]
src/gromacs/ewald/pme_gpu_types_host.h
src/gromacs/ewald/pme_gpu_types_host_impl.h
src/gromacs/gpu_utils/CMakeLists.txt
src/gromacs/gpu_utils/gpu_macros.h
src/gromacs/gpu_utils/gpu_utils.cpp
src/gromacs/gpu_utils/gputraits_sycl.h
src/gromacs/gpu_utils/syclutils.cpp [new file with mode: 0644]
src/gromacs/gpu_utils/syclutils.h [new file with mode: 0644]
src/gromacs/hardware/device_management_sycl.cpp
src/gromacs/listed_forces/gpubonded_impl.cpp
src/gromacs/nbnxm/CMakeLists.txt
src/gromacs/nbnxm/gpu_common.h
src/gromacs/nbnxm/gpu_types_common.h
src/gromacs/nbnxm/nbnxm_gpu_data_mgmt.cpp
src/gromacs/nbnxm/pairlistparams.h
src/gromacs/nbnxm/sycl/CMakeLists.txt [new file with mode: 0644]
src/gromacs/nbnxm/sycl/nbnxm_sycl.cpp [new file with mode: 0644]
src/gromacs/nbnxm/sycl/nbnxm_sycl_data_mgmt.cpp [new file with mode: 0644]
src/gromacs/nbnxm/sycl/nbnxm_sycl_kernel.cpp [new file with mode: 0644]
src/gromacs/nbnxm/sycl/nbnxm_sycl_kernel.h [new file with mode: 0644]
src/gromacs/nbnxm/sycl/nbnxm_sycl_kernel_pruneonly.cpp [new file with mode: 0644]
src/gromacs/nbnxm/sycl/nbnxm_sycl_kernel_pruneonly.h [new file with mode: 0644]
src/gromacs/nbnxm/sycl/nbnxm_sycl_kernel_utils.h [new file with mode: 0644]
src/gromacs/nbnxm/sycl/nbnxm_sycl_types.h [new file with mode: 0644]
src/testutils/TestMacros.cmake