alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
ConstBufGenericSyclTraits.hpp
Go to the documentation of this file.
1/* Copyright 2024 Jan Stephan, Luca Ferragina, Aurora Perego, Andrea Bocci, Anton Reinhard
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
10
11#ifdef ALPAKA_ACC_SYCL_ENABLED
12
13namespace alpaka::trait
14{
15 //! The SYCL device memory const-buffer type trait specialization.
16 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
17 struct ConstBufType<DevGenericSycl<TTag>, TElem, TDim, TIdx>
18 {
19 using type = ConstBufGenericSycl<TElem, TDim, TIdx, TTag>;
20 };
21
22 //! The ConstBufGenericSycl device type trait specialization.
23 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
24 struct DevType<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
25 {
26 using type = DevGenericSycl<TTag>;
27 };
28
29 //! The ConstBufGenericSycl device get trait specialization.
30 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
31 struct GetDev<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
32 {
33 ALPAKA_FN_HOST static auto getDev(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf)
34 {
35 return buf.m_spBufImpl->m_dev;
36 }
37 };
38
39 //! The ConstBufGenericSycl dimension getter trait specialization.
40 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
41 struct DimType<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
42 {
43 using type = TDim;
44 };
45
46 //! The ConstBufGenericSycl memory element type get trait specialization.
47 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
48 struct ElemType<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
49 {
50 using type = TElem const;
51 };
52
53 //! The ConstBufGenericSycl extent get trait specialization.
54 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
55 struct GetExtents<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
56 {
57 ALPAKA_FN_HOST auto operator()(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf) const
58 {
59 return buf.m_spBufImpl->m_extentElements;
60 }
61 };
62
63 //! The ConstBufGenericSycl native pointer get trait specialization.
64 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
65 struct GetPtrNative<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
66 {
67 ALPAKA_FN_HOST static auto getPtrNative(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf)
68 -> TElem const*
69 {
70 return buf.m_spBufImpl->m_pMem;
71 }
72 };
73
74 //! The ConstBufGenericSycl pointer on device get trait specialization.
75 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
76 struct GetPtrDev<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>, DevGenericSycl<TTag>>
77 {
78 ALPAKA_FN_HOST static auto getPtrDev(
79 ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf,
80 DevGenericSycl<TTag> const& dev) -> TElem const*
81 {
82 if(dev == getDev(buf))
83 {
84 return buf.m_spBufImpl->m_pMem;
85 }
86 else
87 {
88 throw std::runtime_error("The buffer is not accessible from the given device!");
89 }
90 }
91 };
92
93 //! The ConstBufGenericSycl offset get trait specialization.
94 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
95 struct GetOffsets<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
96 {
97 ALPAKA_FN_HOST auto operator()(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const&) const -> Vec<TDim, TIdx>
98 {
100 }
101 };
102
103 //! The ConstBufGenericSycl idx type trait specialization.
104 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
105 struct IdxType<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
106 {
107 using type = TIdx;
108 };
109
110 //! The BufCpu pointer on SYCL device get trait specialization.
111 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
112 struct GetPtrDev<BufCpu<TElem, TDim, TIdx>, DevGenericSycl<TTag>>
113 {
114 static auto getPtrDev(BufCpu<TElem, TDim, TIdx> const& buf, DevGenericSycl<TTag> const&) -> TElem const*
115 {
116 return getPtrNative(buf);
117 }
118 };
119
120 //! The MakeConstBuf trait for constant Sycl buffers.
121 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
122 struct MakeConstBuf<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
123 {
124 ALPAKA_FN_HOST static auto makeConstBuf(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf)
125 -> ConstBufGenericSycl<TElem, TDim, TIdx, TTag>
126 {
127 return buf;
128 }
129
130 ALPAKA_FN_HOST static auto makeConstBuf(ConstBufGenericSycl<TElem, TDim, TIdx, TTag>&& buf)
131 -> ConstBufGenericSycl<TElem, TDim, TIdx, TTag>
132 {
133 return buf;
134 }
135 };
136} // namespace alpaka::trait
137
138#endif
ALPAKA_NO_HOST_ACC_WARNING static ALPAKA_FN_HOST_ACC constexpr auto zeros() -> Vec< TDim, TVal >
Zero value constructor.
Definition Vec.hpp:99
#define ALPAKA_FN_HOST
Definition Common.hpp:40
The accelerator traits.
ALPAKA_FN_HOST auto makeConstBuf(TBuf const &buf)
Creates a constant buffer from the given mutable buffer.
Definition Traits.hpp:212
ALPAKA_FN_HOST auto getPtrNative(TView const &view) -> Elem< TView > const *
Gets the native pointer of the memory view.
Definition Traits.hpp:165
ALPAKA_FN_HOST auto getDev(T const &t)
Definition Traits.hpp:68
ALPAKA_FN_HOST auto getPtrDev(TView const &view, TDev const &dev) -> Elem< TView > const *
Gets the pointer to the view on the given device.
Definition Traits.hpp:186