File indexing completed on 2025-01-04 00:29:54
0001 #ifndef RecoLocalCalo_HGCalRecProducers_KernelManagerHGCalRecHit_h
0002 #define RecoLocalCalo_HGCalRecProducers_KernelManagerHGCalRecHit_h
0003
0004 #include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h"
0005 #include "RecoLocalCalo/HGCalRecProducers/plugins/HGCalRecHitKernelImpl.cuh"
0006 #include "CUDADataFormats/HGCal/interface/HGCConditions.h"
0007 #include "CUDADataFormats/HGCal/interface/HGCRecHitSoA.h"
0008 #include "CUDADataFormats/HGCal/interface/ConstHGCRecHitSoA.h"
0009
0010 #include <vector>
0011 #include <algorithm> //std::swap
0012 #include <variant>
0013 #include <cuda.h>
0014 #include <cuda_runtime.h>
0015
0016 template <typename T>
0017 class KernelConstantData {
0018 public:
0019 KernelConstantData(T& data, HGCConstantVectorData& vdata) : data_(data), vdata_(vdata) {
0020 static_assert(std::is_same<T, HGCeeUncalibRecHitConstantData>::value or
0021 std::is_same<T, HGChefUncalibRecHitConstantData>::value or
0022 std::is_same<T, HGChebUncalibRecHitConstantData>::value,
0023 "The KernelConstantData class does not support this type.");
0024 }
0025 T data_;
0026 HGCConstantVectorData vdata_;
0027 };
0028
0029 class KernelManagerHGCalRecHit {
0030 public:
0031 KernelManagerHGCalRecHit();
0032 KernelManagerHGCalRecHit(const HGCUncalibRecHitSoA&, const HGCUncalibRecHitSoA&, const HGCRecHitSoA&);
0033 KernelManagerHGCalRecHit(const HGCRecHitSoA&, const ConstHGCRecHitSoA&);
0034 ~KernelManagerHGCalRecHit();
0035 void run_kernels(const KernelConstantData<HGCeeUncalibRecHitConstantData>*, const cudaStream_t&);
0036 void run_kernels(const KernelConstantData<HGChefUncalibRecHitConstantData>*, const cudaStream_t&);
0037 void run_kernels(const KernelConstantData<HGChebUncalibRecHitConstantData>*, const cudaStream_t&);
0038 void transfer_soa_to_host(const cudaStream_t&);
0039
0040 private:
0041 void transfer_soa_to_device_(const cudaStream_t&);
0042
0043 uint32_t nhits_;
0044 uint32_t pad_;
0045 uint32_t nbytes_host_;
0046 uint32_t nbytes_device_;
0047 HGCUncalibRecHitSoA h_uncalibSoA_, d_uncalibSoA_;
0048 HGCRecHitSoA h_calibSoA_, d_calibSoA_;
0049 ConstHGCRecHitSoA d_calibConstSoA_;
0050 };
0051
0052 #endif