55
66#include " DataFormats/Portable/interface/PortableHostCollection.h"
77#include " DataFormats/Portable/interface/PortableDeviceCollection.h"
8+ #include " HeterogeneousCore/AlpakaInterface/interface/concepts.h"
89#include " HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h"
910#include " HeterogeneousCore/AlpakaInterface/interface/CopyToHost.h"
1011
@@ -47,8 +48,10 @@ using PortableMultiCollection = typename traits::PortableMultiCollectionTrait<TD
4748// define how to copy PortableCollection between host and device
4849namespace cms ::alpakatools {
4950 template <typename TLayout, typename TDevice>
51+ requires alpaka::isDevice<TDevice>
5052 struct CopyToHost <PortableDeviceCollection<TLayout, TDevice>> {
5153 template <typename TQueue>
54+ requires alpaka::isQueue<TQueue>
5255 static auto copyAsync (TQueue& queue, PortableDeviceCollection<TLayout, TDevice> const & srcData) {
5356 PortableHostCollection<TLayout> dstData (srcData->metadata ().size (), queue);
5457 alpaka::memcpy (queue, dstData.buffer (), srcData.buffer ());
@@ -57,8 +60,10 @@ namespace cms::alpakatools {
5760 };
5861
5962 template <typename TDev, typename T0, typename ... Args>
63+ requires alpaka::isDevice<TDev>
6064 struct CopyToHost <PortableDeviceMultiCollection<TDev, T0, Args...>> {
6165 template <typename TQueue>
66+ requires alpaka::isQueue<TQueue>
6267 static auto copyAsync (TQueue& queue, PortableDeviceMultiCollection<TDev, T0, Args...> const & srcData) {
6368 PortableHostMultiCollection<T0, Args...> dstData (srcData.sizes (), queue);
6469 alpaka::memcpy (queue, dstData.buffer (), srcData.buffer ());
@@ -68,7 +73,7 @@ namespace cms::alpakatools {
6873
6974 template <typename TLayout>
7075 struct CopyToDevice <PortableHostCollection<TLayout>> {
71- template <typename TQueue>
76+ template <cms::alpakatools::NonCPUQueue TQueue>
7277 static auto copyAsync (TQueue& queue, PortableHostCollection<TLayout> const & srcData) {
7378 using TDevice = typename alpaka::trait::DevType<TQueue>::type;
7479 PortableDeviceCollection<TLayout, TDevice> dstData (srcData->metadata ().size (), queue);
@@ -79,7 +84,7 @@ namespace cms::alpakatools {
7984
8085 template <typename T0, typename ... Args>
8186 struct CopyToDevice <PortableHostMultiCollection<T0, Args...>> {
82- template <typename TQueue>
87+ template <cms::alpakatools::NonCPUQueue TQueue>
8388 static auto copyAsync (TQueue& queue, PortableHostMultiCollection<T0, Args...> const & srcData) {
8489 using TDevice = typename alpaka::trait::DevType<TQueue>::type;
8590 PortableDeviceMultiCollection<TDevice, T0, Args...> dstData (srcData.sizes (), queue);
0 commit comments