|
|
Go to the documentation of this file. 1 #ifndef RecoLocalTracker_SiPixelClusterizer_plugins_gpuClustering_h
2 #define RecoLocalTracker_SiPixelClusterizer_plugins_gpuClustering_h
18 __global__ void countModules(uint16_t
const* __restrict__
id,
30 if (
j < 0
or id[
j] !=
id[
i]) {
38 __global__ void findClus(uint16_t
const* __restrict__
id,
39 uint16_t
const* __restrict__
x,
40 uint16_t
const* __restrict__
y,
52 auto thisModuleId =
id[firstPixel];
56 if (thisModuleId % 100 == 1)
58 printf(
"start clusterizer for module %d in block %d\n", thisModuleId,
blockIdx.x);
71 if (
id[
i] != thisModuleId) {
78 constexpr uint32_t maxPixInModule = 4000;
92 if (msize - firstPixel > maxPixInModule) {
93 printf(
"too many pixels in module %d: %d > %d\n", thisModuleId, msize - firstPixel, maxPixInModule);
94 msize = maxPixInModule + firstPixel;
99 assert(msize - firstPixel <= maxPixInModule);
102 __shared__ uint32_t totGood;
124 if (thisModuleId % 100 == 1)
126 printf(
"histo size %d\n",
hist.size());
131 hist.fill(
y[
i],
i - firstPixel);
141 constexpr
int maxNeighbours = 10;
153 __shared__ uint32_t n40, n60;
157 if (
hist.size(
j) > 60)
159 if (
hist.size(
j) > 40)
165 printf(
"columns with more than 60 px %d in %d\n", n60, thisModuleId);
167 printf(
"columns with more than 40 px %d in %d\n", n40, thisModuleId);
175 auto p =
hist.begin() +
j;
176 auto i = *
p + firstPixel;
184 auto m = (*p) + firstPixel;
205 auto p =
hist.begin() +
j;
206 auto i = *
p + firstPixel;
215 auto p =
hist.begin() +
j;
216 auto i = *
p + firstPixel;
217 for (
int kk = 0;
kk < nnn[
k]; ++
kk) {
219 auto m =
l + firstPixel;
241 if (thisModuleId % 100 == 1)
243 printf(
"# loops %d\n",
nloops);
295 if (thisModuleId % 100 == 1)
296 printf(
"%d clusters in module %d\n",
foundClusters, thisModuleId);
303 #endif // RecoLocalTracker_SiPixelClusterizer_plugins_gpuClustering_h
std::function< unsigned int(align::ID)> Counter
uint16_t const *__restrict__ uint16_t const *__restrict__ y
uint16_t *__restrict__ uint16_t const *__restrict__ uint32_t const *__restrict__ uint32_t *__restrict__ uint32_t const *__restrict__ moduleId
bool __syncthreads_or(bool x)
uint16_t *__restrict__ uint16_t const *__restrict__ uint32_t const *__restrict__ uint32_t *__restrict__ uint32_t const *__restrict__ int32_t *__restrict__ uint32_t numElements
uint16_t *__restrict__ uint16_t const *__restrict__ uint32_t const *__restrict__ moduleStart
cms::cuda::HistoContainer< uint8_t, 256, 16000, 8, uint16_t > Hist
T1 atomicAdd(T1 *a, T2 b)
uint16_t const *__restrict__ x
constexpr uint16_t numColsInModule
uint16_t *__restrict__ uint16_t const *__restrict__ uint32_t const *__restrict__ uint32_t *__restrict__ uint32_t const *__restrict__ int32_t *__restrict__ clusterId
constexpr uint16_t maxNumModules
constexpr uint16_t invalidModuleId
static const MaxIter maxiter
uint16_t *__restrict__ uint16_t const *__restrict__ uint32_t const *__restrict__ uint32_t *__restrict__ nClustersInModule
T1 atomicMin(T1 *a, T2 b)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
__shared__ uint8_t ok[maxNumClustersPerModules]
Abs< T >::type abs(const T &t)
__shared__ unsigned int foundClusters
bool __syncthreads_and(bool x)
T1 atomicInc(T1 *a, T2 b)