Skip to content

Commit 72b50c6

Browse files
authored
ITS: Fix GPU deterministic mode + refactoring (#14200)
1 parent 04baff0 commit 72b50c6

File tree

12 files changed

+317
-560
lines changed

12 files changed

+317
-560
lines changed

Detectors/ITSMFT/ITS/tracking/GPU/ITStrackingGPU/TimeFrameGPU.h

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,13 @@
1515

1616
#include "ITStracking/TimeFrame.h"
1717
#include "ITStracking/Configuration.h"
18-
19-
#include "ITStrackingGPU/ClusterLinesGPU.h"
2018
#include "ITStrackingGPU/Utils.h"
2119

2220
#include <gsl/gsl>
2321

24-
namespace o2
25-
{
26-
namespace its
27-
{
28-
namespace gpu
22+
namespace o2::its::gpu
2923
{
24+
3025
class Stream;
3126

3227
class DefaultGPUAllocator : public ExternalAllocator
@@ -228,7 +223,6 @@ inline int TimeFrameGPU<nLayers>::getNumberOfCells() const
228223
return std::accumulate(mNCells.begin(), mNCells.end(), 0);
229224
}
230225

231-
} // namespace gpu
232-
} // namespace its
233-
} // namespace o2
226+
} // namespace o2::its::gpu
227+
234228
#endif

Detectors/ITSMFT/ITS/tracking/GPU/ITStrackingGPU/TrackerTraitsGPU.h

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
#ifndef ITSTRACKINGGPU_TRACKERTRAITSGPU_H_
1414
#define ITSTRACKINGGPU_TRACKERTRAITSGPU_H_
1515

16-
#include "ITStracking/Configuration.h"
17-
#include "ITStracking/Definitions.h"
1816
#include "ITStracking/TrackerTraits.h"
1917
#include "ITStrackingGPU/TimeFrameGPU.h"
2018

