Skip to content

Commit d07bf78

Browse files
Felix Schlepperf3sch
authored andcommitted
ITS: drop hybrid functions use dynamic dispatch
1 parent 564e27d commit d07bf78

File tree

7 files changed

+73
-178
lines changed

7 files changed

+73
-178
lines changed

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

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,8 @@
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"
20-
#include "Framework/Logger.h"
2118

2219
namespace o2
2320
{
@@ -33,20 +30,19 @@ class TrackerTraitsGPU final : public TrackerTraits
3330

3431
void adoptTimeFrame(TimeFrame* tf) final;
3532
void initialiseTimeFrame(const int iteration) final;
36-
void setBz(float) final;
3733

38-
void computeLayerTracklets(const int iteration, int, int) final { LOGP(fatal, "computeLayerTracklers must never be called from Hybrid traits!"); };
39-
void computeLayerCells(const int iteration) final { LOGP(fatal, "computeLayerCells must never be called from Hybrid traits!"); };
40-
void findCellsNeighbours(const int iteration) final { LOGP(fatal, "findCellsNeighbours must never be called from Hybrid traits!"); };
41-
void findRoads(const int iteration) final { LOGP(fatal, "findRoads must never be called from Hybrid traits!"); };
42-
void extendTracks(const int iteration) final { LOGP(fatal, "extendTracks must never be called from Hybrid traits!"); };
43-
void findShortPrimaries() final { LOGP(fatal, "findShortPrimaries must never be called from Hybrid traits!"); };
34+
void computeLayerTracklets(const int iteration, int, int) final;
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; }
41+
42+
void setBz(float) final;
4443

45-
void initialiseTimeFrameHybrid(const int iteration) final { initialiseTimeFrame(iteration); };
46-
void computeTrackletsHybrid(const int iteration, int, int) final;
47-
void computeCellsHybrid(const int iteration) final;
48-
void findCellsNeighboursHybrid(const int iteration) final;
49-
void findRoadsHybrid(const int iteration) final;
44+
const char* getName() const noexcept final { return "GPU"; }
45+
bool isGPU() const noexcept final { return true; }
5046

5147
// TimeFrameGPU information forwarding
5248
int getTFNumberOfClusters() const override;

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

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -38,34 +38,7 @@ void TrackerTraitsGPU<nLayers>::initialiseTimeFrame(const int iteration)
3838
}
3939

