Back to home page

Project CMSSW displayed by LXR

 
 

    


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  //RecoLocalCalo_HGCalRecProducers_KernelManagerHGCalRecHit_h