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
9
10#ifdef ALPAKA_ACC_SYCL_ENABLED
11
12namespace alpaka::trait
13{
14 //! The SYCL device memory const-buffer type trait specialization.
15 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
16 struct ConstBufType<DevGenericSycl<TTag>, TElem, TDim, TIdx>
17 {
18 using type = ConstBufGenericSycl<TElem, TDim, TIdx, TTag>;
19 };
20
21 //! The ConstBufGenericSycl device type trait specialization.
22 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
23 struct DevType<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
24 {
25 using type = DevGenericSycl<TTag>;
26 };
27
28 //! The ConstBufGenericSycl device get trait specialization.
29 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
30 struct GetDev<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
31 {
32 ALPAKA_FN_HOST static auto getDev(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf)
33 {
34 return buf.m_spBufImpl->m_dev;
35 }
36 };
37
38 //! The ConstBufGenericSycl dimension getter trait specialization.
39 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
40 struct DimType<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
41 {
42 using type = TDim;
43 };
44
45 //! The ConstBufGenericSycl memory element type get trait specialization.
46 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
47 struct ElemType<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
48 {
49 using type = TElem const;
50 };
51
52 //! The ConstBufGenericSycl extent get trait specialization.
53 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
54 struct GetExtents<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
55 {
56 ALPAKA_FN_HOST auto operator()(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf) const
57 {
58 return buf.m_spBufImpl->m_extentElements;
59 }
60 };
61
62 //! The ConstBufGenericSycl native pointer get trait specialization.
63 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
64 struct GetPtrNative<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
65 {
66 ALPAKA_FN_HOST static auto getPtrNative(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf)
67 -> TElem const*
68 {
69 return buf.m_spBufImpl->m_pMem;
70 }
71 };
72
73 //! The ConstBufGenericSycl pointer on device get trait specialization.
74 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
75 struct GetPtrDev<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>, DevGenericSycl<TTag>>
76 {
77 ALPAKA_FN_HOST static auto getPtrDev(
78 ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf,
79 DevGenericSycl<TTag> const& dev) -> TElem const*
80 {
81 if(dev == getDev(buf))
82 {
83 return buf.m_spBufImpl->m_pMem;
84 }
85 else
86 {
87 throw std::runtime_error("The buffer is not accessible from the given device!");
88 }
89 }
90 };
91
92 //! The ConstBufGenericSycl offset get trait specialization.
93 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
94 struct GetOffsets<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
95 {
96 ALPAKA_FN_HOST auto operator()(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const&) const -> Vec<TDim, TIdx>
97 {
99 }
100 };
101
102 //! The ConstBufGenericSycl idx type trait specialization.
103 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
104 struct IdxType<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
105 {
106 using type = TIdx;
107 };
108
109 //! The BufCpu pointer on SYCL device get trait specialization.
110 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
111 struct GetPtrDev<BufCpu<TElem, TDim, TIdx>, DevGenericSycl<TTag>>
112 {
113 static auto getPtrDev(BufCpu<TElem, TDim, TIdx> const& buf, DevGenericSycl<TTag> const&) -> TElem const*
114 {
115 return getPtrNative(buf);
116 }
117 };
118
119 //! The MakeConstBuf trait for constant Sycl buffers.
120 template<typename TElem, typename TDim, typename TIdx, concepts::Tag TTag>
121 struct MakeConstBuf<ConstBufGenericSycl<TElem, TDim, TIdx, TTag>>
122 {
123 ALPAKA_FN_HOST static auto makeConstBuf(ConstBufGenericSycl<TElem, TDim, TIdx, TTag> const& buf)
124 -> ConstBufGenericSycl<TElem, TDim, TIdx, TTag>
125 {
126 return buf;
127 }
128
129 ALPAKA_FN_HOST static auto makeConstBuf(ConstBufGenericSycl<TElem, TDim, TIdx, TTag>&& buf)
130 -> ConstBufGenericSycl<TElem, TDim, TIdx, TTag>
131 {
132 return buf;
133 }
134 };
135} // namespace alpaka::trait
136
137#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:139
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:160