ElectronicsMappingGPU

Product

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#ifndef CondFormats_EcalObjects_interface_ElectronicsMappingGPU_h
#define CondFormats_EcalObjects_interface_ElectronicsMappingGPU_h

#include "CondFormats/EcalObjects/interface/EcalMappingElectronics.h"
#include "FWCore/Utilities/interface/propagate_const_array.h"
#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"

#ifndef __CUDACC__
#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h"
#include "HeterogeneousCore/CUDACore/interface/ESProduct.h"
#endif  // __CUDACC__

namespace ecal {
  namespace raw {

    class ElectronicsMappingGPU {
    public:
      struct Product {
        edm::propagate_const_array<cms::cuda::device::unique_ptr<uint32_t[]>> eid2did;
      };

#ifndef __CUDACC__

      // rearrange pedestals
      ElectronicsMappingGPU(EcalMappingElectronics const&);

      // will call dealloation for Product thru ~Product
      ~ElectronicsMappingGPU() = default;

      // get device pointers
      Product const& getProduct(cudaStream_t) const;

      //
      static std::string name() { return std::string{"ecalElectronicsMappingGPU"}; }

    private:
      // in the future, we need to arrange so to avoid this copy on the host
      // store eb first then ee
      std::vector<uint32_t, cms::cuda::HostAllocator<uint32_t>> eid2did_;

      cms::cuda::ESProduct<Product> product_;
#endif  // __CUDACC__
    };

  }  // namespace raw
}  // namespace ecal

#endif  // CondFormats_EcalObjects_interface_ElectronicsMappingGPU_h