|
3 | 3 |
|
4 | 4 | #include <type_traits> |
5 | 5 |
|
| 6 | +#include <span> |
| 7 | + |
6 | 8 | #include <alpaka/alpaka.hpp> |
7 | 9 |
|
8 | 10 | #include "HeterogeneousCore/AlpakaInterface/interface/AllocatorPolicy.h" |
@@ -157,6 +159,11 @@ namespace cms::alpakatools { |
157 | 159 | return alpaka::ViewPlainPtr<DevHost, T, Dim1D, Idx>(data, host(), Vec1D{extent}); |
158 | 160 | } |
159 | 161 |
|
| 162 | + template <typename T> |
| 163 | + host_view<T[]> make_host_view(std::span<T> span) { |
| 164 | + return alpaka::ViewPlainPtr<DevHost, T, Dim1D, Idx>(span.data(), host(), Vec1D{span.size()}); |
| 165 | + } |
| 166 | + |
160 | 167 | template <typename T> |
161 | 168 | std::enable_if_t<cms::is_unbounded_array_v<T> and not std::is_array_v<std::remove_extent_t<T>>, host_view<T>> |
162 | 169 | make_host_view(T& data, Extent extent) { |
@@ -267,6 +274,12 @@ namespace cms::alpakatools { |
267 | 274 | return alpaka::ViewPlainPtr<TDev, T, Dim1D, Idx>(data, device, Vec1D{extent}); |
268 | 275 | } |
269 | 276 |
|
| 277 | + template <typename T, typename TDev> |
| 278 | + std::enable_if_t<alpaka::isDevice<TDev>, device_view<TDev, T[]>> make_device_view(TDev const& device, |
| 279 | + std::span<T> span) { |
| 280 | + return alpaka::ViewPlainPtr<TDev, T, Dim1D, Idx>(span.data(), device, Vec1D{span.size()}); |
| 281 | + } |
| 282 | + |
270 | 283 | template <typename T, typename TDev> |
271 | 284 | std::enable_if_t<alpaka::isDevice<TDev> and cms::is_unbounded_array_v<T> and |
272 | 285 | not std::is_array_v<std::remove_extent_t<T>>, |
@@ -296,6 +309,13 @@ namespace cms::alpakatools { |
296 | 309 | return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, T, Dim1D, Idx>(data, alpaka::getDev(queue), Vec1D{extent}); |
297 | 310 | } |
298 | 311 |
|
| 312 | + template <typename T, typename TQueue> |
| 313 | + std::enable_if_t<alpaka::isQueue<TQueue>, device_view<alpaka::Dev<TQueue>, T[]>> make_device_view(TQueue const& queue, |
| 314 | + std::span<T> span) { |
| 315 | + return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, T, Dim1D, Idx>( |
| 316 | + span.data(), alpaka::getDev(queue), Vec1D{span.size()}); |
| 317 | + } |
| 318 | + |
299 | 319 | template <typename T, typename TQueue> |
300 | 320 | std::enable_if_t<alpaka::isQueue<TQueue> and cms::is_unbounded_array_v<T> and |
301 | 321 | not std::is_array_v<std::remove_extent_t<T>>, |
|
0 commit comments