CMS 3D CMS Logo

HcalGainWidthsGPU.cc
Go to the documentation of this file.
5 
6 // FIXME: add proper getters to conditions
8  : totalChannels_{gains.getAllContainers()[0].second.size() + gains.getAllContainers()[1].second.size()},
9  value0_(totalChannels_),
10  value1_(totalChannels_),
11  value2_(totalChannels_),
12  value3_(totalChannels_) {
13  auto const gainContainers = gains.getAllContainers();
14 
15  // fill in eb
16  auto const& barrelValues = gainContainers[0].second;
17  for (uint64_t i = 0; i < barrelValues.size(); ++i) {
18  value0_[i] = barrelValues[i].getValue(0);
19  value1_[i] = barrelValues[i].getValue(1);
20  value2_[i] = barrelValues[i].getValue(2);
21  value3_[i] = barrelValues[i].getValue(3);
22  }
23 
24  // fill in ee
25  auto const& endcapValues = gainContainers[1].second;
26  auto const offset = barrelValues.size();
27  for (uint64_t i = 0; i < endcapValues.size(); ++i) {
28  value0_[i + offset] = endcapValues[i].getValue(0);
29  value1_[i + offset] = endcapValues[i].getValue(1);
30  value2_[i + offset] = endcapValues[i].getValue(2);
31  value3_[i + offset] = endcapValues[i].getValue(3);
32  }
33 }
34 
36  auto const& product =
37  product_.dataForCurrentDeviceAsync(stream, [this](HcalGainWidthsGPU::Product& product, cudaStream_t stream) {
38  // allocate
39  product.value0 = cms::cuda::make_device_unique<float[]>(value0_.size(), stream);
40  product.value1 = cms::cuda::make_device_unique<float[]>(value1_.size(), stream);
41  product.value2 = cms::cuda::make_device_unique<float[]>(value2_.size(), stream);
42  product.value3 = cms::cuda::make_device_unique<float[]>(value3_.size(), stream);
43 
44  // transfer
49  });
50 
51  return product;
52 }
53 
std::vector< float, cms::cuda::HostAllocator< float > > value2_
edm::propagate_const_array< cms::cuda::device::unique_ptr< float[]> > value2
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
HcalGainWidthsGPU(HcalGainWidths const &)
std::vector< float, cms::cuda::HostAllocator< float > > value1_
std::vector< float, cms::cuda::HostAllocator< float > > value3_
void copyAsync(device::unique_ptr< T > &dst, const host::unique_ptr< T > &src, cudaStream_t stream)
Definition: copyAsync.h:20
edm::propagate_const_array< cms::cuda::device::unique_ptr< float[]> > value1
#define TYPELOOKUP_DATA_REG(_dataclass_)
Definition: typelookup.h:102
constexpr float gains[NGAINS]
Definition: EcalConstants.h:11
cms::cuda::ESProduct< Product > product_
unsigned long long uint64_t
Definition: Time.h:13
edm::propagate_const_array< cms::cuda::device::unique_ptr< float[]> > value0
Product const & getProduct(cudaStream_t) const
std::vector< float, cms::cuda::HostAllocator< float > > value0_
edm::propagate_const_array< cms::cuda::device::unique_ptr< float[]> > value3