Skip to content

Commit 74098a4

Browse files
authored
GPU/TPC: Simplify pad indexing in noisy-pad filter
1 parent 14045ca commit 74098a4

15 files changed

+44
-82
lines changed

GPU/GPUTracking/DataTypes/CalibdEdxContainer.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ void CalibdEdxContainer::setDefaultZeroSupresssionThreshold()
265265
mThresholdMap.setMinCorrectionFactor(defaultVal - 0.1f);
266266
mThresholdMap.setMaxCorrectionFactor(defaultVal + 0.1f);
267267
for (int32_t sector = 0; sector < o2::tpc::constants::MAXSECTOR; ++sector) {
268-
for (uint16_t globPad = 0; globPad < TPC_PADS_IN_SECTOR; ++globPad) {
268+
for (uint16_t globPad = 0; globPad < TPC_REAL_PADS_IN_SECTOR; ++globPad) {
269269
mThresholdMap.setGainCorrection(sector, globPad, defaultVal);
270270
}
271271
}

GPU/GPUTracking/DataTypes/TPCPadBitMap.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ TPCPadBitMap::TPCPadBitMap(const o2::tpc::CalDet<bool>& map) : TPCPadBitMap()
4040
void TPCPadBitMap::setFromMap(const o2::tpc::CalDet<bool>& map)
4141
{
4242
for (int32_t sector = 0; sector < o2::tpc::constants::MAXSECTOR; sector++) {
43-
for (int32_t p = 0; p < TPC_PADS_IN_SECTOR; p++) {
43+
for (int32_t p = 0; p < TPC_REAL_PADS_IN_SECTOR; p++) {
4444
const auto val = map.getValue(sector, p);
4545
mBitMap[sector].set(p, val);
4646
}

GPU/GPUTracking/DataTypes/TPCPadBitMap.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ struct TPCPadBitMap {
6868
{
6969
public:
7070
using T = uint32_t;
71-
static constexpr int32_t NWORDS = (TPC_PADS_IN_SECTOR + sizeof(T) * 8 - 1) / sizeof(T);
71+
static constexpr int32_t NWORDS = (TPC_REAL_PADS_IN_SECTOR + sizeof(T) * 8 - 1) / sizeof(T);
7272
GPUdi() SectorBitMap()
7373
{
7474
reset();

GPU/GPUTracking/DataTypes/TPCPadGainCalib.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ TPCPadGainCalib::TPCPadGainCalib(const o2::tpc::CalDet<float>& gainMap, const fl
4747
void TPCPadGainCalib::setFromMap(const o2::tpc::CalDet<float>& gainMap, const bool inv)
4848
{
4949
for (int32_t sector = 0; sector < o2::tpc::constants::MAXSECTOR; sector++) {
50-
for (int32_t p = 0; p < TPC_PADS_IN_SECTOR; p++) {
50+
for (int32_t p = 0; p < TPC_REAL_PADS_IN_SECTOR; p++) {
5151
const float gainVal = gainMap.getValue(sector, p);
5252
inv ? mGainCorrection[sector].set(p, (gainVal > 1.e-5f) ? 1.f / gainVal : 1.f) : mGainCorrection[sector].set(p, gainVal);
5353
}

GPU/GPUTracking/DataTypes/TPCPadGainCalib.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,14 @@ struct TPCPadGainCalib {
120120

121121
GPUd() void reset()
122122
{
123-
for (uint16_t p = 0; p < TPC_PADS_IN_SECTOR; p++) {
123+
for (uint16_t p = 0; p < TPC_REAL_PADS_IN_SECTOR; p++) {
124124
set(p, 1.0f);
125125
}
126126
}
127127

128128
private:
129+
T mGainCorrection[TPC_REAL_PADS_IN_SECTOR];
130+
129131
GPUd() T pack(float f) const
130132
{
131133
f = CAMath::Clamp(f, mMinCorrectionFactor, mMaxCorrectionFactor);
@@ -140,8 +142,6 @@ struct TPCPadGainCalib {
140142
return mMinCorrectionFactor + (mMaxCorrectionFactor - mMinCorrectionFactor) * float(c) / float(NumOfSteps);
141143
}
142144

143-
T mGainCorrection[TPC_PADS_IN_SECTOR];
144-
145145
GPUdi() T& at(uint16_t globalPad)
146146
{
147147
return mGainCorrection[globalPad];

GPU/GPUTracking/DataTypes/TPCZSLinkMapping.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ TPCZSLinkMapping::TPCZSLinkMapping(o2::tpc::Mapper& mapper)
2727
assert(fecToGlobalPad.size() == TPC_FEC_IDS_IN_SECTOR);
2828

2929
const auto& globalPadToPadPos = mapper.getMapGlobalPadToPadPos();
30-
assert(globalPadToPadPos.size() == TPC_PADS_IN_SECTOR);
30+
assert(globalPadToPadPos.size() == TPC_REAL_PADS_IN_SECTOR);
3131

3232
for (size_t i = 0; i < TPC_FEC_IDS_IN_SECTOR; i++) {
3333
FECIDToPadPos[i] = globalPadToPadPos[fecToGlobalPad[i]];

GPU/GPUTracking/Definitions/clusterFinderDefs.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,19 @@
3232
#endif
3333

3434
// Padding of 2 and 3 respectively would be enough. But this ensures that
35-
// rows are always aligned along cache lines. Likewise for TPC_PADS_PER_ROW.
35+
// rows are always aligned along cache lines. Likewise for TPC_CLUSTERER_ROW_PAD_CAPACITY.
3636
#define GPUCF_PADDING_PAD 8
3737
#define GPUCF_PADDING_TIME 4
38-
#define TPC_PADS_PER_ROW 144
38+
// Largest possible number of pads in a TPC row
39+
#define TPC_CLUSTERER_ROW_PAD_CAPACITY 144
3940

40-
#define TPC_ROWS_PER_CRU 18
41-
#define TPC_PADS_PER_ROW_PADDED (TPC_PADS_PER_ROW + GPUCF_PADDING_PAD)
42-
#define TPC_NUM_OF_PADS (GPUCA_ROW_COUNT * TPC_PADS_PER_ROW_PADDED + GPUCF_PADDING_PAD)
43-
#define TPC_PADS_IN_SECTOR 14560
41+
// Stride between rows as stored internally by the clusterizer
42+
#define TPC_CLUSTERER_ROW_STRIDE (TPC_CLUSTERER_ROW_PAD_CAPACITY + GPUCF_PADDING_PAD)
43+
// Number of pads in a sector as stored internally by the clusterizer.
44+
// This includes fake pads for constant strides between rows
45+
#define TPC_CLUSTERER_STRIDED_PAD_COUNT (GPUCA_ROW_COUNT * TPC_CLUSTERER_ROW_STRIDE + GPUCF_PADDING_PAD)
46+
// Real of number of pads in a sector
47+
#define TPC_REAL_PADS_IN_SECTOR 14560
4448
#define TPC_FEC_IDS_IN_SECTOR 23296
4549
#define TPC_MAX_FRAGMENT_LEN_GPU 4000
4650
#define TPC_MAX_FRAGMENT_LEN_HOST 1000

GPU/GPUTracking/Global/GPUChainTrackingClusterizer.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@ int32_t GPUChainTracking::RunTPCClusterizer(bool synchronizeOutput)
861861
runKernel<GPUMemClean16>({GetGridAutoStep(lane, RecoStep::TPCClusterFinding)}, clustererShadow.mPchargeMap, TPCMapMemoryLayout<ChargeMapType>::items(GetProcessingSettings().overrideClusterizerFragmentLen) * sizeof(ChargeMapType));
862862
runKernel<GPUMemClean16>({GetGridAutoStep(lane, RecoStep::TPCClusterFinding)}, clustererShadow.mPpeakMap, TPCMapMemoryLayout<PeakMapType>::items(GetProcessingSettings().overrideClusterizerFragmentLen) * sizeof(PeakMapType));
863863
if (fragment.index == 0) {
864-
runKernel<GPUMemClean16>({GetGridAutoStep(lane, RecoStep::TPCClusterFinding)}, clustererShadow.mPpadIsNoisy, TPC_PADS_IN_SECTOR * sizeof(*clustererShadow.mPpadIsNoisy));
864+
runKernel<GPUMemClean16>({GetGridAutoStep(lane, RecoStep::TPCClusterFinding)}, clustererShadow.mPpadIsNoisy, TPC_CLUSTERER_STRIDED_PAD_COUNT * sizeof(*clustererShadow.mPpadIsNoisy));
865865
}
866866
DoDebugAndDump(RecoStep::TPCClusterFinding, GPUChainTrackingDebugFlags::TPCClustererZeroedCharges, clusterer, &GPUTPCClusterFinder::DumpChargeMap, *mDebugFile, "Zeroed Charges");
867867

@@ -965,7 +965,7 @@ int32_t GPUChainTracking::RunTPCClusterizer(bool synchronizeOutput)
965965
const int32_t nBlocks = GPUTPCCFCheckPadBaseline::GetNBlocks(doGPU);
966966

967967
runKernel<GPUTPCCFCheckPadBaseline>({GetGridBlk(nBlocks, lane), {iSector}});
968-
getKernelTimer<GPUTPCCFCheckPadBaseline>(RecoStep::TPCClusterFinding, iSector, TPC_PADS_IN_SECTOR * fragment.lengthWithoutOverlap() * sizeof(PackedCharge), false);
968+
getKernelTimer<GPUTPCCFCheckPadBaseline>(RecoStep::TPCClusterFinding, iSector, TPC_REAL_PADS_IN_SECTOR * fragment.lengthWithoutOverlap() * sizeof(PackedCharge), false);
969969
}
970970

971971
runKernel<GPUTPCCFPeakFinder>({GetGrid(clusterer.mPmemory->counters.nPositions, lane), {iSector}});

GPU/GPUTracking/TPCClusterFinder/CfArray2D.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class TilingLayout
4949
enum {
5050
Height = Grid::Height,
5151
Width = Grid::Width,
52-
WidthInTiles = (TPC_NUM_OF_PADS + Width - 1) / Width,
52+
WidthInTiles = (TPC_CLUSTERER_STRIDED_PAD_COUNT + Width - 1) / Width,
5353
};
5454

5555
GPUdi() static tpccf::SizeT idx(const CfChargePos& p)
@@ -65,7 +65,7 @@ class TilingLayout
6565

6666
GPUd() static size_t items(size_t fragmentLen)
6767
{
68-
return (TPC_NUM_OF_PADS + Width - 1) / Width * Width * (TPC_MAX_FRAGMENT_LEN_PADDED(fragmentLen) + Height - 1) / Height * Height;
68+
return (TPC_CLUSTERER_STRIDED_PAD_COUNT + Width - 1) / Width * Width * (TPC_MAX_FRAGMENT_LEN_PADDED(fragmentLen) + Height - 1) / Height * Height;
6969
}
7070
};
7171

@@ -74,12 +74,12 @@ class LinearLayout
7474
public:
7575
GPUdi() static tpccf::SizeT idx(const CfChargePos& p)
7676
{
77-
return TPC_NUM_OF_PADS * p.timePadded + p.gpad;
77+
return TPC_CLUSTERER_STRIDED_PAD_COUNT * p.timePadded + p.gpad;
7878
}
7979

8080
GPUd() static size_t items(size_t fragmentLen)
8181
{
82-
return TPC_NUM_OF_PADS * TPC_MAX_FRAGMENT_LEN_PADDED(fragmentLen);
82+
return TPC_CLUSTERER_STRIDED_PAD_COUNT * TPC_MAX_FRAGMENT_LEN_PADDED(fragmentLen);
8383
}
8484
};
8585

GPU/GPUTracking/TPCClusterFinder/CfChargePos.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ struct CfChargePos {
4242

4343
GPUdi() bool valid() const { return timePadded >= 0; }
4444

45-
GPUdi() tpccf::Row row() const { return gpad / TPC_PADS_PER_ROW_PADDED; }
46-
GPUdi() tpccf::Pad pad() const { return gpad % TPC_PADS_PER_ROW_PADDED - GPUCF_PADDING_PAD; }
45+
GPUdi() tpccf::Row row() const { return gpad / TPC_CLUSTERER_ROW_STRIDE; }
46+
GPUdi() tpccf::Pad pad() const { return gpad % TPC_CLUSTERER_ROW_STRIDE - GPUCF_PADDING_PAD; }
4747
GPUdi() tpccf::TPCFragmentTime time() const { return timePadded - GPUCF_PADDING_TIME; }
4848
GPUdi() tpccf::TPCFragmentTime globalTime() const { return timePadded; }
4949

@@ -52,7 +52,7 @@ struct CfChargePos {
5252
// index between 0 and TPC_NUM_OF_PADS.
5353
static constexpr GPUdi() tpccf::GlobalPad tpcGlobalPadIdx(tpccf::Row row, tpccf::Pad pad)
5454
{
55-
return TPC_PADS_PER_ROW_PADDED * row + pad + GPUCF_PADDING_PAD;
55+
return TPC_CLUSTERER_ROW_STRIDE * row + pad + GPUCF_PADDING_PAD;
5656
}
5757
};
5858

0 commit comments

Comments
 (0)