Project
Loading...
Searching...
No Matches
GPUTPCCFCheckPadBaseline.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
23
24#ifndef O2_GPU_GPU_TPC_CF_CHECK_PAD_BASELINE_H
25#define O2_GPU_GPU_TPC_CF_CHECK_PAD_BASELINE_H
26
27#include "GPUGeneralKernels.h"
28#include "GPUConstantMem.h"
29#include "GPUTPCGeometry.h"
30
31#include "clusterFinderDefs.h"
32#include "CfArray2D.h"
33
34namespace o2::gpu
35{
36
38 uint32_t iPrev;
39 uint32_t iNext;
40 uint16_t pad;
41 uint16_t tailStart;
42 uint16_t tailEnd;
43 float qTot;
44 float qMax;
45};
46
48{
49
50 public:
51 enum {
58 // Threads index shared memory as [iThread / MaxNPadsPerRow][iThread % MaxNPadsPerRow].
59 // Rounding up to a multiple of PadsPerCacheline ensures iThread / MaxNPadsPerRow < NumOfCachedTBs
60 // for all threads, avoiding out-of-bounds access.
61 MaxNPadsPerRow = CAMath::nextMultipleOf<PadsPerCacheline>(GPUTPCGeometry::MaxNPadsPerRow()),
62
63 MaxADC = 1023,
64
65 NThreads = GPUCA_GET_THREAD_COUNT(GPUCA_LB_GPUTPCCFCheckPadBaseline),
67 };
68
70 struct {
71 int16_t start;
72 int16_t end;
73 };
74
75 // Be careful with using default initialized values.
76 // Need default constructor, so can be placed in shared memory.
77 // Might be zero initialized, but invalid tail needs start = end = -1 instead.
79 GPUdi() HipTailRange(int16_t st, int16_t e) : start(st), end(e) {}
80
81 GPUdi() bool HasValue() const { return start > -1; }
82 GPUdi() bool IsOpen() const { return start > -1 && end < 0; }
83
84 GPUdi() void SetOpen(int16_t st)
85 {
86 start = st;
87 end = -1;
88 }
89
90 GPUdi() int16_t Length() const { return end - start; }
91
92 GPUdi() void Reset() { start = end = -1; }
93 };
94
105
106 // Accumulated values from scanning cached charges in a pad
108 int32_t totalCharges = 0;
109 int32_t consecCharges = 0;
110 int32_t maxConsecCharges = 0;
112 int16_t HIPtb = -1;
113 int16_t aboveThresholdStart = -1; // first TB of current above-hipTailThreshold streak; used to extend the tail back over the rising edge before saturation
116 };
117
120 {
121 return processors.tpcClusterer;
122 }
123
124 GPUhdi() constexpr static gpudatatypes::RecoStep GetRecoStep()
125 {
127 }
128
129 static int32_t GetNBlocks(bool isGPU)
130 {
131 // Important to exclude rightmost padding from Pad Filter.
132 // There's nothing to filter there and padding is counted as start of a row, so it causes an overflow in the row count.
134 return isGPU ? GPUTPCGeometry::NROWS : nBlocksCPU;
135 }
136
137 template <int32_t iKernel = defaultKernel>
138 GPUd() static void Thread(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer);
139
140 private:
141 GPUd() static void CheckBaselineGPU(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer);
142 GPUd() static void CheckBaselineCPU(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer);
143
144 GPUd() static void updatePadBaseline(int32_t pad, const GPUTPCClusterFinder&, int32_t totalCharges, int32_t consecCharges, tpccf::Charge maxCharge);
145};
146
148{
149 public:
150 enum {
151 MaxHIPTails = 1 << 15,
152 MaxHIPTailsPerRow = MaxHIPTails,
153 };
154
156 };
157
160 {
161 return processors.tpcClusterer;
162 }
163
164 GPUhdi() constexpr static gpudatatypes::RecoStep GetRecoStep()
165 {
167 }
168
169 template <int32_t iKernel = defaultKernel>
170 GPUd() static void Thread(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer);
171};
172
174{
175 public:
176 enum {
179 };
180
182 };
183
186 {
187 return processors.tpcClusterer;
188 }
189
190 GPUhdi() constexpr static gpudatatypes::RecoStep GetRecoStep()
191 {
193 }
194
195 template <int32_t iKernel = defaultKernel>
196 GPUd() static void Thread(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer);
197};
198
199} // namespace o2::gpu
200
201#endif
#define GPUCA_GET_THREAD_COUNT(...)
benchmark::State & st
int32_t int32_t int32_t processorType & processors
GPUhdi() const expr static gpudatatypes
int32_t int32_t int32_t GPUSharedMemory & smem
GPUd() static void Thread(int32_t nBlocks
int32_t int32_t int32_t GPUSharedMemory processorType & clusterer
GPUhdi() static processorType *Processor(GPUConstantMem &processors)
GPUhdi() static processorType *Processor(GPUConstantMem &processors)
GPUhdi() const expr static gpudatatypes
GPUhdi() static processorType *Processor(GPUConstantMem &processors)
GPUhdi() const expr static gpudatatypes
static constexpr uint32_t NROWS
#define GPUCF_PADDING_PAD
#define TPC_CLUSTERER_STRIDED_PAD_COUNT
GLuint GLuint end
Definition glcorearb.h:469
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLuint start
Definition glcorearb.h:469
tpccf::Charge charges[NumOfCachedTBs][MaxNPadsPerRow]