4040
template <int nLayers>
41-
void TrackerTraitsGPU<nLayers>::setBz(float bz)
42-
{
43-
mBz = bz;
44-
mTimeFrameGPU->setBz(bz);
45-
}
46-
47-
template <int nLayers>
48-
int TrackerTraitsGPU<nLayers>::getTFNumberOfClusters() const
49-
{
50-
return mTimeFrameGPU->getNumberOfClusters();
51-
}
52-
53-
template <int nLayers>
54-
int TrackerTraitsGPU<nLayers>::getTFNumberOfTracklets() const
55-
{
56-
return std::accumulate(mTimeFrameGPU->getNTracklets().begin(), mTimeFrameGPU->getNTracklets().end(), 0);
57-
}
58-
59-
template <int nLayers>
60-
int TrackerTraitsGPU<nLayers>::getTFNumberOfCells() const
61-
{
62-
return mTimeFrameGPU->getNumberOfCells();
63-
}
64-
65-
////////////////////////////////////////////////////////////////////////////////
66-
// Hybrid tracking
67-
template <int nLayers>
68-
void TrackerTraitsGPU<nLayers>::computeTrackletsHybrid(const int iteration, int iROFslice, int iVertex)
41+
void TrackerTraitsGPU<nLayers>::computeLayerTracklets(const int iteration, int iROFslice, int iVertex)
6942
{
7043
auto& conf = o2::its::ITSGpuTrackingParamConfig::Instance();
7144
mTimeFrameGPU->createTrackletsLUTDevice(iteration);
@@ -138,7 +111,7 @@ void TrackerTraitsGPU<nLayers>::computeTrackletsHybrid(const int iteration, int
138111
}
139112

140113
template <int nLayers>
141-
void TrackerTraitsGPU<nLayers>::computeCellsHybrid(const int iteration)
114+
void TrackerTraitsGPU<nLayers>::computeLayerCells(const int iteration)
142115
{
143116
mTimeFrameGPU->createCellsLUTDevice();
144117
auto& conf = o2::its::ITSGpuTrackingParamConfig::Instance();
@@ -185,7 +158,7 @@ void TrackerTraitsGPU<nLayers>::computeCellsHybrid(const int iteration)
185158
}
186159

187160
template <int nLayers>
188-
void TrackerTraitsGPU<nLayers>::findCellsNeighboursHybrid(const int iteration)
161+
void TrackerTraitsGPU<nLayers>::findCellsNeighbours(const int iteration)
189162
{
190163
mTimeFrameGPU->createNeighboursIndexTablesDevice();
191164
auto& conf = o2::its::ITSGpuTrackingParamConfig::Instance();
@@ -237,7 +210,7 @@ void TrackerTraitsGPU<nLayers>::findCellsNeighboursHybrid(const int iteration)
237210
};
238211

239212
template <int nLayers>
240-
void TrackerTraitsGPU<nLayers>::findRoadsHybrid(const int iteration)
213+
void TrackerTraitsGPU<nLayers>::findRoads(const int iteration)
241214
{
242215
auto& conf = o2::its::ITSGpuTrackingParamConfig::Instance();
243216
for (int startLevel{mTrkParams[iteration].CellsPerRoad()}; startLevel >= mTrkParams[iteration].CellMinimumLevel(); --startLevel) {
@@ -343,5 +316,30 @@ void TrackerTraitsGPU<nLayers>::findRoadsHybrid(const int iteration)
343316
}
344317
};
345318

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

Detectors/ITSMFT/ITS/tracking/include/ITStracking/Tracker.h

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,7 @@ class Tracker
5757

5858
void adoptTimeFrame(TimeFrame& tf);
5959

60-
void clustersToTracks(
61-
LogFunc = [](std::string s) { std::cout << s << std::endl; }, LogFunc = [](std::string s) { std::cerr << s << std::endl; });
62-
void clustersToTracksHybrid(
63-
LogFunc = [](std::string s) { std::cout << s << std::endl; }, LogFunc = [](std::string s) { std::cerr << s << std::endl; });
64-
std::vector<TrackITSExt>& getTracks();
60+
void clustersToTracks(LogFunc = [](std::string s) { std::cout << s << std::endl; }, LogFunc = [](std::string s) { std::cerr << s << std::endl; });
6561

6662
void setParameters(const std::vector<TrackingParameters>&);
6763
std::vector<TrackingParameters>& getParameters() { return mTrkParams; }
@@ -74,28 +70,13 @@ class Tracker
7470
void printSummary() const;
7571

7672
private:
77-
enum TrackerType : uint8_t { CPU = 0,
78-
Hybrid,
79-
NSize };
80-
template <TrackerType>
81-
void clusterToTracksImpl(LogFunc, LogFunc);
82-
static constexpr const char* sTrackerNames[TrackerType::NSize] = {"CPU", "Hybrid"};
83-
84-
// CPU
8573
void initialiseTimeFrame(int& iteration);
8674
void computeTracklets(int& iteration, int& iROFslice, int& iVertex);
8775
void computeCells(int& iteration);
8876
void findCellsNeighbours(int& iteration);
8977
void findRoads(int& iteration);
9078
void findShortPrimaries();
9179
void extendTracks(int& iteration);
92-
// Hyrbid
93-
void initialiseTimeFrameHybrid(int& iteration);
94-
void computeTrackletsHybrid(int& iteration, int& iROFslice, int& iVertex);
95-
void computeCellsHybrid(int& iteration);
96-
void findCellsNeighboursHybrid(int& iteration);
97-
void findRoadsHybrid(int& iteration);
98-
void findTracksHybrid(int& iteration);
9980

10081
// MC interaction
10182
void computeRoadsMClabels();

Detectors/ITSMFT/ITS/tracking/include/ITStracking/TrackerTraits.h

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,12 @@
1616
#ifndef TRACKINGITSU_INCLUDE_TRACKERTRAITS_H_
1717
#define TRACKINGITSU_INCLUDE_TRACKERTRAITS_H_
1818

19-
#include <array>
20-
#include <chrono>
2119
#include <cmath>
22-
#include <fstream>
23-
#include <iomanip>
24-
#include <iosfwd>
25-
#include <memory>
26-
#include <utility>
27-
#include <functional>
2820

2921
#include "DetectorsBase/Propagator.h"
30-
#include "DetectorsBase/MatLayerCylSet.h"
3122
#include "ITStracking/Configuration.h"
32-
#include "ITStracking/Definitions.h"
3323
#include "ITStracking/MathUtils.h"
3424
#include "ITStracking/TimeFrame.h"
35-
#include "ITStracking/Road.h"
3625

3726
// #define OPTIMISATION_OUTPUT
3827

@@ -51,32 +40,30 @@ class TrackerTraits
5140
public:
5241
virtual ~TrackerTraits() = default;
5342
virtual void adoptTimeFrame(TimeFrame* tf);
54-
5543
virtual void initialiseTimeFrame(const int iteration);
44+
5645
virtual void computeLayerTracklets(const int iteration, int iROFslice, int iVertex);
5746
virtual void computeLayerCells(const int iteration);
5847
virtual void findCellsNeighbours(const int iteration);
5948
virtual void findRoads(const int iteration);
49+
50+
virtual bool supportsExtendTracks() const noexcept { return true; }
6051
virtual void extendTracks(const int iteration);
52+
virtual bool supportsFindShortPrimaries() const noexcept { return true; }
6153
virtual void findShortPrimaries();
6254

63-
virtual void initialiseTimeFrameHybrid(const int iteration) { LOGP(fatal, "initialiseTimeFrameHybrid: this method should never be called with CPU traits"); }
64-
virtual void computeTrackletsHybrid(const int iteration, int, int) { LOGP(fatal, "computeTrackletsHybrid: this method should never be called with CPU traits"); }
65-
virtual void computeCellsHybrid(const int iteration) { LOGP(fatal, "computeCellsHybrid: this method should never be called with CPU traits"); }
66-
virtual void findCellsNeighboursHybrid(const int iteration) { LOGP(fatal, "findCellsNeighboursHybrid: this method should never be called with CPU traits"); }
67-
virtual void findRoadsHybrid(const int iteration) { LOGP(fatal, "findRoadsHybrid: this method should never be called with CPU traits"); }
68-
69-
virtual void setBz(float bz);
7055
virtual bool trackFollowing(TrackITSExt* track, int rof, bool outward, const int iteration);
7156
virtual void processNeighbours(int iLayer, int iLevel, const std::vector<CellSeed>& currentCellSeed, const std::vector<int>& currentCellId, std::vector<CellSeed>& updatedCellSeed, std::vector<int>& updatedCellId);
7257

7358
void UpdateTrackingParameters(const std::vector<TrackingParameters>& trkPars);
7459
TimeFrame* getTimeFrame() { return mTimeFrame; }
7560

76-
void setIsGPU(const unsigned char isgpu) { mIsGPU = isgpu; };
61+
virtual void setBz(float bz);
7762
float getBz() const;
7863
void setCorrType(const o2::base::PropagatorImpl<float>::MatCorrType type) { mCorrType = type; }
7964
bool isMatLUT() const;
65+
virtual const char* getName() const noexcept { return "CPU"; }
66+
virtual bool isGPU() const noexcept { return false; }
8067

8168
// Others
8269
GPUhd() static consteval int4 getEmptyBinsRect() { return int4{0, 0, 0, 0}; }
@@ -110,13 +97,11 @@ class TrackerTraits
11097
o2::gpu::GPUChainITS* mChain = nullptr;
11198
TimeFrame* mTimeFrame;
11299
std::vector<TrackingParameters> mTrkParams;
113-
bool mIsGPU = false;
114100
};
115101

116102
inline void TrackerTraits::initialiseTimeFrame(const int iteration)
117103
{
118104
mTimeFrame->initialise(iteration, mTrkParams[iteration], mTrkParams[iteration].NLayers);
119-
setIsGPU(false);
120105
}
121106

122107
inline float TrackerTraits::getBz() const

0 commit comments

Comments
 (0)