Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 12:51:09

0001 #ifndef CondFormats_HcalObjects_interface_HcalQIECodersGPU_h
0002 #define CondFormats_HcalObjects_interface_HcalQIECodersGPU_h
0003 
0004 #include "CondFormats/HcalObjects/interface/HcalQIEData.h"
0005 #include "FWCore/Utilities/interface/propagate_const_array.h"
0006 #include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"
0007 
0008 #ifndef __CUDACC__
0009 #include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h"
0010 #include "HeterogeneousCore/CUDACore/interface/ESProduct.h"
0011 #endif
0012 
0013 class HcalQIECodersGPU {
0014 public:
0015   static constexpr uint32_t numValuesPerChannel = 16;
0016 
0017   struct Product {
0018     edm::propagate_const_array<cms::cuda::device::unique_ptr<float[]>> offsets;
0019     edm::propagate_const_array<cms::cuda::device::unique_ptr<float[]>> slopes;
0020   };
0021 
0022 #ifndef __CUDACC__
0023   // rearrange reco params
0024   HcalQIECodersGPU(HcalQIEData const &);
0025 
0026   // will trigger deallocation of Product thru ~Product
0027   ~HcalQIECodersGPU() = default;
0028 
0029   // get device pointers
0030   Product const &getProduct(cudaStream_t) const;
0031 
0032 private:
0033   uint64_t totalChannels_;
0034   std::vector<float, cms::cuda::HostAllocator<float>> offsets_;
0035   std::vector<float, cms::cuda::HostAllocator<float>> slopes_;
0036 
0037   cms::cuda::ESProduct<Product> product_;
0038 #endif
0039 };
0040 
0041 #endif