Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // Classes definition for Phase1/Phase2, to make the classes_def lighter. Not actually used in the code.
0025   using TrackingRecHitSoAPhase1 = TrackingRecHitsSoACollection<pixelTopology::Phase1>;
0026   using TrackingRecHitSoAPhase2 = TrackingRecHitsSoACollection<pixelTopology::Phase2>;
0027   using TrackingRecHitSoAHIonPhase1 = TrackingRecHitsSoACollection<pixelTopology::HIonPhase1>;
0028 
0029 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
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 }  // namespace cms::alpakatools
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  // DataFormats_TrackingRecHitSoA_interface_alpaka_TrackingRecHitsSoACollection_h