alpaka
Abstraction Library for Parallel Kernel Acceleration
DeviceGlobalGenericSycl.hpp
Go to the documentation of this file.
1 /* Copyright 2024 Aurora Perego
2  * SPDX-License-Identifier: MPL-2.0
3  */
4 
5 #pragma once
6 
9 
10 #ifdef ALPAKA_ACC_SYCL_ENABLED
11 
12 # include <sycl/sycl.hpp>
13 
14 namespace alpaka
15 {
16  namespace detail
17  {
18  template<typename T>
19  struct DevGlobalTrait<TagCpuSycl, T>
20  {
21  // SYCL CPU implementation
22  using Type = sycl::ext::oneapi::experimental::device_global<T>;
23  };
24 
25  template<typename T>
26  struct DevGlobalTrait<TagGpuSyclIntel, T>
27  {
28  // SYCL GPU implementation
29  using Type = sycl::ext::oneapi::experimental::device_global<T>;
30  };
31 
32  template<typename T>
33  struct DevGlobalTrait<TagFpgaSyclIntel, T>
34  {
35  // SYCL FPGA implementation
36  using Type = sycl::ext::oneapi::experimental::device_global<T>;
37  };
38 
39  template<typename T>
40  struct DevGlobalTrait<TagGenericSycl, T>
41  {
42  // generic SYCL implementation
43  using Type = sycl::ext::oneapi::experimental::device_global<T>;
44  };
45  } // namespace detail
46 
47  // from device to host
48  template<typename TDev, bool TBlocking, typename TViewDst, typename TTypeSrc>
50  detail::QueueGenericSyclBase<TDev, TBlocking>& queue,
51  TViewDst&& viewDst,
52  sycl::ext::oneapi::experimental::device_global<TTypeSrc> const& viewSrc)
53  {
54  queue.getNativeHandle().memcpy(reinterpret_cast<void*>(getPtrNative(viewDst)), viewSrc);
55  }
56 
57  // from host to device
58  template<typename TDev, bool TBlocking, typename TTypeDst, typename TViewSrc>
60  detail::QueueGenericSyclBase<TDev, TBlocking>& queue,
61  sycl::ext::oneapi::experimental::device_global<TTypeDst>& viewDst,
62  TViewSrc const& viewSrc)
63  {
64  queue.getNativeHandle().memcpy(viewDst, reinterpret_cast<void const*>(getPtrNative(viewSrc)));
65  }
66 
67  // from device to host
68  template<typename TDev, bool TBlocking, typename TViewDst, typename TTypeSrc, typename TExtent>
70  detail::QueueGenericSyclBase<TDev, TBlocking>& queue,
71  TViewDst&& viewDst,
72  sycl::ext::oneapi::experimental::device_global<TTypeSrc> const& viewSrc,
73  TExtent extent)
74  {
76  auto size = static_cast<std::size_t>(getHeight(extent)) * static_cast<std::size_t>(getDepth(extent))
77  * static_cast<std::size_t>(getWidth(extent)) * sizeof(Elem);
78  queue.getNativeHandle().memcpy(reinterpret_cast<void*>(getPtrNative(viewDst)), viewSrc, size);
79  }
80 
81  // from host to device
82  template<typename TDev, bool TBlocking, typename TTypeDst, typename TViewSrc, typename TExtent>
84  detail::QueueGenericSyclBase<TDev, TBlocking>& queue,
85  sycl::ext::oneapi::experimental::device_global<TTypeDst>& viewDst,
86  TViewSrc const& viewSrc,
87  TExtent extent)
88  {
90  auto size = static_cast<std::size_t>(getHeight(extent)) * static_cast<std::size_t>(getDepth(extent))
91  * static_cast<std::size_t>(getWidth(extent)) * sizeof(Elem);
92  queue.getNativeHandle().memcpy(viewDst, reinterpret_cast<void const*>(getPtrNative(viewSrc)), size);
93  }
94 } // namespace alpaka
95 #endif
#define ALPAKA_FN_HOST
Definition: Common.hpp:40
The alpaka accelerator library.
ALPAKA_FN_HOST auto memcpy(TQueue &queue, alpaka::detail::DevGlobalImplGeneric< TTag, TTypeDst > &viewDst, TViewSrc const &viewSrc) -> void
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto getHeight(TExtent const &extent=TExtent()) -> Idx< TExtent >
Definition: Traits.hpp:108
ALPAKA_FN_HOST auto getPtrNative(TView const &view) -> Elem< TView > const *
Gets the native pointer of the memory view.
Definition: Traits.hpp:136
std::remove_volatile_t< typename trait::ElemType< TView >::type > Elem
The element type trait alias template to remove the ::type.
Definition: Traits.hpp:21
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto getDepth(TExtent const &extent=TExtent()) -> Idx< TExtent >
Definition: Traits.hpp:121
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto getWidth(TExtent const &extent=TExtent()) -> Idx< TExtent >
Definition: Traits.hpp:95