Unify gpu_upload_shiftvec(...) function in NBNXM
authorArtem Zhmurov <zhmurov@gmail.com>
Thu, 25 Mar 2021 18:28:42 +0000 (18:28 +0000)
committerSzilárd Páll <pall.szilard@gmail.com>
Thu, 25 Mar 2021 18:28:42 +0000 (18:28 +0000)
Refs. #2608

src/gromacs/nbnxm/cuda/nbnxm_cuda_data_mgmt.cu
src/gromacs/nbnxm/nbnxm_gpu_data_mgmt.cpp
src/gromacs/nbnxm/opencl/nbnxm_ocl_data_mgmt.cpp
src/gromacs/nbnxm/sycl/nbnxm_sycl_data_mgmt.cpp

index be674962d6c97edaa4daefa4f3cc5a502bbaee6a..1edb0b8797ee2271298a68863e1faec3313212fc 100644 (file)
@@ -98,27 +98,6 @@ void gpu_init_platform_specific(NbnxmGpu* /* nb */)
     cuda_set_cacheconfig();
 }
 
-void gpu_upload_shiftvec(NbnxmGpu* nb, const nbnxn_atomdata_t* nbatom)
-{
-    NBAtomData*         adat        = nb->atdat;
-    const DeviceStream& localStream = *nb->deviceStreams[InteractionLocality::Local];
-
-    /* only if we have a dynamic box */
-    if (nbatom->bDynamicBox || !adat->shiftVecUploaded)
-    {
-        static_assert(sizeof(adat->shiftVec[0]) == sizeof(nbatom->shift_vec[0]),
-                      "Sizes of host- and device-side shift vectors should be the same.");
-        copyToDeviceBuffer(&adat->shiftVec,
-                           reinterpret_cast<const Float3*>(nbatom->shift_vec.data()),
-                           0,
-                           SHIFTS,
-                           localStream,
-                           GpuApiCallBehavior::Async,
-                           nullptr);
-        adat->shiftVecUploaded = true;
-    }
-}
-
 void gpu_free(NbnxmGpu* nb)
 {
     if (nb == nullptr)
index ca39376595911b3271657ee1a357d5c641fc1da7..c545a10fddd86f982e3792ab2f17939ecd1a686d 100644 (file)
@@ -63,6 +63,7 @@
 #include "nbnxm_gpu_data_mgmt.h"
 
 #include "gromacs/gpu_utils/device_stream_manager.h"
+#include "gromacs/gpu_utils/gputraits.h"
 #include "gromacs/gpu_utils/pmalloc.h"
 #include "gromacs/hardware/device_information.h"
 #include "gromacs/mdtypes/interaction_const.h"
@@ -440,6 +441,25 @@ NbnxmGpu* gpu_init(const gmx::DeviceStreamManager& deviceStreamManager,
     return nb;
 }
 
+void gpu_upload_shiftvec(NbnxmGpu* nb, const nbnxn_atomdata_t* nbatom)
+{
+    NBAtomData*         adat        = nb->atdat;
+    const DeviceStream& localStream = *nb->deviceStreams[InteractionLocality::Local];
+
+    /* only if we have a dynamic box */
+    if (nbatom->bDynamicBox || !adat->shiftVecUploaded)
+    {
+        copyToDeviceBuffer(&adat->shiftVec,
+                           gmx::asGenericFloat3Pointer(nbatom->shift_vec),
+                           0,
+                           SHIFTS,
+                           localStream,
+                           GpuApiCallBehavior::Async,
+                           nullptr);
+        adat->shiftVecUploaded = true;
+    }
+}
+
 //! This function is documented in the header file
 void gpu_init_pairlist(NbnxmGpu* nb, const NbnxnPairlistGpu* h_plist, const InteractionLocality iloc)
 {
index 08da7ba983c871e61f0f094482461e329faef38f..1df8cbe58a10464895362d64f47d72fa141864d5 100644 (file)
@@ -160,28 +160,6 @@ void gpu_init_platform_specific(NbnxmGpu* nb)
     nbnxn_gpu_init_kernels(nb);
 }
 
-//! This function is documented in the header file
-void gpu_upload_shiftvec(NbnxmGpu* nb, const nbnxn_atomdata_t* nbatom)
-{
-    NBAtomData*         adat        = nb->atdat;
-    const DeviceStream& localStream = *nb->deviceStreams[InteractionLocality::Local];
-
-    /* only if we have a dynamic box */
-    if (nbatom->bDynamicBox || !adat->shiftVecUploaded)
-    {
-        static_assert(sizeof(Float3) == sizeof(nbatom->shift_vec[0]),
-                      "Sizes of host- and device-side shift vectors should be the same.");
-        copyToDeviceBuffer(&adat->shiftVec,
-                           reinterpret_cast<const Float3*>(nbatom->shift_vec.data()),
-                           0,
-                           SHIFTS,
-                           localStream,
-                           GpuApiCallBehavior::Async,
-                           nullptr);
-        adat->shiftVecUploaded = true;
-    }
-}
-
 /*! \brief Releases an OpenCL kernel pointer */
 static void free_kernel(cl_kernel* kernel_ptr)
 {
index 3998f833b51f7ab18ef723b8e0a96ce78bedd9eb..bff590c0a5104adf7391e30d5316dd985ddfa1aa 100644 (file)
@@ -61,27 +61,6 @@ void gpu_init_platform_specific(NbnxmGpu* /* nb */)
     // Nothing specific in SYCL
 }
 
-void gpu_upload_shiftvec(NbnxmGpu* nb, const nbnxn_atomdata_t* nbatom)
-{
-    NBAtomData*         adat        = nb->atdat;
-    const DeviceStream& localStream = *nb->deviceStreams[InteractionLocality::Local];
-
-    /* only if we have a dynamic box */
-    if (nbatom->bDynamicBox || !adat->shiftVecUploaded)
-    {
-        GMX_ASSERT(adat->shiftVec.elementSize() == sizeof(nbatom->shift_vec[0]),
-                   "Sizes of host- and device-side shift vectors should be the same.");
-        copyToDeviceBuffer(&adat->shiftVec,
-                           reinterpret_cast<const Float3*>(nbatom->shift_vec.data()),
-                           0,
-                           SHIFTS,
-                           localStream,
-                           GpuApiCallBehavior::Async,
-                           nullptr);
-        adat->shiftVecUploaded = true;
-    }
-}
-
 void gpu_free(NbnxmGpu* nb)
 {
     if (nb == nullptr)