CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
HEFRecHitGPUtoSoA.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <memory>
3 #include <chrono>
4 #include <cuda_runtime.h>
5 
17 
22 
27 
31 
34 
35 class HEFRecHitGPUtoSoA : public edm::stream::EDProducer<edm::ExternalWork> {
36 public:
37  explicit HEFRecHitGPUtoSoA(const edm::ParameterSet& ps);
38  ~HEFRecHitGPUtoSoA() override;
39 
41  void produce(edm::Event&, const edm::EventSetup&) override;
42 
43 private:
47 
48  std::unique_ptr<HGCRecHitCPUProduct> prodPtr_;
49 };
50 
52  : recHitGPUToken_{consumes<cms::cuda::Product<HGCRecHitGPUProduct>>(
53  ps.getParameter<edm::InputTag>("HEFRecHitGPUTok"))},
54  recHitCPUSoAToken_(produces<HGCRecHitCPUProduct>()) {}
55 
57 
59  edm::EventSetup const& setup,
61  cms::cuda::ScopedContextAcquire ctx{event.streamID(), std::move(w)};
62  const auto& gpuRecHits = ctx.get(event, recHitGPUToken_);
63 
64  prodPtr_ = std::make_unique<HGCRecHitCPUProduct>(gpuRecHits.nHits(), ctx.stream());
65 
66  KernelManagerHGCalRecHit km((*prodPtr_).get(), gpuRecHits.get());
67  km.transfer_soa_to_host(ctx.stream());
68 }
69 
71 
std::unique_ptr< HGCRecHitCPUProduct > prodPtr_
void produce(edm::Event &, const edm::EventSetup &) override
edm::EDPutTokenT< HGCRecHitCPUProduct > recHitCPUSoAToken_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
def move
Definition: eostools.py:511
cms::cuda::ContextState ctxState_
void acquire(edm::Event const &, edm::EventSetup const &, edm::WaitingTaskWithArenaHolder) override
edm::EDGetTokenT< cms::cuda::Product< HGCRecHitGPUProduct > > recHitGPUToken_
HEFRecHitGPUtoSoA(const edm::ParameterSet &ps)
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
T w() const
void transfer_soa_to_host(const cudaStream_t &)
~HEFRecHitGPUtoSoA() override