10#ifdef ALPAKA_ACC_SYCL_ENABLED
15 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
16 struct BufType<DevGenericSycl<TTag>, TElem, TDim, TIdx>
18 using type = BufGenericSycl<TElem, TDim, TIdx, TTag>;
22 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
23 struct DevType<BufGenericSycl<TElem, TDim, TIdx, TTag>>
25 using type = DevGenericSycl<TTag>;
29 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
30 struct GetDev<BufGenericSycl<TElem, TDim, TIdx, TTag>>
32 ALPAKA_FN_HOST static auto getDev(BufGenericSycl<TElem, TDim, TIdx, TTag>
const& buf) -> DevGenericSycl<TTag>
34 return buf.m_spBufImpl->m_dev;
39 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
40 struct DimType<BufGenericSycl<TElem, TDim, TIdx, TTag>>
46 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
47 struct ElemType<BufGenericSycl<TElem, TDim, TIdx, TTag>>
53 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
54 struct GetExtents<BufGenericSycl<TElem, TDim, TIdx, TTag>>
56 ALPAKA_FN_HOST auto operator()(BufGenericSycl<TElem, TDim, TIdx, TTag>
const& buf)
58 return buf.m_spBufImpl->m_extentElements;
63 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
64 struct GetPtrNative<BufGenericSycl<TElem, TDim, TIdx, TTag>>
68 return buf.m_spBufImpl->m_pMem;
73 return buf.m_spBufImpl->m_pMem;
78 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
79 struct GetPtrDev<BufGenericSycl<TElem, TDim, TIdx, TTag>, DevGenericSycl<TTag>>
82 BufGenericSycl<TElem, TDim, TIdx, TTag>
const& buf,
83 DevGenericSycl<TTag>
const& dev) -> TElem
const*
87 return buf.m_spBufImpl->m_pMem;
91 throw std::runtime_error(
"The buffer is not accessible from the given device!");
96 BufGenericSycl<TElem, TDim, TIdx, TTag>& buf,
97 DevGenericSycl<TTag>
const& dev) -> TElem*
101 return buf.m_spBufImpl->m_pMem;
105 throw std::runtime_error(
"The buffer is not accessible from the given device!");
111 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
112 struct GetOffsets<BufGenericSycl<TElem, TDim, TIdx, TTag>>
114 ALPAKA_FN_HOST auto operator()(BufGenericSycl<TElem, TDim, TIdx, TTag>
const& )
const -> Vec<TDim, TIdx>
121 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
122 struct IdxType<BufGenericSycl<TElem, TDim, TIdx, TTag>>
128 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
129 struct MakeConstBuf<BufGenericSycl<TElem, TDim, TIdx, TTag>>
132 -> ConstBufGenericSycl<TElem, TDim, TIdx, TTag>
134 return ConstBufGenericSycl<TElem, TDim, TIdx, TTag>(buf);
138 -> ConstBufGenericSycl<TElem, TDim, TIdx, TTag>
140 return ConstBufGenericSycl<TElem, TDim, TIdx, TTag>(std::move(buf));
145 template<
typename TElem,
typename TDim,
typename TIdx, concepts::Tag TTag>
146 struct BufAlloc<TElem, TDim, TIdx, DevGenericSycl<TTag>>
148 template<
typename TExtent>
150 -> BufGenericSycl<TElem, TDim, TIdx, TTag>
154# if ALPAKA_DEBUG >= ALPAKA_DEBUG_FULL
155 if constexpr(TDim::value == 0)
156 std::cout << __func__ <<
" ewb: " <<
sizeof(TElem) <<
'\n';
157 else if constexpr(TDim::value == 1)
159 auto const width =
getWidth(extent);
161 auto const widthBytes = width *
static_cast<TIdx
>(
sizeof(TElem));
162 std::cout << __func__ <<
" ew: " << width <<
" ewb: " << widthBytes <<
'\n';
164 else if constexpr(TDim::value == 2)
166 auto const width =
getWidth(extent);
169 auto const widthBytes = width *
static_cast<TIdx
>(
sizeof(TElem));
170 std::cout << __func__ <<
" ew: " << width <<
" eh: " << height <<
" ewb: " << widthBytes
171 <<
" pitch: " << widthBytes <<
'\n';
173 else if constexpr(TDim::value == 3)
175 auto const width =
getWidth(extent);
177 auto const depth =
getDepth(extent);
179 auto const widthBytes = width *
static_cast<TIdx
>(
sizeof(TElem));
180 std::cout << __func__ <<
" ew: " << width <<
" eh: " << height <<
" ed: " << depth
181 <<
" ewb: " << widthBytes <<
" pitch: " << widthBytes <<
'\n';
185 auto const& [nativeDev, nativeContext] = dev.getNativeHandle();
186 TElem* memPtr = sycl::malloc_device<TElem>(
190 auto deleter = [ctx = nativeContext](TElem* ptr) { sycl::free(ptr, ctx); };
192 return BufGenericSycl<TElem, TDim, TIdx, TTag>(dev, memPtr, std::move(deleter), extent);
197 template<
typename TDim, concepts::Tag TTag>
198 struct HasAsyncBufSupport<TDim, DevGenericSycl<TTag>> : std::false_type
203 template<concepts::Tag TTag>
204 struct HasMappedBufSupport<PlatformGenericSycl<TTag>> :
public std::true_type
209 template<concepts::Tag TTag,
typename TElem,
typename TDim,
typename TIdx>
210 struct BufAllocMapped<PlatformGenericSycl<TTag>, TElem, TDim, TIdx>
212 template<
typename TExtent>
215 PlatformGenericSycl<TTag>
const& platform,
216 TExtent
const& extent) -> BufCpu<TElem, TDim, TIdx>
222 auto ctx = platform.syclContext();
223 TElem* memPtr = sycl::malloc_host<TElem>(
static_cast<std::size_t
>(
getExtentProduct(extent)), ctx);
224 auto deleter = [ctx](TElem* ptr) { sycl::free(ptr, ctx); };
226 return BufCpu<TElem, TDim, TIdx>(host, memPtr, std::move(deleter), extent);
#define ALPAKA_DEBUG_MINIMAL_LOG_SCOPE
ALPAKA_NO_HOST_ACC_WARNING static ALPAKA_FN_HOST_ACC constexpr auto zeros() -> Vec< TDim, TVal >
Zero value constructor.
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto getExtentProduct(T const &object) -> Idx< T >
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto getHeight(TExtent const &extent=TExtent()) -> Idx< TExtent >
ALPAKA_FN_HOST auto makeConstBuf(TBuf const &buf)
Creates a constant buffer from the given mutable buffer.
ALPAKA_FN_HOST auto allocMappedBuf(DevCpu const &host, TPlatform const &platform, TExtent const &extent=TExtent())
Allocates pinned/mapped host memory, accessible by all devices in the given platform.
ALPAKA_FN_HOST auto getPtrNative(TView const &view) -> Elem< TView > const *
Gets the native pointer of the memory view.
ALPAKA_FN_HOST auto allocBuf(TDev const &dev, TExtent const &extent=TExtent())
Allocates memory on the given device.
ALPAKA_FN_HOST auto getDev(T const &t)
ALPAKA_FN_HOST auto getPtrDev(TView const &view, TDev const &dev) -> Elem< TView > const *
Gets the pointer to the view on the given device.
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto getDepth(TExtent const &extent=TExtent()) -> Idx< TExtent >
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto getWidth(TExtent const &extent=TExtent()) -> Idx< TExtent >