alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
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
7#include "alpaka/acc/Tag.hpp"
11
12#ifdef ALPAKA_ACC_SYCL_ENABLED
13
14# include <sycl/sycl.hpp>
15
16namespace alpaka
17{
18 namespace detail
19 {
20 template<typename T>
21 struct DevGlobalTrait<TagCpuSycl, T>
22 {
23 // SYCL CPU implementation
24 using Type = sycl::ext::oneapi::experimental::device_global<T>;
25 };
26
27 template<typename T>
28 struct DevGlobalTrait<TagGpuSyclIntel, T>
29 {
30 // SYCL GPU implementation
31 using Type = sycl::ext::oneapi::experimental::device_global<T>;
32 };
33
34 template<typename T>
35 struct DevGlobalTrait<TagFpgaSyclIntel, T>
36 {
37 // SYCL FPGA implementation
38 using Type = sycl::ext::oneapi::experimental::device_global<T>;
39 };
40
41 template<typename T>
42 struct DevGlobalTrait<TagGenericSycl, T>
43 {
44 // generic SYCL implementation
45 using Type = sycl::ext::oneapi::experimental::device_global<T>;
46 };
47 } // namespace detail
48
49 // from device to host
50 template<typename TDev, bool TBlocking, typename TViewDst, typename TTypeSrc>
52 detail::QueueGenericSyclBase<TDev, TBlocking>& queue,
53 TViewDst&& viewDst,
54 sycl::ext::oneapi::experimental::device_global<TTypeSrc> const& viewSrc)
55 {
56 queue.getNativeHandle().memcpy(reinterpret_cast<void*>(getPtrNative(viewDst)), viewSrc);
57 }
58
59 // from host to device
60 template<typename TDev, bool TBlocking, typename TTypeDst, typename TViewSrc>
62 detail::QueueGenericSyclBase<TDev, TBlocking>& queue,
63 sycl::ext::oneapi::experimental::device_global<TTypeDst>& viewDst,
64 TViewSrc const& viewSrc)
65 {
66 queue.getNativeHandle().memcpy(viewDst, reinterpret_cast<void const*>(getPtrNative(viewSrc)));
67 }
68
69 // from device to host
70 template<typename TDev, bool TBlocking, typename TViewDst, typename TTypeSrc, typename TExtent>
72 detail::QueueGenericSyclBase<TDev, TBlocking>& queue,
73 TViewDst&& viewDst,
74 sycl::ext::oneapi::experimental::device_global<TTypeSrc> const& viewSrc,
75 TExtent extent)
76 {
78 auto size = static_cast<std::size_t>(getHeight(extent)) * static_cast<std::size_t>(getDepth(extent))
79 * static_cast<std::size_t>(getWidth(extent)) * sizeof(Elem);
80 queue.getNativeHandle().memcpy(reinterpret_cast<void*>(getPtrNative(viewDst)), viewSrc, size);
81 }
82
83 // from host to device
84 template<typename TDev, bool TBlocking, typename TTypeDst, typename TViewSrc, typename TExtent>
86 detail::QueueGenericSyclBase<TDev, TBlocking>& queue,
87 sycl::ext::oneapi::experimental::device_global<TTypeDst>& viewDst,
88 TViewSrc const& viewSrc,
89 TExtent extent)
90 {
92 auto size = static_cast<std::size_t>(getHeight(extent)) * static_cast<std::size_t>(getDepth(extent))
93 * static_cast<std::size_t>(getWidth(extent)) * sizeof(Elem);
94 queue.getNativeHandle().memcpy(viewDst, reinterpret_cast<void const*>(getPtrNative(viewSrc)), size);
95 }
96} // namespace alpaka
97#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:139
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