Skip to content

Commit 52d7d58

Browse files
authored
ITS: allow sharing of arena in Tracker & Vertexer (#14394)
1 parent 1d90dc8 commit 52d7d58

File tree

9 files changed

+467
-495
lines changed

9 files changed

+467
-495
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
#include <utility>
2828
#include <sstream>
2929

30+
#include <oneapi/tbb/task_arena.h>
31+
3032
#include "ITStracking/Configuration.h"
3133
#include "CommonConstants/MathConstants.h"
3234
#include "ITStracking/Definitions.h"
@@ -73,8 +75,7 @@ class Tracker
7375
void setBz(float bz) { mTraits->setBz(bz); }
7476
void setCorrType(const o2::base::PropagatorImpl<float>::MatCorrType type) { mTraits->setCorrType(type); }
7577
bool isMatLUT() const { return mTraits->isMatLUT(); }
76-
void setNThreads(int n) { mTraits->setNThreads(n); }
77-
int getNThreads() const { return mTraits->getNThreads(); }
78+
void setNThreads(int n, std::shared_ptr<tbb::task_arena>& arena) { mTraits->setNThreads(n, arena); }
7879
void printSummary() const;
7980

8081
private:

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ class TrackerTraits
8080
void SetRecoChain(o2::gpu::GPUChainITS* chain) { mChain = chain; }
8181
void setSmoothing(bool v) { mApplySmoothing = v; }
8282
bool getSmoothing() const { return mApplySmoothing; }
83-
void setNThreads(int n);
84-
int getNThreads() const { return mNThreads; }
83+
void setNThreads(int n, std::shared_ptr<tbb::task_arena>& arena);
84+
int getNThreads() { return mTaskArena->max_concurrency(); }
8585

8686
o2::gpu::GPUChainITS* getChain() const { return mChain; }
8787

@@ -94,10 +94,9 @@ class TrackerTraits
9494
track::TrackParCov buildTrackSeed(const Cluster& cluster1, const Cluster& cluster2, const TrackingFrameInfo& tf3);
9595
bool fitTrack(TrackITSExt& track, int start, int end, int step, float chi2clcut = o2::constants::math::VeryBig, float chi2ndfcut = o2::constants::math::VeryBig, float maxQoverPt = o2::constants::math::VeryBig, int nCl = 0);
9696

97-
int mNThreads = 1;
9897
bool mApplySmoothing = false;
9998
std::shared_ptr<BoundedMemoryResource> mMemoryPool;
100-
tbb::task_arena mTaskArena;
99+
std::shared_ptr<tbb::task_arena> mTaskArena;
101100

102101
protected:
103102
o2::base::PropagatorImpl<float>::MatCorrType mCorrType = o2::base::PropagatorImpl<float>::MatCorrType::USEMatCorrNONE;

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include "GPUO2Interface.h"
2929
#include "GPUChainITS.h"
3030

31+
#include <oneapi/tbb/task_arena.h>
32+
3133
namespace o2::its
3234
{
3335
class ITSTrackingInterface
@@ -98,6 +100,7 @@ class ITSTrackingInterface
98100
std::unique_ptr<Vertexer> mVertexer = nullptr;
99101
const o2::dataformats::MeanVertexObject* mMeanVertex;
100102
std::shared_ptr<BoundedMemoryResource> mMemoryPool;
103+
std::shared_ptr<tbb::task_arena> mTaskArena;
101104
};
102105

103106
} // namespace o2::its

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
#include <iomanip>
2222
#include <array>
2323
#include <iosfwd>
24+
#include <memory>
25+
26+
#include <oneapi/tbb/task_arena.h>
2427

2528
#include "ITStracking/ROframe.h"
2629
#include "ITStracking/Constants.h"
@@ -90,6 +93,8 @@ class Vertexer
9093
const unsigned selectedN, const unsigned int vertexN, const float initT,
9194
const float trackletT, const float selecT, const float vertexT);
9295

96+
void setNThreads(int n, std::shared_ptr<tbb::task_arena>& arena) { mTraits->setNThreads(n, arena); }
97+
9398
private:
9499
std::uint32_t mTimeFrameCounter = 0;
95100

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#define O2_ITS_TRACKING_VERTEXER_TRAITS_H_
1818

1919
#include <array>
20+
#include <memory>
2021
#include <string>
2122
#include <vector>
2223

@@ -93,8 +94,8 @@ class VertexerTraits
9394
auto getVertexingParameters() const { return mVrtParams; }
9495
void setVertexingParameters(std::vector<VertexingParameters>& vertParams) { mVrtParams = vertParams; }
9596
void dumpVertexerTraits();
96-
void setNThreads(int n);
97-
int getNThreads() const { return mNThreads; }
97+
void setNThreads(int n, std::shared_ptr<tbb::task_arena>& arena);
98+
int getNThreads() { return mTaskArena->max_concurrency(); }
9899
virtual bool isGPU() const noexcept { return false; }
99100
virtual const char* getName() const noexcept { return "CPU"; }
100101
virtual bool usesMemoryPool() const noexcept { return true; }
@@ -116,16 +117,14 @@ class VertexerTraits
116117
}
117118

118119
protected:
119-
int mNThreads = 1;
120-
121120
std::vector<VertexingParameters> mVrtParams;
122121
IndexTableUtils mIndexTableUtils;
123122

124123
// Frame related quantities
125124
TimeFrame7* mTimeFrame = nullptr; // observer ptr
126125
private:
127126
std::shared_ptr<BoundedMemoryResource> mMemoryPool;
128-
tbb::task_arena mTaskArena;
127+
std::shared_ptr<tbb::task_arena> mTaskArena;
129128
};
130129

131130
inline void VertexerTraits::initialise(const TrackingParameters& trackingParams, const int iteration)

Detectors/ITSMFT/ITS/tracking/src/Tracker.cxx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,6 @@ void Tracker::getGlobalConfiguration()
342342
} else {
343343
mTraits->setCorrType(o2::base::PropagatorImpl<float>::MatCorrType::USEMatCorrLUT);
344344
}
345-
setNThreads(tc.nThreads);
346345
int nROFsPerIterations = tc.nROFsPerIterations > 0 ? tc.nROFsPerIterations : -1;
347346
if (tc.nOrbitsPerIterations > 0) {
348347
/// code to be used when the number of ROFs per orbit is known, this gets priority over the number of ROFs per iteration

0 commit comments

Comments
 (0)