@@ -24,28 +22,27 @@ namespace its
2422
{
2523

2624
template <int nLayers = 7>
27-
class TrackerTraitsGPU : public TrackerTraits
25+
class TrackerTraitsGPU final : public TrackerTraits
2826
{
2927
public:
3028
TrackerTraitsGPU() = default;
3129
~TrackerTraitsGPU() override = default;
3230

33-
// void computeLayerCells() final;
34-
void adoptTimeFrame(TimeFrame* tf) override;
35-
void initialiseTimeFrame(const int iteration) override;
31+
void adoptTimeFrame(TimeFrame* tf) final;
32+
void initialiseTimeFrame(const int iteration) final;
33+
3634
void computeLayerTracklets(const int iteration, int, int) final;
37-
void computeLayerCells(const int iteration) override;
38-
void setBz(float) override;
39-
void findCellsNeighbours(const int iteration) override;
40-
void findRoads(const int iteration) override;
35+
void computeLayerCells(const int iteration) final;
36+
void findCellsNeighbours(const int iteration) final;
37+
void findRoads(const int iteration) final;
38+
39+
bool supportsExtendTracks() const noexcept final { return false; }
40+
bool supportsFindShortPrimaries() const noexcept final { return false; }
4141

42-
// Methods to get CPU execution from traits
43-
void initialiseTimeFrameHybrid(const int iteration) override { initialiseTimeFrame(iteration); };
44-
void computeTrackletsHybrid(const int iteration, int, int) override;
45-
void computeCellsHybrid(const int iteration) override;
46-
void findCellsNeighboursHybrid(const int iteration) override;
42+
void setBz(float) final;
4743

48-
void extendTracks(const int iteration) override;
44+
const char* getName() const noexcept final { return "GPU"; }
45+
bool isGPU() const noexcept final { return true; }
4946

5047
// TimeFrameGPU information forwarding
5148
int getTFNumberOfClusters() const override;

Detectors/ITSMFT/ITS/tracking/GPU/ITStrackingGPU/TrackingKernels.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,7 @@ void computeCellNeighboursHandler(CellSeed** cellsLayersDevice,
176176
const int nBlocks,
177177
const int nThreads);
178178

179-
int filterCellNeighboursHandler(std::vector<int>&,
180-
gpuPair<int, int>*,
179+
int filterCellNeighboursHandler(gpuPair<int, int>*,
181180
int*,
182181
unsigned int);
183182

Detectors/ITSMFT/ITS/tracking/GPU/cuda/TrackerTraitsGPU.cxx

Lines changed: 29 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@
1111
///
1212

1313
#include <array>
14-
#include <sstream>
15-
#include <iostream>
1614
#include <unistd.h>
17-
#include <thread>
1815

1916
#include "DataFormatsITS/TrackITS.h"
2017

@@ -41,54 +38,7 @@ void TrackerTraitsGPU<nLayers>::initialiseTimeFrame(const int iteration)
4138
}
4239

4340
template <int nLayers>
44-
void TrackerTraitsGPU<nLayers>::computeLayerTracklets(const int iteration, int, int)
45-
{
46-
}
47-
48-
template <int nLayers>
49-
void TrackerTraitsGPU<nLayers>::computeLayerCells(const int iteration)
50-
{
51-
}
52-
53-
template <int nLayers>
54-
void TrackerTraitsGPU<nLayers>::findCellsNeighbours(const int iteration)
55-
{
56-
}
57-
58-
template <int nLayers>
59-
void TrackerTraitsGPU<nLayers>::extendTracks(const int iteration)
60-
{
61-
}
62-
63-
template <int nLayers>
64-
void TrackerTraitsGPU<nLayers>::setBz(float bz)
65-
{
66-
mBz = bz;
67-
mTimeFrameGPU->setBz(bz);
68-
}
69-
70-
template <int nLayers>
71-
int TrackerTraitsGPU<nLayers>::getTFNumberOfClusters() const
72-
{
73-
return mTimeFrameGPU->getNumberOfClusters();
74-
}
75-
76-
template <int nLayers>
77-
int TrackerTraitsGPU<nLayers>::getTFNumberOfTracklets() const
78-
{
79-
return std::accumulate(mTimeFrameGPU->getNTracklets().begin(), mTimeFrameGPU->getNTracklets().end(), 0);
80-
}
81-
82-
template <int nLayers>
83-
int TrackerTraitsGPU<nLayers>::getTFNumberOfCells() const
84-
{
85-
return mTimeFrameGPU->getNumberOfCells();
86-
}
87-
88-
////////////////////////////////////////////////////////////////////////////////
89-
// Hybrid tracking
90-
template <int nLayers>
91-
void TrackerTraitsGPU<nLayers>::computeTrackletsHybrid(const int iteration, int iROFslice, int iVertex)
41+
void TrackerTraitsGPU<nLayers>::computeLayerTracklets(const int iteration, int iROFslice, int iVertex)
9242
{
9343
auto& conf = o2::its::ITSGpuTrackingParamConfig::Instance();
9444
mTimeFrameGPU->createTrackletsLUTDevice(iteration);
@@ -161,7 +111,7 @@ void TrackerTraitsGPU<nLayers>::computeTrackletsHybrid(const int iteration, int
161111
}
162112

163113
template <int nLayers>
164-
void TrackerTraitsGPU<nLayers>::computeCellsHybrid(const int iteration)
114+
void TrackerTraitsGPU<nLayers>::computeLayerCells(const int iteration)
165115
{
166116
mTimeFrameGPU->createCellsLUTDevice();
167117
auto& conf = o2::its::ITSGpuTrackingParamConfig::Instance();
@@ -208,7 +158,7 @@ void TrackerTraitsGPU<nLayers>::computeCellsHybrid(const int iteration)
208158
}
209159

210160
template <int nLayers>
211-
void TrackerTraitsGPU<nLayers>::findCellsNeighboursHybrid(const int iteration)
161+
void TrackerTraitsGPU<nLayers>::findCellsNeighbours(const int iteration)
212162
{
213163
mTimeFrameGPU->createNeighboursIndexTablesDevice();
214164
auto& conf = o2::its::ITSGpuTrackingParamConfig::Instance();
@@ -250,8 +200,7 @@ void TrackerTraitsGPU<nLayers>::findCellsNeighboursHybrid(const int iteration)
250200
conf.nBlocks,
251201
conf.nThreads);
252202

253-
filterCellNeighboursHandler(mTimeFrameGPU->getCellsNeighbours()[iLayer],
254-
mTimeFrameGPU->getDeviceNeighbourPairs(iLayer),
203+
filterCellNeighboursHandler(mTimeFrameGPU->getDeviceNeighbourPairs(iLayer),
255204
mTimeFrameGPU->getDeviceNeighbours(iLayer),
256205
nNeigh);
257206
}
@@ -270,9 +219,6 @@ void TrackerTraitsGPU<nLayers>::findRoads(const int iteration)
270219
if ((mTrkParams[iteration].StartLayerMask & (1 << (startLayer + 2))) == 0) {
271220
continue;
272221
}
273-
std::vector<int> lastCellId, updatedCellId;
274-
std::vector<CellSeed> lastCellSeed, updatedCellSeed;
275-
276222
processNeighboursHandler<nLayers>(startLayer,
277223
startLevel,
278224
mTimeFrameGPU->getDeviceArrayCells(),
@@ -366,5 +312,30 @@ void TrackerTraitsGPU<nLayers>::findRoads(const int iteration)
366312
}
367313
};
368314

315+
template <int nLayers>
316+
int TrackerTraitsGPU<nLayers>::getTFNumberOfClusters() const
317+
{
318+
return mTimeFrameGPU->getNumberOfClusters();
319+
}
320+
321+
template <int nLayers>
322+
int TrackerTraitsGPU<nLayers>::getTFNumberOfTracklets() const
323+
{
324+
return std::accumulate(mTimeFrameGPU->getNTracklets().begin(), mTimeFrameGPU->getNTracklets().end(), 0);
325+
}
326+
327+
template <int nLayers>
328+
int TrackerTraitsGPU<nLayers>::getTFNumberOfCells() const
329+
{
330+
return mTimeFrameGPU->getNumberOfCells();
331+
}
332+
333+
template <int nLayers>
334+
void TrackerTraitsGPU<nLayers>::setBz(float bz)
335+
{
336+
mBz = bz;
337+
mTimeFrameGPU->setBz(bz);
338+
}
339+
369340
template class TrackerTraitsGPU<7>;
370341
} // namespace o2::its

0 commit comments

Comments
 (0)