CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
EcalRawToDigiGPU Class Reference
Inheritance diagram for EcalRawToDigiGPU:
edm::stream::EDProducer< edm::ExternalWork >

Public Member Functions

 EcalRawToDigiGPU (edm::ParameterSet const &ps)
 
 ~EcalRawToDigiGPU () override
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::ExternalWork >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &)
 

Private Types

using OutputProduct = cms::cuda::Product< ecal::DigisCollection< calo::common::DevStoragePolicy >>
 

Private Member Functions

void acquire (edm::Event const &, edm::EventSetup const &, edm::WaitingTaskWithArenaHolder) override
 
void produce (edm::Event &, edm::EventSetup const &) override
 

Private Attributes

ecal::raw::ConfigurationParameters config_
 
cms::cuda::ContextState cudaState_
 
edm::EDPutTokenT< OutputProductdigisEBToken_
 
edm::EDPutTokenT< OutputProductdigisEEToken_
 
edm::ESGetToken
< ecal::raw::ElectronicsMappingGPU,
EcalMappingElectronicsRcd
eMappingToken_
 
std::vector< int > fedsToUnpack_
 
const uint32_t maxFedSize_
 
ecal::raw::OutputDataCPU outputCPU_
 
ecal::raw::OutputDataGPU outputGPU_
 
edm::EDGetTokenT
< FEDRawDataCollection
rawDataToken_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer< edm::ExternalWork >
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 18 of file EcalRawToDigiGPU.cc.

Member Typedef Documentation

Definition at line 30 of file EcalRawToDigiGPU.cc.

Constructor & Destructor Documentation

EcalRawToDigiGPU::EcalRawToDigiGPU ( edm::ParameterSet const &  ps)
explicit

Definition at line 62 of file EcalRawToDigiGPU.cc.

References edm::ParameterSet::getParameter().

63  : rawDataToken_{consumes<FEDRawDataCollection>(ps.getParameter<edm::InputTag>("InputLabel"))},
64  digisEBToken_{produces<OutputProduct>(ps.getParameter<std::string>("digisLabelEB"))},
65  digisEEToken_{produces<OutputProduct>(ps.getParameter<std::string>("digisLabelEE"))},
66  eMappingToken_{esConsumes<ecal::raw::ElectronicsMappingGPU, EcalMappingElectronicsRcd>()},
67  maxFedSize_{ps.getParameter<uint32_t>("maxFedSize")},
68  fedsToUnpack_{ps.getParameter<std::vector<int>>("FEDs")} {
69  config_.maxChannelsEB = ps.getParameter<uint32_t>("maxChannelsEB");
70  config_.maxChannelsEE = ps.getParameter<uint32_t>("maxChannelsEE");
71 }
const uint32_t maxFedSize_
edm::ESGetToken< ecal::raw::ElectronicsMappingGPU, EcalMappingElectronicsRcd > eMappingToken_
std::vector< int > fedsToUnpack_
edm::EDPutTokenT< OutputProduct > digisEEToken_
ecal::raw::ConfigurationParameters config_
edm::EDGetTokenT< FEDRawDataCollection > rawDataToken_
edm::EDPutTokenT< OutputProduct > digisEBToken_
EcalRawToDigiGPU::~EcalRawToDigiGPU ( )
override

Definition at line 73 of file EcalRawToDigiGPU.cc.

73 {}

Member Function Documentation

void EcalRawToDigiGPU::acquire ( edm::Event const &  event,
edm::EventSetup const &  setup,
edm::WaitingTaskWithArenaHolder  holder 
)
overrideprivate

Definition at line 75 of file EcalRawToDigiGPU.cc.

References ecal::raw::OutputDataGPU::allocate(), submitPVValidationJobs::conditions, config_, counter, cudaState_, data, eMappingToken_, ecal::raw::empty_event_size, ecal::raw::entryPoint(), fedsToUnpack_, edm::EventSetup::getHandle(), cms::cuda::make_device_unique(), cms::cuda::make_host_unique(), maxFedSize_, eostools::move(), ecal::raw::OutputDataCPU::nchannels, ecal::raw::nfeds_max, outputCPU_, outputGPU_, and rawDataToken_.

