|
12 | 12 |
|
13 | 13 | #include "DataFormats/Common/interface/Uninitialized.h" |
14 | 14 | #include "DataFormats/Portable/interface/PortableCollectionCommon.h" |
| 15 | +#include "DataFormats/TrivialSerialisation/interface/MemoryCopyTraits.h" |
15 | 16 | #include "HeterogeneousCore/AlpakaInterface/interface/config.h" |
16 | 17 | #include "HeterogeneousCore/AlpakaInterface/interface/memory.h" |
17 | 18 |
|
@@ -159,4 +160,37 @@ class PortableDeviceCollection { |
159 | 160 | View view_; //! |
160 | 161 | }; |
161 | 162 |
|
| 163 | +namespace ngt { |
| 164 | + |
| 165 | + // Specialize MemoryCopyTraits for PortableDeviceCollection |
| 166 | + template <typename T, typename TDev> |
| 167 | + struct MemoryCopyTraits<PortableDeviceCollection<T, TDev>> { |
| 168 | + using value_type = PortableDeviceCollection<T, TDev>; |
| 169 | + |
| 170 | + // Properties are the collection size: T::size_type, or std::array<T::size_type, N> for SoABlocks. |
| 171 | + using Properties = decltype(std::declval<value_type>()->metadata().size()); |
| 172 | + |
| 173 | + static Properties properties(value_type const& object) { return object->metadata().size(); } |
| 174 | + |
| 175 | + template <typename TQueue> |
| 176 | + static void initialize(value_type& object, TQueue& queue, Properties const& size) |
| 177 | + requires(alpaka::isQueue<TQueue>) |
| 178 | + { |
| 179 | + object = value_type(queue, size); |
| 180 | + } |
| 181 | + |
| 182 | + static std::vector<std::span<std::byte>> regions(value_type& object) { |
| 183 | + std::byte* address = reinterpret_cast<std::byte*>(object.buffer().data()); |
| 184 | + size_t size = alpaka::getExtentProduct(object.buffer()); |
| 185 | + return {{address, size}}; |
| 186 | + } |
| 187 | + |
| 188 | + static std::vector<std::span<const std::byte>> regions(value_type const& object) { |
| 189 | + const std::byte* address = reinterpret_cast<const std::byte*>(object.buffer().data()); |
| 190 | + size_t size = alpaka::getExtentProduct(object.buffer()); |
| 191 | + return {{address, size}}; |
| 192 | + } |
| 193 | + }; |
| 194 | +} // namespace ngt |
| 195 | + |
162 | 196 | #endif // DataFormats_Portable_interface_PortableDeviceCollection_h |
0 commit comments