Skip to content

Commit dc09cd0

Browse files
fweigdavidrohr
authored andcommitted
TPCClusterFinder: Improve performance for mc labels.
1 parent 2f162f4 commit dc09cd0

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

GPU/GPUTracking/Global/GPUChainTracking.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1111,7 +1111,7 @@ int GPUChainTracking::RunTPCClusterizer(bool synchronizeOutput)
11111111
std::vector<bool> laneHasData(GetProcessingSettings().nTPCClustererLanes, false);
11121112
for (CfFragment fragment = mCFContext->fragmentFirst; !fragment.isEnd(); fragment = fragment.next()) {
11131113
if (GetProcessingSettings().debugLevel >= 3) {
1114-
GPUInfo("Processing time bins [%d, %d)", fragment.start, fragment.last());
1114+
GPUInfo("Processing time bins [%d, %d) for sectors %d to %d", fragment.start, fragment.last(), iSliceBase, iSliceBase + GetProcessingSettings().nTPCClustererLanes - 1);
11151115
}
11161116
for (int lane = 0; lane < GetProcessingSettings().nTPCClustererLanes && iSliceBase + lane < NSLICES; lane++) {
11171117
if (fragment.index != 0) {

GPU/GPUTracking/TPCClusterFinder/GPUTPCCFChargeMapFiller.cxx

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,21 +67,37 @@ GPUd() void GPUTPCCFChargeMapFiller::fillFromDigitsImpl(int nBlocks, int nThread
6767
template <>
6868
GPUdii() void GPUTPCCFChargeMapFiller::Thread<GPUTPCCFChargeMapFiller::findFragmentStart>(int nBlocks, int nThreads, int iBlock, int iThread, GPUSharedMemory& smem, processorType& clusterer)
6969
{
70-
// TODO: use binary search
71-
if (get_global_id(0) != 0) {
70+
if (iThread != 0) {
7271
return;
7372
}
7473

7574
size_t nDigits = clusterer.mPmemory->counters.nDigits;
7675
const tpc::Digit* digits = clusterer.mPdigits;
77-
size_t st = 0;
78-
for (; st < nDigits && digits[st].getTimeStamp() < clusterer.mPmemory->fragment.first(); st++) {
79-
}
80-
81-
size_t end = st;
82-
for (; end < nDigits && digits[end].getTimeStamp() < clusterer.mPmemory->fragment.last(); end++) {
83-
}
76+
size_t st = findTransition(clusterer.mPmemory->fragment.first(), digits, nDigits, 0);
77+
size_t end = findTransition(clusterer.mPmemory->fragment.last(), digits, nDigits, st);
8478

8579
clusterer.mPmemory->fragment.digitsStart = st;
8680
clusterer.mPmemory->counters.nPositions = end - st;
8781
}
82+
83+
GPUd() size_t GPUTPCCFChargeMapFiller::findTransition(int time, const tpc::Digit* digits, size_t nDigits, size_t lower)
84+
{
85+
size_t upper = nDigits - 1;
86+
87+
while (lower <= upper) {
88+
size_t middle = (lower + upper) / 2;
89+
90+
if (middle == 0) {
91+
return 0;
92+
}
93+
94+
if (digits[middle].getTimeStamp() < time) {
95+
lower = middle + 1;
96+
} else if (digits[middle - 1].getTimeStamp() < time) {
97+
return middle;
98+
} else {
99+
upper = middle - 1;
100+
}
101+
}
102+
return lower;
103+
}

GPU/GPUTracking/TPCClusterFinder/GPUTPCCFChargeMapFiller.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ class GPUTPCCFChargeMapFiller : public GPUKernelTemplate
6464
static GPUd() void fillIndexMapImpl(int, int, int, int, const CfFragment&, const tpc::Digit*, Array2D<uint>&, size_t);
6565

6666
static GPUd() void fillFromDigitsImpl(int, int, int, int, const CfFragment&, size_t, const tpc::Digit*, ChargePos*, Array2D<PackedCharge>&);
67+
68+
private:
69+
static GPUd() size_t findTransition(int, const tpc::Digit*, size_t, size_t);
6770
};
6871

6972
} // namespace gpu

0 commit comments

Comments
 (0)