77  {
78  // raii
79  cms::cuda::ScopedContextAcquire ctx{event.streamID(), std::move(holder), cudaState_};
80 
81  // conditions
83  auto const& eMappingProduct = eMappingHandle->getProduct(ctx.stream());
84 
85  // bundle up conditions
87 
88  // event data
90  event.getByToken(rawDataToken_, rawDataHandle);
91 
92  // scratch
93  ecal::raw::ScratchDataGPU scratchGPU = {cms::cuda::make_device_unique<uint32_t[]>(2, ctx.stream())};
94 
95  // input cpu data
96  ecal::raw::InputDataCPU inputCPU = {
97  cms::cuda::make_host_unique<unsigned char[]>(ecal::raw::nfeds_max * maxFedSize_, ctx.stream()),
98  cms::cuda::make_host_unique<uint32_t[]>(ecal::raw::nfeds_max, ctx.stream()),
100 
101  // input data gpu
102  ecal::raw::InputDataGPU inputGPU = {
103  cms::cuda::make_device_unique<unsigned char[]>(ecal::raw::nfeds_max * maxFedSize_, ctx.stream()),
104  cms::cuda::make_device_unique<uint32_t[]>(ecal::raw::nfeds_max, ctx.stream()),
106 
107  // output cpu
108  outputCPU_ = {cms::cuda::make_host_unique<uint32_t[]>(2, ctx.stream())};
109  // initialize the number of channels
110  outputCPU_.nchannels[0] = 0;
111  outputCPU_.nchannels[1] = 0;
112 
113  // output gpu
114  outputGPU_.allocate(config_, ctx.stream());
115 
116  // iterate over feds
117  // TODO: another idea
118  // - loop over all feds to unpack and enqueue cuda memcpy
119  // - accumulate the sizes
120  // - after the loop launch cuda memcpy for sizes
121  // - enqueue the kernel
122  uint32_t currentCummOffset = 0;
123  uint32_t counter = 0;
124  for (auto const& fed : fedsToUnpack_) {
125  auto const& data = rawDataHandle->FEDData(fed);
126  auto const nbytes = data.size();
127 
128  // skip empty feds
129  if (nbytes < ecal::raw::empty_event_size)
130  continue;
131 
132  // copy raw data into plain buffer
133  std::memcpy(inputCPU.data.get() + currentCummOffset, data.data(), nbytes);
134  // set the offset in bytes from the start
135  inputCPU.offsets[counter] = currentCummOffset;
136  inputCPU.feds[counter] = fed;
137 
138  // this is the current offset into the vector
139  currentCummOffset += nbytes;
140  ++counter;
141  }
142 
143  // unpack if at least one FED has data
144  if (counter > 0) {
146  inputCPU, inputGPU, outputGPU_, scratchGPU, outputCPU_, conditions, ctx.stream(), counter, currentCummOffset);
147  }
148 }
void entryPoint(InputDataCPU const &, InputDataGPU &, OutputDataGPU &, ScratchDataGPU &, OutputDataCPU &, ConditionsProducts const &, cudaStream_t, uint32_t const, uint32_t const)
const uint32_t maxFedSize_
edm::ESGetToken< ecal::raw::ElectronicsMappingGPU, EcalMappingElectronicsRcd > eMappingToken_
constexpr uint32_t nfeds_max
std::vector< int > fedsToUnpack_
constexpr auto empty_event_size
ecal::raw::OutputDataGPU outputGPU_
def move
Definition: eostools.py:511
ecal::raw::ConfigurationParameters config_
cms::cuda::ContextState cudaState_
ecal::raw::OutputDataCPU outputCPU_
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
static std::atomic< unsigned int > counter
cms::cuda::host::unique_ptr< uint32_t[]> nchannels
edm::EDGetTokenT< FEDRawDataCollection > rawDataToken_
device::impl::make_device_unique_selector< T >::non_array make_device_unique(cudaStream_t stream)
void allocate(ConfigurationParameters const &config, cudaStream_t cudaStream)
host::impl::make_host_unique_selector< T >::non_array make_host_unique(cudaStream_t stream)
void EcalRawToDigiGPU::fillDescriptions ( edm::ConfigurationDescriptions confDesc)
static

Definition at line 44 of file EcalRawToDigiGPU.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), submitPVResolutionJobs::desc, unpackBuffers-CaloStage1::feds, mps_fire::i, HLT_FULL_cff::InputTag, label, ecal::raw::nbytes_per_fed_max, and AlCaHLTBitMon_QueryRunRegistry::string.

