CMS 3D CMS Logo

SiPixelRawToClusterGPUKernel.h
Go to the documentation of this file.
1 #ifndef RecoLocalTracker_SiPixelClusterizer_plugins_SiPixelRawToClusterGPUKernel_h
2 #define RecoLocalTracker_SiPixelClusterizer_plugins_SiPixelRawToClusterGPUKernel_h
3 
4 #include <algorithm>
5 #include <cuda_runtime.h>
6 
16 
17 // local include(s)
19 
22 
23 namespace pixelgpudetails {
24 
25  inline namespace phase1geometry {
26  const uint32_t layerStartBit = 20;
27  const uint32_t ladderStartBit = 12;
28  const uint32_t moduleStartBit = 2;
29 
30  const uint32_t panelStartBit = 10;
31  const uint32_t diskStartBit = 18;
32  const uint32_t bladeStartBit = 12;
33 
34  const uint32_t layerMask = 0xF;
35  const uint32_t ladderMask = 0xFF;
36  const uint32_t moduleMask = 0x3FF;
37  const uint32_t panelMask = 0x3;
38  const uint32_t diskMask = 0xF;
39  const uint32_t bladeMask = 0x3F;
40  } // namespace phase1geometry
41 
42  const uint32_t maxROCIndex = 8;
43  const uint32_t numRowsInRoc = 80;
44  const uint32_t numColsInRoc = 52;
45 
46  const uint32_t MAX_WORD = 2000;
47 
48  struct DetIdGPU {
49  uint32_t rawId;
50  uint32_t rocInDet;
51  uint32_t moduleId;
52  };
53 
54  struct Pixel {
55  uint32_t row;
56  uint32_t col;
57  };
58 
59  class Packing {
60  public:
61  using PackedDigiType = uint32_t;
62 
63  // Constructor: pre-computes masks and shifts from field widths
64  __host__ __device__ inline constexpr Packing(unsigned int row_w,
65  unsigned int column_w,
66  unsigned int time_w,
67  unsigned int adc_w)
68  : row_width(row_w),
69  column_width(column_w),
70  adc_width(adc_w),
71  row_shift(0),
72  column_shift(row_shift + row_w),
73  time_shift(column_shift + column_w),
74  adc_shift(time_shift + time_w),
75  row_mask(~(~0U << row_w)),
76  column_mask(~(~0U << column_w)),
77  time_mask(~(~0U << time_w)),
78  adc_mask(~(~0U << adc_w)),
79  rowcol_mask(~(~0U << (column_w + row_w))),
82  max_adc(adc_mask) {}
83 
84  uint32_t row_width;
85  uint32_t column_width;
86  uint32_t adc_width;
87 
88  uint32_t row_shift;
89  uint32_t column_shift;
90  uint32_t time_shift;
91  uint32_t adc_shift;
92 
98 
99  uint32_t max_row;
100  uint32_t max_column;
101  uint32_t max_adc;
102  };
103 
104  __host__ __device__ inline constexpr Packing packing() { return Packing(11, 11, 0, 10); }
105 
106  __host__ __device__ inline uint32_t pack(uint32_t row, uint32_t col, uint32_t adc) {
107  constexpr Packing thePacking = packing();
108  adc = std::min(adc, thePacking.max_adc);
109 
110  return (row << thePacking.row_shift) | (col << thePacking.column_shift) | (adc << thePacking.adc_shift);
111  }
112 
113  constexpr uint32_t pixelToChannel(int row, int col) {
114  constexpr Packing thePacking = packing();
115  return (row << thePacking.column_width) | col;
116  }
117 
119  public:
121  public:
122  WordFedAppender();
123  ~WordFedAppender() = default;
124 
125  void initializeWordFed(int fedId, unsigned int wordCounterGPU, const cms_uint32_t* src, unsigned int length);
126 
127  const unsigned int* word() const { return word_.get(); }
128  const unsigned char* fedId() const { return fedId_.get(); }
129 
130  private:
133  };
134 
135  SiPixelRawToClusterGPUKernel() = default;
136  ~SiPixelRawToClusterGPUKernel() = default;
137 
142 
143  void makeClustersAsync(bool isRun2,
144  const SiPixelClusterThresholds clusterThresholds,
145  const SiPixelROCsStatusAndMapping* cablingMap,
146  const unsigned char* modToUnp,
147  const SiPixelGainForHLTonGPU* gains,
148  const WordFedAppender& wordFed,
150  const uint32_t wordCounter,
151  const uint32_t fedCounter,
152  bool useQualityInfo,
153  bool includeErrors,
154  bool debug,
155  cudaStream_t stream);
156 
157  std::pair<SiPixelDigisCUDA, SiPixelClustersCUDA> getResults() {
160  // need to explicitly deallocate while the associated CUDA
161  // stream is still alive
162  //
163  // technically the statement above is not true anymore now that
164  // the CUDA streams are cached within the cms::cuda::StreamCache, but it is
165  // still better to release as early as possible
166  nModules_Clusters_h.reset();
167  return std::make_pair(std::move(digis_d), std::move(clusters_d));
168  }
169 
171 
172  private:
173  uint32_t nDigis = 0;
174 
175  // Data to be put in the event
180  };
181 
182 } // namespace pixelgpudetails
183 
184 #endif // RecoLocalTracker_SiPixelClusterizer_plugins_SiPixelRawToClusterGPUKernel_h
pixelgpudetails::phase1geometry::bladeStartBit
const uint32_t bladeStartBit
Definition: SiPixelRawToClusterGPUKernel.h:32
cms_uint32_t
unsigned int cms_uint32_t
Definition: typedefs.h:15
pixelgpudetails::phase1geometry::moduleStartBit
const uint32_t moduleStartBit
Definition: SiPixelRawToClusterGPUKernel.h:28
pixelgpudetails::Packing
Definition: SiPixelRawToClusterGPUKernel.h:59
SiPixelGainForHLTonGPU
Definition: SiPixelGainForHLTonGPU.h:28
pixelgpudetails::Packing::Packing
__host__ constexpr __device__ Packing(unsigned int row_w, unsigned int column_w, unsigned int time_w, unsigned int adc_w)
Definition: SiPixelRawToClusterGPUKernel.h:64
pixelgpudetails::Packing::row_mask
PackedDigiType row_mask
Definition: SiPixelRawToClusterGPUKernel.h:93
pixelgpudetails::SiPixelRawToClusterGPUKernel
Definition: SiPixelRawToClusterGPUKernel.h:118
pixelgpudetails::packing
__host__ constexpr __device__ Packing packing()
Definition: SiPixelRawToClusterGPUKernel.h:104
pixelgpudetails::Packing::row_shift
uint32_t row_shift
Definition: SiPixelRawToClusterGPUKernel.h:88
pixelgpudetails::Packing::time_shift
uint32_t time_shift
Definition: SiPixelRawToClusterGPUKernel.h:90
pixelgpudetails::SiPixelRawToClusterGPUKernel::digis_d
SiPixelDigisCUDA digis_d
Definition: SiPixelRawToClusterGPUKernel.h:177
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender
Definition: SiPixelRawToClusterGPUKernel.h:120
SiPixelFormatterErrors.h
min
T min(T a, T b)
Definition: MathUtil.h:58
SiPixelClustersCUDA
Definition: SiPixelClustersCUDA.h:10
pixelgpudetails::phase1geometry::panelMask
const uint32_t panelMask
Definition: SiPixelRawToClusterGPUKernel.h:37
gpuClustering::adc
uint16_t *__restrict__ uint16_t const *__restrict__ adc
Definition: gpuClusterChargeCut.h:20
cuy.col
col
Definition: cuy.py:1009
cms::cuda::host::noncached::unique_ptr
std::unique_ptr< T, impl::HostDeleter > unique_ptr
Definition: host_noncached_unique_ptr.h:23
pixelgpudetails::phase1geometry::panelStartBit
const uint32_t panelStartBit
Definition: SiPixelRawToClusterGPUKernel.h:30
cms::cuda::stream
uint32_t const T *__restrict__ const uint32_t *__restrict__ int32_t int Histo::index_type cudaStream_t stream
Definition: HistoContainer.h:51
pixelgpudetails::Packing::adc_mask
PackedDigiType adc_mask
Definition: SiPixelRawToClusterGPUKernel.h:96
SiPixelDigisCUDA::setNModulesDigis
void setNModulesDigis(uint32_t nModules, uint32_t nDigis)
Definition: SiPixelDigisCUDA.h:21
SiPixelClusterThresholds
Definition: SiPixelClusterThresholds.h:4
pixelgpudetails::Packing::rowcol_mask
PackedDigiType rowcol_mask
Definition: SiPixelRawToClusterGPUKernel.h:97
pixelgpudetails::phase1geometry::bladeMask
const uint32_t bladeMask
Definition: SiPixelRawToClusterGPUKernel.h:39
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::fedId
const unsigned char * fedId() const
Definition: SiPixelRawToClusterGPUKernel.h:128
pixelgpudetails::Packing::column_width
uint32_t column_width
Definition: SiPixelRawToClusterGPUKernel.h:85
pixelgpudetails::SiPixelRawToClusterGPUKernel::getResults
std::pair< SiPixelDigisCUDA, SiPixelClustersCUDA > getResults()
Definition: SiPixelRawToClusterGPUKernel.h:157
pixelgpudetails::Packing::adc_shift
uint32_t adc_shift
Definition: SiPixelRawToClusterGPUKernel.h:91
pixelgpudetails::Packing::column_shift
uint32_t column_shift
Definition: SiPixelRawToClusterGPUKernel.h:89
SiPixelClustersCUDA.h
pixelgpudetails::phase1geometry::ladderStartBit
const uint32_t ladderStartBit
Definition: SiPixelRawToClusterGPUKernel.h:27
pixelgpudetails::phase1geometry::diskStartBit
const uint32_t diskStartBit
Definition: SiPixelRawToClusterGPUKernel.h:31
host_noncached_unique_ptr.h
pixelgpudetails
Definition: SiPixelROCsStatusAndMapping.h:4
pixelgpudetails::Packing::time_mask
PackedDigiType time_mask
Definition: SiPixelRawToClusterGPUKernel.h:95
debug
#define debug
Definition: HDRShower.cc:19
pixelgpudetails::Packing::row_width
uint32_t row_width
Definition: SiPixelRawToClusterGPUKernel.h:84
pixelgpudetails::SiPixelRawToClusterGPUKernel::clusters_d
SiPixelClustersCUDA clusters_d
Definition: SiPixelRawToClusterGPUKernel.h:178
pixelgpudetails::SiPixelRawToClusterGPUKernel::digiErrors_d
SiPixelDigiErrorsCUDA digiErrors_d
Definition: SiPixelRawToClusterGPUKernel.h:179
pixelgpudetails::DetIdGPU::rocInDet
uint32_t rocInDet
Definition: SiPixelRawToClusterGPUKernel.h:50
errors
Definition: errors.py:1
pixelgpudetails::phase1geometry::moduleMask
const uint32_t moduleMask
Definition: SiPixelRawToClusterGPUKernel.h:36
host_unique_ptr.h
SiPixelClusterThresholds.h
pixelgpudetails::phase1geometry::layerMask
const uint32_t layerMask
Definition: SiPixelRawToClusterGPUKernel.h:34
pixelgpudetails::Packing::max_column
uint32_t max_column
Definition: SiPixelRawToClusterGPUKernel.h:100
pixelgpudetails::pack
__host__ __device__ uint32_t pack(uint32_t row, uint32_t col, uint32_t adc)
Definition: SiPixelRawToClusterGPUKernel.h:106
SimpleVector.h
pixelgpudetails::DetIdGPU::moduleId
uint32_t moduleId
Definition: SiPixelRawToClusterGPUKernel.h:51
pixelgpudetails::phase1geometry::diskMask
const uint32_t diskMask
Definition: SiPixelRawToClusterGPUKernel.h:38
typedefs.h
SiPixelDigiErrorsCUDA
Definition: SiPixelDigiErrorsCUDA.h:12
geometryPPS_CMSxz_fromDD_2016_cfi.isRun2
isRun2
Definition: geometryPPS_CMSxz_fromDD_2016_cfi.py:14
pixelgpudetails::SiPixelRawToClusterGPUKernel::SiPixelRawToClusterGPUKernel
SiPixelRawToClusterGPUKernel()=default
SiPixelClustersCUDA::setNClusters
void setNClusters(uint32_t nClusters)
Definition: SiPixelClustersCUDA.h:21
mitigatedMETSequence_cff.U
U
Definition: mitigatedMETSequence_cff.py:36
pixelgpudetails::numRowsInRoc
const uint32_t numRowsInRoc
Definition: SiPixelRawToClusterGPUKernel.h:43
SiPixelDigisCUDA
Definition: SiPixelDigisCUDA.h:10
pixelgpudetails::pixelToChannel
constexpr uint32_t pixelToChannel(int row, int col)
Definition: SiPixelRawToClusterGPUKernel.h:113
pixelgpudetails::Pixel
Definition: SiPixelRawToClusterGPUKernel.h:54
TrackRefitter_38T_cff.src
src
Definition: TrackRefitter_38T_cff.py:24
pixelgpudetails::SiPixelRawToClusterGPUKernel::nDigis
uint32_t nDigis
Definition: SiPixelRawToClusterGPUKernel.h:173
SiPixelErrorCompact.h
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::~WordFedAppender
~WordFedAppender()=default
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::fedId_
cms::cuda::host::noncached::unique_ptr< unsigned char[]> fedId_
Definition: SiPixelRawToClusterGPUKernel.h:132
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::word
const unsigned int * word() const
Definition: SiPixelRawToClusterGPUKernel.h:127
pixelgpudetails::MAX_WORD
const uint32_t MAX_WORD
Definition: SiPixelRawToClusterGPUKernel.h:46
pixelgpudetails::Pixel::col
uint32_t col
Definition: SiPixelRawToClusterGPUKernel.h:56
SiPixelDigiErrorsCUDA.h
pixelgpudetails::DetIdGPU::rawId
uint32_t rawId
Definition: SiPixelRawToClusterGPUKernel.h:49
__device__
#define __device__
Definition: SiPixelGainForHLTonGPU.h:15
SiPixelDigisCUDA.h
pixelgpudetails::Packing::max_adc
uint32_t max_adc
Definition: SiPixelRawToClusterGPUKernel.h:101
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::word_
cms::cuda::host::noncached::unique_ptr< unsigned int[]> word_
Definition: SiPixelRawToClusterGPUKernel.h:131
pixelgpudetails::SiPixelRawToClusterGPUKernel::~SiPixelRawToClusterGPUKernel
~SiPixelRawToClusterGPUKernel()=default
eostools.move
def move(src, dest)
Definition: eostools.py:511
pixelgpudetails::Packing::max_row
uint32_t max_row
Definition: SiPixelRawToClusterGPUKernel.h:99
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::WordFedAppender
WordFedAppender()
cms::cuda::host::unique_ptr
std::unique_ptr< T, impl::HostDeleter > unique_ptr
Definition: host_unique_ptr.h:21
pixelgpudetails::SiPixelRawToClusterGPUKernel::operator=
SiPixelRawToClusterGPUKernel & operator=(const SiPixelRawToClusterGPUKernel &)=delete
pixelgpudetails::SiPixelRawToClusterGPUKernel::nModules_Clusters_h
cms::cuda::host::unique_ptr< uint32_t[]> nModules_Clusters_h
Definition: SiPixelRawToClusterGPUKernel.h:176
pixelgpudetails::SiPixelRawToClusterGPUKernel::makeClustersAsync
void makeClustersAsync(bool isRun2, const SiPixelClusterThresholds clusterThresholds, const SiPixelROCsStatusAndMapping *cablingMap, const unsigned char *modToUnp, const SiPixelGainForHLTonGPU *gains, const WordFedAppender &wordFed, SiPixelFormatterErrors &&errors, const uint32_t wordCounter, const uint32_t fedCounter, bool useQualityInfo, bool includeErrors, bool debug, cudaStream_t stream)
pixelgpudetails::Packing::PackedDigiType
uint32_t PackedDigiType
Definition: SiPixelRawToClusterGPUKernel.h:61
pixelgpudetails::phase1geometry::ladderMask
const uint32_t ladderMask
Definition: SiPixelRawToClusterGPUKernel.h:35
SiPixelFormatterErrors
std::map< cms_uint32_t, std::vector< SiPixelRawDataError > > SiPixelFormatterErrors
Definition: SiPixelFormatterErrors.h:10
pixelgpudetails::phase1geometry::layerStartBit
const uint32_t layerStartBit
Definition: SiPixelRawToClusterGPUKernel.h:26
pixelgpudetails::numColsInRoc
const uint32_t numColsInRoc
Definition: SiPixelRawToClusterGPUKernel.h:44
pixelgpudetails::SiPixelRawToClusterGPUKernel::getErrors
SiPixelDigiErrorsCUDA && getErrors()
Definition: SiPixelRawToClusterGPUKernel.h:170
SiPixelROCsStatusAndMapping
Definition: SiPixelROCsStatusAndMapping.h:14
pixelgpudetails::Packing::adc_width
uint32_t adc_width
Definition: SiPixelRawToClusterGPUKernel.h:86
pixelgpudetails::Pixel::row
uint32_t row
Definition: SiPixelRawToClusterGPUKernel.h:55
__host__
#define __host__
Definition: SiPixelGainForHLTonGPU.h:12
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::initializeWordFed
void initializeWordFed(int fedId, unsigned int wordCounterGPU, const cms_uint32_t *src, unsigned int length)
pixelgpudetails::maxROCIndex
const uint32_t maxROCIndex
Definition: SiPixelRawToClusterGPUKernel.h:42
pixelgpudetails::Packing::column_mask
PackedDigiType column_mask
Definition: SiPixelRawToClusterGPUKernel.h:94
pixelgpudetails::DetIdGPU
Definition: SiPixelRawToClusterGPUKernel.h:48