Skip to content

Commit f478157

Browse files
committed
Add specialisations of make_device_view with a Queue argument
1 parent 3914bc8 commit f478157

File tree

1 file changed

+42
-4
lines changed
  • HeterogeneousCore/AlpakaInterface/interface

1 file changed

+42
-4
lines changed

HeterogeneousCore/AlpakaInterface/interface/memory.h

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,27 +257,65 @@ namespace cms::alpakatools {
257257
using device_view = typename detail::view_type<TDev, T>::type;
258258

259259
template <typename T, typename TDev>
260-
std::enable_if_t<not std::is_array_v<T>, device_view<TDev, T>> make_device_view(TDev const& device, T& data) {
260+
std::enable_if_t<alpaka::isDevice<TDev> and not std::is_array_v<T>, device_view<TDev, T>> make_device_view(
261+
TDev const& device, T& data) {
261262
return alpaka::ViewPlainPtr<TDev, T, Dim0D, Idx>(&data, device, Scalar{});
262263
}
263264

264265
template <typename T, typename TDev>
265-
device_view<TDev, T[]> make_device_view(TDev const& device, T* data, Extent extent) {
266+
std::enable_if_t<alpaka::isDevice<TDev>, device_view<TDev, T[]>> make_device_view(TDev const& device,
267+
T* data,
268+
Extent extent) {
266269
return alpaka::ViewPlainPtr<TDev, T, Dim1D, Idx>(data, device, Vec1D{extent});
267270
}
268271

269272
template <typename T, typename TDev>
270-
std::enable_if_t<cms::is_unbounded_array_v<T> and not std::is_array_v<std::remove_extent_t<T>>, device_view<TDev, T>>
273+
std::enable_if_t<alpaka::isDevice<TDev> and cms::is_unbounded_array_v<T> and
274+
not std::is_array_v<std::remove_extent_t<T>>,
275+
device_view<TDev, T>>
271276
make_device_view(TDev const& device, T& data, Extent extent) {
272277
return alpaka::ViewPlainPtr<TDev, std::remove_extent_t<T>, Dim1D, Idx>(data, device, Vec1D{extent});
273278
}
274279

275280
template <typename T, typename TDev>
276-
std::enable_if_t<cms::is_bounded_array_v<T> and not std::is_array_v<std::remove_extent_t<T>>, device_view<TDev, T>>
281+
std::enable_if_t<alpaka::isDevice<TDev> and cms::is_bounded_array_v<T> and
282+
not std::is_array_v<std::remove_extent_t<T>>,
283+
device_view<TDev, T>>
277284
make_device_view(TDev const& device, T& data) {
278285
return alpaka::ViewPlainPtr<TDev, std::remove_extent_t<T>, Dim1D, Idx>(data, device, Vec1D{std::extent_v<T>});
279286
}
280287

288+
template <typename T, typename TQueue>
289+
std::enable_if_t<alpaka::isQueue<TQueue> and not std::is_array_v<T>, device_view<alpaka::Dev<TQueue>, T>>
290+
make_device_view(TQueue const& queue, T& data) {
291+
return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, T, Dim0D, Idx>(&data, alpaka::getDev(queue), Scalar{});
292+
}
293+
294+
template <typename T, typename TQueue>
295+
std::enable_if_t<alpaka::isQueue<TQueue>, device_view<alpaka::Dev<TQueue>, T[]>> make_device_view(TQueue const& queue,
296+
T* data,
297+
Extent extent) {
298+
return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, T, Dim1D, Idx>(data, alpaka::getDev(queue), Vec1D{extent});
299+
}
300+
301+
template <typename T, typename TQueue>
302+
std::enable_if_t<alpaka::isQueue<TQueue> and cms::is_unbounded_array_v<T> and
303+
not std::is_array_v<std::remove_extent_t<T>>,
304+
device_view<alpaka::Dev<TQueue>, T>>
305+
make_device_view(TQueue const& queue, T& data, Extent extent) {
306+
return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, std::remove_extent_t<T>, Dim1D, Idx>(
307+
data, alpaka::getDev(queue), Vec1D{extent});
308+
}
309+
310+
template <typename T, typename TQueue>
311+
std::enable_if_t<alpaka::isQueue<TQueue> and cms::is_bounded_array_v<T> and
312+
not std::is_array_v<std::remove_extent_t<T>>,
313+
device_view<alpaka::Dev<TQueue>, T>>
314+
make_device_view(TQueue const& queue, T& data) {
315+
return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, std::remove_extent_t<T>, Dim1D, Idx>(
316+
data, alpaka::getDev(queue), Vec1D{std::extent_v<T>});
317+
}
318+
281319
} // namespace cms::alpakatools
282320

283321
#endif // HeterogeneousCore_AlpakaInterface_interface_memory_h

0 commit comments

Comments
 (0)