File indexing completed on 2024-04-06 12:05:21
0001 #ifndef DataFormats_TrackingRecHitSoA_interface_alpaka_TrackingRecHitsSoACollection_h
0002 #define DataFormats_TrackingRecHitSoA_interface_alpaka_TrackingRecHitsSoACollection_h
0003
0004 #include <cstdint>
0005 #include <type_traits>
0006
0007 #include <alpaka/alpaka.hpp>
0008
0009 #include "DataFormats/Portable/interface/alpaka/PortableCollection.h"
0010 #include "DataFormats/TrackingRecHitSoA/interface/TrackingRecHitsDevice.h"
0011 #include "DataFormats/TrackingRecHitSoA/interface/TrackingRecHitsHost.h"
0012 #include "DataFormats/TrackingRecHitSoA/interface/TrackingRecHitsSoA.h"
0013 #include "Geometry/CommonTopologies/interface/SimplePixelTopology.h"
0014 #include "HeterogeneousCore/AlpakaInterface/interface/CopyToHost.h"
0015 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0016
0017 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0018
0019 template <typename TrackerTraits>
0020 using TrackingRecHitsSoACollection = std::conditional_t<std::is_same_v<Device, alpaka::DevCpu>,
0021 TrackingRecHitHost<TrackerTraits>,
0022 TrackingRecHitDevice<TrackerTraits, Device>>;
0023
0024
0025 using TrackingRecHitSoAPhase1 = TrackingRecHitsSoACollection<pixelTopology::Phase1>;
0026 using TrackingRecHitSoAPhase2 = TrackingRecHitsSoACollection<pixelTopology::Phase2>;
0027 using TrackingRecHitSoAHIonPhase1 = TrackingRecHitsSoACollection<pixelTopology::HIonPhase1>;
0028
0029 }
0030
0031 namespace cms::alpakatools {
0032 template <typename TrackerTraits, typename TDevice>
0033 struct CopyToHost<TrackingRecHitDevice<TrackerTraits, TDevice>> {
0034 template <typename TQueue>
0035 static auto copyAsync(TQueue& queue, TrackingRecHitDevice<TrackerTraits, TDevice> const& deviceData) {
0036 TrackingRecHitHost<TrackerTraits> hostData(queue, deviceData.view().metadata().size());
0037 alpaka::memcpy(queue, hostData.buffer(), deviceData.buffer());
0038 #ifdef GPU_DEBUG
0039 printf("TrackingRecHitsSoACollection: I'm copying to host.\n");
0040 alpaka::wait(queue);
0041 assert(deviceData.nHits() == hostData.nHits());
0042 assert(deviceData.offsetBPIX2() == hostData.offsetBPIX2());
0043 #endif
0044 return hostData;
0045 }
0046 };
0047 }
0048
0049 ASSERT_DEVICE_MATCHES_HOST_COLLECTION(TrackingRecHitSoAPhase1, TrackingRecHitHostPhase1);
0050 ASSERT_DEVICE_MATCHES_HOST_COLLECTION(TrackingRecHitSoAPhase2, TrackingRecHitHostPhase2);
0051 ASSERT_DEVICE_MATCHES_HOST_COLLECTION(TrackingRecHitSoAHIonPhase1, TrackingRecHitHostHIonPhase1);
0052
0053 #endif