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  // Phase 1 geometry constants
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 
41  const uint32_t LINK_bits = 6;
42  const uint32_t ROC_bits = 5;
43  const uint32_t DCOL_bits = 5;
44  const uint32_t PXID_bits = 8;
45  const uint32_t ADC_bits = 8;
46 
47  // special for layer 1
48  const uint32_t LINK_bits_l1 = 6;
49  const uint32_t ROC_bits_l1 = 5;
50  const uint32_t COL_bits_l1 = 6;
51  const uint32_t ROW_bits_l1 = 7;
52  const uint32_t OMIT_ERR_bits = 1;
53 
54  const uint32_t maxROCIndex = 8;
55  const uint32_t numRowsInRoc = 80;
56  const uint32_t numColsInRoc = 52;
57 
58  const uint32_t MAX_WORD = 2000;
59 
60  const uint32_t ADC_shift = 0;
61  const uint32_t PXID_shift = ADC_shift + ADC_bits;
62  const uint32_t DCOL_shift = PXID_shift + PXID_bits;
63  const uint32_t ROC_shift = DCOL_shift + DCOL_bits;
64  const uint32_t LINK_shift = ROC_shift + ROC_bits_l1;
65  // special for layer 1 ROC
66  const uint32_t ROW_shift = ADC_shift + ADC_bits;
67  const uint32_t COL_shift = ROW_shift + ROW_bits_l1;
68  const uint32_t OMIT_ERR_shift = 20;
69 
70  const uint32_t LINK_mask = ~(~uint32_t(0) << LINK_bits_l1);
71  const uint32_t ROC_mask = ~(~uint32_t(0) << ROC_bits_l1);
72  const uint32_t COL_mask = ~(~uint32_t(0) << COL_bits_l1);
73  const uint32_t ROW_mask = ~(~uint32_t(0) << ROW_bits_l1);
74  const uint32_t DCOL_mask = ~(~uint32_t(0) << DCOL_bits);
75  const uint32_t PXID_mask = ~(~uint32_t(0) << PXID_bits);
76  const uint32_t ADC_mask = ~(~uint32_t(0) << ADC_bits);
77  const uint32_t ERROR_mask = ~(~uint32_t(0) << ROC_bits_l1);
78  const uint32_t OMIT_ERR_mask = ~(~uint32_t(0) << OMIT_ERR_bits);
79 
80  struct DetIdGPU {
81  uint32_t rawId;
82  uint32_t rocInDet;
83  uint32_t moduleId;
84  };
85 
86  struct Pixel {
87  uint32_t row;
88  uint32_t col;
89  };
90 
91  class Packing {
92  public:
93  using PackedDigiType = uint32_t;
94 
95  // Constructor: pre-computes masks and shifts from field widths
96  __host__ __device__ inline constexpr Packing(unsigned int row_w,
97  unsigned int column_w,
98  unsigned int time_w,
99  unsigned int adc_w)
100  : row_width(row_w),
101  column_width(column_w),
102  adc_width(adc_w),
103  row_shift(0),
104  column_shift(row_shift + row_w),
105  time_shift(column_shift + column_w),
106  adc_shift(time_shift + time_w),
107  row_mask(~(~0U << row_w)),
108  column_mask(~(~0U << column_w)),
109  time_mask(~(~0U << time_w)),
110  adc_mask(~(~0U << adc_w)),
111  rowcol_mask(~(~0U << (column_w + row_w))),
112  max_row(row_mask),
114  max_adc(adc_mask) {}
115 
116  uint32_t row_width;
117  uint32_t column_width;
118  uint32_t adc_width;
119 
120  uint32_t row_shift;
121  uint32_t column_shift;
122  uint32_t time_shift;
123  uint32_t adc_shift;
124 
130 
131  uint32_t max_row;
132  uint32_t max_column;
133  uint32_t max_adc;
134  };
135 
136  __host__ __device__ inline constexpr Packing packing() { return Packing(11, 11, 0, 10); }
137 
138  __host__ __device__ inline uint32_t pack(uint32_t row, uint32_t col, uint32_t adc) {
139  constexpr Packing thePacking = packing();
140  adc = std::min(adc, thePacking.max_adc);
141 
142  return (row << thePacking.row_shift) | (col << thePacking.column_shift) | (adc << thePacking.adc_shift);
143  }
144 
145  constexpr uint32_t pixelToChannel(int row, int col) {
146  constexpr Packing thePacking = packing();
147  return (row << thePacking.column_width) | col;
148  }
149 
151  public:
153  public:
154  WordFedAppender();
155  ~WordFedAppender() = default;
156 
157  void initializeWordFed(int fedId, unsigned int wordCounterGPU, const cms_uint32_t* src, unsigned int length);
158 
159  const unsigned int* word() const { return word_.get(); }
160  const unsigned char* fedId() const { return fedId_.get(); }
161 
162  private:
165  };
166 
167  SiPixelRawToClusterGPUKernel() = default;
168  ~SiPixelRawToClusterGPUKernel() = default;
169 
174 
175  void makeClustersAsync(bool isRun2,
176  const SiPixelClusterThresholds clusterThresholds,
177  const SiPixelROCsStatusAndMapping* cablingMap,
178  const unsigned char* modToUnp,
179  const SiPixelGainForHLTonGPU* gains,
180  const WordFedAppender& wordFed,
182  const uint32_t wordCounter,
183  const uint32_t fedCounter,
184  bool useQualityInfo,
185  bool includeErrors,
186  bool debug,
187  cudaStream_t stream);
188 
189  std::pair<SiPixelDigisCUDA, SiPixelClustersCUDA> getResults() {
192  // need to explicitly deallocate while the associated CUDA
193  // stream is still alive
194  //
195  // technically the statement above is not true anymore now that
196  // the CUDA streams are cached within the cms::cuda::StreamCache, but it is
197  // still better to release as early as possible
198  nModules_Clusters_h.reset();
199  return std::make_pair(std::move(digis_d), std::move(clusters_d));
200  }
201 
203 
204  private:
205  uint32_t nDigis = 0;
206 
207  // Data to be put in the event
212  };
213 
214 } // namespace pixelgpudetails
215 
216 #endif // RecoLocalTracker_SiPixelClusterizer_plugins_SiPixelRawToClusterGPUKernel_h
cms_uint32_t
unsigned int cms_uint32_t
Definition: typedefs.h:15
pixelgpudetails::Packing
Definition: SiPixelRawToClusterGPUKernel.h:91
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:96
pixelgpudetails::LINK_bits_l1
const uint32_t LINK_bits_l1
Definition: SiPixelRawToClusterGPUKernel.h:48
pixelgpudetails::Packing::row_mask
PackedDigiType row_mask
Definition: SiPixelRawToClusterGPUKernel.h:125
pixelgpudetails::SiPixelRawToClusterGPUKernel
Definition: SiPixelRawToClusterGPUKernel.h:150
pixelgpudetails::packing
__host__ constexpr __device__ Packing packing()
Definition: SiPixelRawToClusterGPUKernel.h:136
pixelgpudetails::Packing::row_shift
uint32_t row_shift
Definition: SiPixelRawToClusterGPUKernel.h:120
pixelgpudetails::Packing::time_shift
uint32_t time_shift
Definition: SiPixelRawToClusterGPUKernel.h:122
pixelgpudetails::SiPixelRawToClusterGPUKernel::digis_d
SiPixelDigisCUDA digis_d
Definition: SiPixelRawToClusterGPUKernel.h:209
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender
Definition: SiPixelRawToClusterGPUKernel.h:152
pixelgpudetails::panelMask
const uint32_t panelMask
Definition: SiPixelRawToClusterGPUKernel.h:37
SiPixelFormatterErrors.h
min
T min(T a, T b)
Definition: MathUtil.h:58
SiPixelClustersCUDA
Definition: SiPixelClustersCUDA.h:10
pixelgpudetails::ROC_bits_l1
const uint32_t ROC_bits_l1
Definition: SiPixelRawToClusterGPUKernel.h:49
pixelgpudetails::PXID_mask
const uint32_t PXID_mask
Definition: SiPixelRawToClusterGPUKernel.h:75
gpuClustering::adc
uint16_t *__restrict__ uint16_t const *__restrict__ adc
Definition: gpuClusterChargeCut.h:20
pixelgpudetails::LINK_bits
const uint32_t LINK_bits
Definition: SiPixelRawToClusterGPUKernel.h:41
cms::cuda::stream
cudaStream_t stream
Definition: HistoContainer.h:57
cuy.col
col
Definition: cuy.py:1010
pixelgpudetails::bladeStartBit
const uint32_t bladeStartBit
Definition: SiPixelRawToClusterGPUKernel.h:32
cms::cuda::host::noncached::unique_ptr
std::unique_ptr< T, impl::HostDeleter > unique_ptr
Definition: host_noncached_unique_ptr.h:23
pixelgpudetails::Packing::adc_mask
PackedDigiType adc_mask
Definition: SiPixelRawToClusterGPUKernel.h:128
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:129
pixelgpudetails::bladeMask
const uint32_t bladeMask
Definition: SiPixelRawToClusterGPUKernel.h:39
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::fedId
const unsigned char * fedId() const
Definition: SiPixelRawToClusterGPUKernel.h:160
pixelgpudetails::Packing::column_width
uint32_t column_width
Definition: SiPixelRawToClusterGPUKernel.h:117
pixelgpudetails::ROW_bits_l1
const uint32_t ROW_bits_l1
Definition: SiPixelRawToClusterGPUKernel.h:51
pixelgpudetails::SiPixelRawToClusterGPUKernel::getResults
std::pair< SiPixelDigisCUDA, SiPixelClustersCUDA > getResults()
Definition: SiPixelRawToClusterGPUKernel.h:189
pixelgpudetails::ladderMask
const uint32_t ladderMask
Definition: SiPixelRawToClusterGPUKernel.h:35
pixelgpudetails::Packing::adc_shift
uint32_t adc_shift
Definition: SiPixelRawToClusterGPUKernel.h:123
pixelgpudetails::DCOL_bits
const uint32_t DCOL_bits
Definition: SiPixelRawToClusterGPUKernel.h:43
pixelgpudetails::Packing::column_shift
uint32_t column_shift
Definition: SiPixelRawToClusterGPUKernel.h:121
SiPixelClustersCUDA.h
pixelgpudetails::COL_shift
const uint32_t COL_shift
Definition: SiPixelRawToClusterGPUKernel.h:67
pixelgpudetails::diskStartBit
const uint32_t diskStartBit
Definition: SiPixelRawToClusterGPUKernel.h:31
pixelgpudetails::OMIT_ERR_mask
const uint32_t OMIT_ERR_mask
Definition: SiPixelRawToClusterGPUKernel.h:78
pixelgpudetails::OMIT_ERR_shift
const uint32_t OMIT_ERR_shift
Definition: SiPixelRawToClusterGPUKernel.h:68
pixelgpudetails::ROC_mask
const uint32_t ROC_mask
Definition: SiPixelRawToClusterGPUKernel.h:71
host_noncached_unique_ptr.h
pixelgpudetails
Definition: SiPixelROCsStatusAndMapping.h:4
pixelgpudetails::Packing::time_mask
PackedDigiType time_mask
Definition: SiPixelRawToClusterGPUKernel.h:127
debug
#define debug
Definition: HDRShower.cc:19
pixelgpudetails::Packing::row_width
uint32_t row_width
Definition: SiPixelRawToClusterGPUKernel.h:116
pixelgpudetails::SiPixelRawToClusterGPUKernel::clusters_d
SiPixelClustersCUDA clusters_d
Definition: SiPixelRawToClusterGPUKernel.h:210
pixelgpudetails::SiPixelRawToClusterGPUKernel::digiErrors_d
SiPixelDigiErrorsCUDA digiErrors_d
Definition: SiPixelRawToClusterGPUKernel.h:211
pixelgpudetails::layerStartBit
const uint32_t layerStartBit
Definition: SiPixelRawToClusterGPUKernel.h:26
pixelgpudetails::DetIdGPU::rocInDet
uint32_t rocInDet
Definition: SiPixelRawToClusterGPUKernel.h:82
errors
Definition: errors.py:1
host_unique_ptr.h
SiPixelClusterThresholds.h
pixelgpudetails::Packing::max_column
uint32_t max_column
Definition: SiPixelRawToClusterGPUKernel.h:132
pixelgpudetails::pack
__host__ __device__ uint32_t pack(uint32_t row, uint32_t col, uint32_t adc)
Definition: SiPixelRawToClusterGPUKernel.h:138
pixelgpudetails::PXID_bits
const uint32_t PXID_bits
Definition: SiPixelRawToClusterGPUKernel.h:44
pixelgpudetails::OMIT_ERR_bits
const uint32_t OMIT_ERR_bits
Definition: SiPixelRawToClusterGPUKernel.h:52
SimpleVector.h
pixelgpudetails::DetIdGPU::moduleId
uint32_t moduleId
Definition: SiPixelRawToClusterGPUKernel.h:83
pixelgpudetails::COL_bits_l1
const uint32_t COL_bits_l1
Definition: SiPixelRawToClusterGPUKernel.h:50
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:55
SiPixelDigisCUDA
Definition: SiPixelDigisCUDA.h:10
pixelgpudetails::pixelToChannel
constexpr uint32_t pixelToChannel(int row, int col)
Definition: SiPixelRawToClusterGPUKernel.h:145
pixelgpudetails::COL_mask
const uint32_t COL_mask
Definition: SiPixelRawToClusterGPUKernel.h:72
pixelgpudetails::ladderStartBit
const uint32_t ladderStartBit
Definition: SiPixelRawToClusterGPUKernel.h:27
pixelgpudetails::ROW_shift
const uint32_t ROW_shift
Definition: SiPixelRawToClusterGPUKernel.h:66
pixelgpudetails::ADC_shift
const uint32_t ADC_shift
Definition: SiPixelRawToClusterGPUKernel.h:60
pixelgpudetails::Pixel
Definition: SiPixelRawToClusterGPUKernel.h:86
TrackRefitter_38T_cff.src
src
Definition: TrackRefitter_38T_cff.py:24
pixelgpudetails::PXID_shift
const uint32_t PXID_shift
Definition: SiPixelRawToClusterGPUKernel.h:61
pixelgpudetails::SiPixelRawToClusterGPUKernel::nDigis
uint32_t nDigis
Definition: SiPixelRawToClusterGPUKernel.h:205
SiPixelErrorCompact.h
pixelgpudetails::ADC_mask
const uint32_t ADC_mask
Definition: SiPixelRawToClusterGPUKernel.h:76
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::~WordFedAppender
~WordFedAppender()=default
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::fedId_
cms::cuda::host::noncached::unique_ptr< unsigned char[]> fedId_
Definition: SiPixelRawToClusterGPUKernel.h:164
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::word
const unsigned int * word() const
Definition: SiPixelRawToClusterGPUKernel.h:159
pixelgpudetails::MAX_WORD
const uint32_t MAX_WORD
Definition: SiPixelRawToClusterGPUKernel.h:58
pixelgpudetails::Pixel::col
uint32_t col
Definition: SiPixelRawToClusterGPUKernel.h:88
pixelgpudetails::LINK_shift
const uint32_t LINK_shift
Definition: SiPixelRawToClusterGPUKernel.h:64
SiPixelDigiErrorsCUDA.h
pixelgpudetails::DetIdGPU::rawId
uint32_t rawId
Definition: SiPixelRawToClusterGPUKernel.h:81
__device__
#define __device__
Definition: SiPixelGainForHLTonGPU.h:15
pixelgpudetails::ROC_bits
const uint32_t ROC_bits
Definition: SiPixelRawToClusterGPUKernel.h:42
SiPixelDigisCUDA.h
pixelgpudetails::Packing::max_adc
uint32_t max_adc
Definition: SiPixelRawToClusterGPUKernel.h:133
pixelgpudetails::SiPixelRawToClusterGPUKernel::WordFedAppender::word_
cms::cuda::host::noncached::unique_ptr< unsigned int[]> word_
Definition: SiPixelRawToClusterGPUKernel.h:163
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:131
pixelgpudetails::LINK_mask
const uint32_t LINK_mask
Definition: SiPixelRawToClusterGPUKernel.h:70
pixelgpudetails::moduleMask
const uint32_t moduleMask
Definition: SiPixelRawToClusterGPUKernel.h:36
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::ADC_bits
const uint32_t ADC_bits
Definition: SiPixelRawToClusterGPUKernel.h:45
pixelgpudetails::layerMask
const uint32_t layerMask
Definition: SiPixelRawToClusterGPUKernel.h:34
pixelgpudetails::DCOL_shift
const uint32_t DCOL_shift
Definition: SiPixelRawToClusterGPUKernel.h:62
pixelgpudetails::diskMask
const uint32_t diskMask
Definition: SiPixelRawToClusterGPUKernel.h:38
pixelgpudetails::SiPixelRawToClusterGPUKernel::nModules_Clusters_h
cms::cuda::host::unique_ptr< uint32_t[]> nModules_Clusters_h
Definition: SiPixelRawToClusterGPUKernel.h:208
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:93
SiPixelFormatterErrors
std::map< cms_uint32_t, std::vector< SiPixelRawDataError > > SiPixelFormatterErrors
Definition: SiPixelFormatterErrors.h:10
pixelgpudetails::numColsInRoc
const uint32_t numColsInRoc
Definition: SiPixelRawToClusterGPUKernel.h:56
pixelgpudetails::ROC_shift
const uint32_t ROC_shift
Definition: SiPixelRawToClusterGPUKernel.h:63
pixelgpudetails::DCOL_mask
const uint32_t DCOL_mask
Definition: SiPixelRawToClusterGPUKernel.h:74
pixelgpudetails::SiPixelRawToClusterGPUKernel::getErrors
SiPixelDigiErrorsCUDA && getErrors()
Definition: SiPixelRawToClusterGPUKernel.h:202
SiPixelROCsStatusAndMapping
Definition: SiPixelROCsStatusAndMapping.h:14
pixelgpudetails::ERROR_mask
const uint32_t ERROR_mask
Definition: SiPixelRawToClusterGPUKernel.h:77
pixelgpudetails::panelStartBit
const uint32_t panelStartBit
Definition: SiPixelRawToClusterGPUKernel.h:30
pixelgpudetails::Packing::adc_width
uint32_t adc_width
Definition: SiPixelRawToClusterGPUKernel.h:118
pixelgpudetails::Pixel::row
uint32_t row
Definition: SiPixelRawToClusterGPUKernel.h:87
__host__
#define __host__
Definition: SiPixelGainForHLTonGPU.h:12
pixelgpudetails::ROW_mask
const uint32_t ROW_mask
Definition: SiPixelRawToClusterGPUKernel.h:73
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:54
pixelgpudetails::Packing::column_mask
PackedDigiType column_mask
Definition: SiPixelRawToClusterGPUKernel.h:126
pixelgpudetails::DetIdGPU
Definition: SiPixelRawToClusterGPUKernel.h:80
pixelgpudetails::moduleStartBit
const uint32_t moduleStartBit
Definition: SiPixelRawToClusterGPUKernel.h:28