alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
ConstBufUniformCudaHipRtTraits.hpp
Go to the documentation of this file.
1/* Copyright 2025 Alexander Matthes, Benjamin Worpitz, Matthias Werner, René Widera, Andrea Bocci, Jan Stephan,
2 * Bernhard Manfred Gruber, Antonio Di Pilato, Anton Reinhard
3 * SPDX-License-Identifier: MPL-2.0
4 */
5
6#pragma once
7
13
14#if defined(ALPAKA_ACC_GPU_CUDA_ENABLED) || defined(ALPAKA_ACC_GPU_HIP_ENABLED)
15
16namespace alpaka::trait
17{
18 //! The CUDA/HIP RT device memory const-buffer type trait specialization.
19 template<typename TApi, typename TElem, typename TDim, typename TIdx>
24
25 //! The ConstBufUniformCudaHipRt device type trait specialization.
26 template<typename TApi, typename TElem, typename TDim, typename TIdx>
27 struct DevType<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>>
28 {
30 };
31
32 //! The ConstBufUniformCudaHipRt device get trait specialization.
33 template<typename TApi, typename TElem, typename TDim, typename TIdx>
34 struct GetDev<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>>
35 {
38 {
39 return buf.m_spBufImpl->m_dev;
40 }
41 };
42
43 //! The ConstBufUniformCudaHipRt dimension getter trait specialization.
44 template<typename TApi, typename TElem, typename TDim, typename TIdx>
45 struct DimType<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>>
46 {
47 using type = TDim;
48 };
49
50 //! The ConstBufUniformCudaHipRt memory element type get trait specialization.
51 template<typename TApi, typename TElem, typename TDim, typename TIdx>
52 struct ElemType<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>>
53 {
54 using type = TElem const;
55 };
56
57 //! The ConstBufUniformCudaHipRt extent get trait specialization.
58 template<typename TApi, typename TElem, typename TDim, typename TIdx>
59 struct GetExtents<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>>
60 {
62 {
63 return buf.m_spBufImpl->m_extentElements;
64 }
65 };
66
67 //! The ConstBufUniformCudaHipRt native pointer get trait specialization.
68 template<typename TApi, typename TElem, typename TDim, typename TIdx>
69 struct GetPtrNative<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>>
70 {
72 -> TElem const*
73 {
74 return buf.m_spBufImpl->m_pMem;
75 }
76 };
77
78 //! The ConstBufUniformCudaHipRt pointer on device get trait specialization.
79 template<typename TApi, typename TElem, typename TDim, typename TIdx>
80 struct GetPtrDev<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>, DevUniformCudaHipRt<TApi>>
81 {
84 DevUniformCudaHipRt<TApi> const& dev) -> TElem const*
85 {
86 if(dev == getDev(buf))
87 {
88 return buf.m_spBufImpl->m_pMem;
89 }
90 else
91 {
92 throw std::runtime_error("The buffer is not accessible from the given device!");
93 }
94 }
95 };
96
97 template<typename TApi, typename TElem, typename TDim, typename TIdx>
98 struct GetPitchesInBytes<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>>
99 {
102 {
103 if constexpr(TDim::value <= 1)
104 {
105 return alpaka::detail::calculatePitchesFromExtents<TElem>(buf.m_spBufImpl->m_extentElements);
106 }
107 else
108 {
109 return alpaka::detail::calculatePitchesFromExtentsAndPitch<TElem>(
110 buf.m_spBufImpl->m_extentElements,
111 buf.m_spBufImpl->m_rowPitchInBytes);
112 }
113 }
114 };
115
116 //! The ConstBufUniformCudaHipRt offset get trait specialization.
117 template<typename TApi, typename TElem, typename TDim, typename TIdx>
118 struct GetOffsets<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>>
119 {
125 };
126
127 //! The ConstBufUniformCudaHipRt idx type trait specialization.
128 template<typename TApi, typename TElem, typename TDim, typename TIdx>
129 struct IdxType<ConstBufUniformCudaHipRt<TApi, TElem, TDim, TIdx>>
130 {
131 using type = TIdx;
132 };
133
134 //! The ConstBufCpu pointer on CUDA/HIP device get trait specialization.
135 template<typename TApi, typename TElem, typename TDim, typename TIdx>
136 struct GetPtrDev<ConstBufCpu<TElem, TDim, TIdx>, DevUniformCudaHipRt<TApi>>
137 {
140 DevUniformCudaHipRt<TApi> const&) -> TElem const*
141 {
142 // TODO: Check if the memory is mapped at all!
143 TElem* pDev(nullptr);
144
145 ALPAKA_UNIFORM_CUDA_HIP_RT_CHECK(TApi::hostGetDevicePointer(
146 &pDev,
147 const_cast<void*>(reinterpret_cast<void const*>(getPtrNative(buf))),
148 0));
149
150 return pDev;
151 }
152 };
153
154 //! The MakeConstBuf trait for constant CUDA/HIP buffers.
155 template<typename TApi, typename TElem, typename TDim, typename TIdx>
170
171} // namespace alpaka::trait
172
173#endif
#define ALPAKA_UNIFORM_CUDA_HIP_RT_CHECK(cmd)
CUDA/HIP runtime error checking with log and exception.
The CPU memory buffer.
The CUDA/HIP RT device handle.
A n-dimensional vector.
Definition Vec.hpp:38
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 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
The memory const-buffer type trait.
Definition Traits.hpp:27
The device type trait.
Definition Traits.hpp:23
The dimension getter type trait.
Definition Traits.hpp:14
The element type trait.
Definition Traits.hpp:16
static ALPAKA_FN_HOST auto getDev(ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx > const &buf) -> DevUniformCudaHipRt< TApi >
The device get trait.
Definition Traits.hpp:27
ALPAKA_FN_HOST auto operator()(ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx > const &buf) const
The GetExtents trait for getting the extents of an object as an alpaka::Vec.
Definition Traits.hpp:37
ALPAKA_FN_HOST auto operator()(ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx > const &) const -> Vec< TDim, TIdx >
The GetOffsets trait for getting the offsets of an object as an alpaka::Vec.
Definition Traits.hpp:33
ALPAKA_FN_HOST auto operator()(ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx > const &buf) const -> Vec< TDim, TIdx >
Customization point for getPitchesInBytes. The default implementation uses the extent to calculate th...
Definition Traits.hpp:129
static ALPAKA_FN_HOST auto getPtrDev(ConstBufCpu< TElem, TDim, TIdx > const &buf, DevUniformCudaHipRt< TApi > const &) -> TElem const *
static ALPAKA_FN_HOST auto getPtrDev(ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx > const &buf, DevUniformCudaHipRt< TApi > const &dev) -> TElem const *
The pointer on device get trait.
Definition Traits.hpp:84
static ALPAKA_FN_HOST auto getPtrNative(ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx > const &buf) -> TElem const *
The native pointer get trait.
Definition Traits.hpp:80
The idx type trait.
Definition Traits.hpp:25
static ALPAKA_FN_HOST auto makeConstBuf(ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx > &&buf) -> ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx >
static ALPAKA_FN_HOST auto makeConstBuf(ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx > const &buf) -> ConstBufUniformCudaHipRt< TApi, TElem, TDim, TIdx >
The trait to transform a mutable buffer into a constant one.
Definition Traits.hpp:55