44  {
46 
47  desc.add<edm::InputTag>("InputLabel", edm::InputTag("rawDataCollector"));
48  desc.add<uint32_t>("maxFedSize", ecal::raw::nbytes_per_fed_max);
49  std::vector<int> feds(54);
50  for (uint32_t i = 0; i < 54; ++i)
51  feds[i] = i + 601;
52  desc.add<std::vector<int>>("FEDs", feds);
53  desc.add<uint32_t>("maxChannelsEB", 61200);
54  desc.add<uint32_t>("maxChannelsEE", 14648);
55  desc.add<std::string>("digisLabelEB", "ebDigis");
56  desc.add<std::string>("digisLabelEE", "eeDigis");
57 
58  std::string label = "ecalRawToDigiGPU";
59  confDesc.add(label, desc);
60 }
constexpr uint32_t nbytes_per_fed_max
char const * label
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void EcalRawToDigiGPU::produce ( edm::Event event,
edm::EventSetup const &  setup 
)
overrideprivate

Definition at line 150 of file EcalRawToDigiGPU.cc.

References cudaState_, ecal::raw::OutputDataGPU::digisEB, digisEBToken_, ecal::raw::OutputDataGPU::digisEE, digisEEToken_, eostools::move(), and outputGPU_.

150  {
152 
153  // get the number of channels
156 
157  ctx.emplace(event, digisEBToken_, std::move(outputGPU_.digisEB));
158  ctx.emplace(event, digisEEToken_, std::move(outputGPU_.digisEE));
159 
160  // reset ptrs that are carried as members
161  outputCPU_.nchannels.reset();
162 }
edm::EDPutTokenT< OutputProduct > digisEEToken_
ecal::raw::OutputDataGPU outputGPU_
def move
Definition: eostools.py:511
cms::cuda::ContextState cudaState_
ecal::raw::OutputDataCPU outputCPU_
DigisCollection<::calo::common::DevStoragePolicy > digisEE
DigisCollection<::calo::common::DevStoragePolicy > digisEB
cms::cuda::host::unique_ptr< uint32_t[]> nchannels
edm::EDPutTokenT< OutputProduct > digisEBToken_

Member Data Documentation

ecal::raw::ConfigurationParameters EcalRawToDigiGPU::config_
private

Definition at line 39 of file EcalRawToDigiGPU.cc.

Referenced by acquire().

cms::cuda::ContextState EcalRawToDigiGPU::cudaState_
private

Definition at line 34 of file EcalRawToDigiGPU.cc.

Referenced by acquire(), and produce().

edm::EDPutTokenT<OutputProduct> EcalRawToDigiGPU::digisEBToken_
private

Definition at line 31 of file EcalRawToDigiGPU.cc.

Referenced by produce().

edm::EDPutTokenT<OutputProduct> EcalRawToDigiGPU::digisEEToken_
private

Definition at line 31 of file EcalRawToDigiGPU.cc.

Referenced by produce().

Definition at line 32 of file EcalRawToDigiGPU.cc.

Referenced by acquire().

std::vector<int> EcalRawToDigiGPU::fedsToUnpack_
private

Definition at line 37 of file EcalRawToDigiGPU.cc.

Referenced by acquire().

const uint32_t EcalRawToDigiGPU::maxFedSize_
private

Definition at line 36 of file EcalRawToDigiGPU.cc.

Referenced by acquire().

ecal::raw::OutputDataCPU EcalRawToDigiGPU::outputCPU_
private

Definition at line 41 of file EcalRawToDigiGPU.cc.

Referenced by acquire().

ecal::raw::OutputDataGPU EcalRawToDigiGPU::outputGPU_
private

Definition at line 40 of file EcalRawToDigiGPU.cc.

Referenced by acquire(), and produce().

edm::EDGetTokenT<FEDRawDataCollection> EcalRawToDigiGPU::rawDataToken_
private

Definition at line 29 of file EcalRawToDigiGPU.cc.

Referenced by acquire().