Skip to content

Commit 7e84e72

Browse files
authored
Merge d20604b into sapling-pr-archive-ktf
2 parents 04718ab + d20604b commit 7e84e72

File tree

12 files changed

+362
-298
lines changed

12 files changed

+362
-298
lines changed

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

Lines changed: 124 additions & 177 deletions
Large diffs are not rendered by default.

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

Lines changed: 70 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -169,45 +169,41 @@ template <int nLayers>
169169
void VertexerTraits<nLayers>::computeTracklets(const int iteration)
170170
{
171171
mTaskArena->execute([&] {
172-
tbb::parallel_for(
173-
tbb::blocked_range<short>(0, (short)mTimeFrame->getNrof()),
174-
[&](const tbb::blocked_range<short>& Rofs) {
175-
for (short pivotRofId = Rofs.begin(); pivotRofId < Rofs.end(); ++pivotRofId) {
176-
bool skipROF = iteration && (int)mTimeFrame->getPrimaryVertices(pivotRofId).size() > mVrtParams[iteration].vertPerRofThreshold;
177-
short startROF{std::max((short)0, static_cast<short>(pivotRofId - mVrtParams[iteration].deltaRof))};
178-
short endROF{std::min(static_cast<short>(mTimeFrame->getNrof()), static_cast<short>(pivotRofId + mVrtParams[iteration].deltaRof + 1))};
179-
for (auto targetRofId = startROF; targetRofId < endROF; ++targetRofId) {
180-
trackleterKernelHost<TrackletMode::Layer0Layer1, true>(
181-
!skipROF ? mTimeFrame->getClustersOnLayer(targetRofId, 0) : gsl::span<Cluster>(), // Clusters to be matched with the next layer in target rof
182-
!skipROF ? mTimeFrame->getClustersOnLayer(pivotRofId, 1) : gsl::span<Cluster>(), // Clusters to be matched with the current layer in pivot rof
183-
mTimeFrame->getUsedClustersROF(targetRofId, 0), // Span of the used clusters in the target rof
184-
mTimeFrame->getIndexTable(targetRofId, 0).data(), // Index table to access the data on the next layer in target rof
185-
mVrtParams[iteration].phiCut,
186-
mTimeFrame->getTracklets()[0], // Flat tracklet buffer
187-
mTimeFrame->getNTrackletsCluster(pivotRofId, 0), // Span of the number of tracklets per each cluster in pivot rof
188-
mIndexTableUtils,
189-
pivotRofId,
190-
targetRofId,
191-
gsl::span<int>(), // Offset in the tracklet buffer
192-
mVrtParams[iteration].maxTrackletsPerCluster);
193-
trackleterKernelHost<TrackletMode::Layer1Layer2, true>(
194-
!skipROF ? mTimeFrame->getClustersOnLayer(targetRofId, 2) : gsl::span<Cluster>(),
195-
!skipROF ? mTimeFrame->getClustersOnLayer(pivotRofId, 1) : gsl::span<Cluster>(),
196-
mTimeFrame->getUsedClustersROF(targetRofId, 2),
197-
mTimeFrame->getIndexTable(targetRofId, 2).data(),
198-
mVrtParams[iteration].phiCut,
199-
mTimeFrame->getTracklets()[1],
200-
mTimeFrame->getNTrackletsCluster(pivotRofId, 1), // Span of the number of tracklets per each cluster in pivot rof
201-
mIndexTableUtils,
202-
pivotRofId,
203-
targetRofId,
204-
gsl::span<int>(), // Offset in the tracklet buffer
205-
mVrtParams[iteration].maxTrackletsPerCluster);
206-
}
207-
mTimeFrame->getNTrackletsROF(pivotRofId, 0) = std::accumulate(mTimeFrame->getNTrackletsCluster(pivotRofId, 0).begin(), mTimeFrame->getNTrackletsCluster(pivotRofId, 0).end(), 0);
208-
mTimeFrame->getNTrackletsROF(pivotRofId, 1) = std::accumulate(mTimeFrame->getNTrackletsCluster(pivotRofId, 1).begin(), mTimeFrame->getNTrackletsCluster(pivotRofId, 1).end(), 0);
209-
}
210-
});
172+
tbb::parallel_for(0, mTimeFrame->getNrof(), [&](const short pivotRofId) {
173+
bool skipROF = iteration && (int)mTimeFrame->getPrimaryVertices(pivotRofId).size() > mVrtParams[iteration].vertPerRofThreshold;
174+
short startROF{std::max((short)0, static_cast<short>(pivotRofId - mVrtParams[iteration].deltaRof))};
175+
short endROF{std::min(static_cast<short>(mTimeFrame->getNrof()), static_cast<short>(pivotRofId + mVrtParams[iteration].deltaRof + 1))};
176+
for (auto targetRofId = startROF; targetRofId < endROF; ++targetRofId) {
177+
trackleterKernelHost<TrackletMode::Layer0Layer1, true>(
178+
!skipROF ? mTimeFrame->getClustersOnLayer(targetRofId, 0) : gsl::span<Cluster>(), // Clusters to be matched with the next layer in target rof
179+
!skipROF ? mTimeFrame->getClustersOnLayer(pivotRofId, 1) : gsl::span<Cluster>(), // Clusters to be matched with the current layer in pivot rof
180+
mTimeFrame->getUsedClustersROF(targetRofId, 0), // Span of the used clusters in the target rof
181+
mTimeFrame->getIndexTable(targetRofId, 0).data(), // Index table to access the data on the next layer in target rof
182+
mVrtParams[iteration].phiCut,
183+
mTimeFrame->getTracklets()[0], // Flat tracklet buffer
184+
mTimeFrame->getNTrackletsCluster(pivotRofId, 0), // Span of the number of tracklets per each cluster in pivot rof
185+
mIndexTableUtils,
186+
pivotRofId,
187+
targetRofId,
188+
gsl::span<int>(), // Offset in the tracklet buffer
189+
mVrtParams[iteration].maxTrackletsPerCluster);
190+
trackleterKernelHost<TrackletMode::Layer1Layer2, true>(
191+
!skipROF ? mTimeFrame->getClustersOnLayer(targetRofId, 2) : gsl::span<Cluster>(),
192+
!skipROF ? mTimeFrame->getClustersOnLayer(pivotRofId, 1) : gsl::span<Cluster>(),
193+
mTimeFrame->getUsedClustersROF(targetRofId, 2),
194+
mTimeFrame->getIndexTable(targetRofId, 2).data(),
195+
mVrtParams[iteration].phiCut,
196+
mTimeFrame->getTracklets()[1],
197+
mTimeFrame->getNTrackletsCluster(pivotRofId, 1), // Span of the number of tracklets per each cluster in pivot rof
198+
mIndexTableUtils,
199+
pivotRofId,
200+
targetRofId,
201+
gsl::span<int>(), // Offset in the tracklet buffer
202+
mVrtParams[iteration].maxTrackletsPerCluster);
203+
}
204+
mTimeFrame->getNTrackletsROF(pivotRofId, 0) = std::accumulate(mTimeFrame->getNTrackletsCluster(pivotRofId, 0).begin(), mTimeFrame->getNTrackletsCluster(pivotRofId, 0).end(), 0);
205+
mTimeFrame->getNTrackletsROF(pivotRofId, 1) = std::accumulate(mTimeFrame->getNTrackletsCluster(pivotRofId, 1).begin(), mTimeFrame->getNTrackletsCluster(pivotRofId, 1).end(), 0);
206+
});
211207

212208
mTimeFrame->computeTrackletsPerROFScans();
213209
if (auto tot0 = mTimeFrame->getTotalTrackletsTF(0), tot1 = mTimeFrame->getTotalTrackletsTF(1);
@@ -218,45 +214,41 @@ void VertexerTraits<nLayers>::computeTracklets(const int iteration)
218214
mTimeFrame->getTracklets()[1].resize(tot1);
219215
}
220216

221-
tbb::parallel_for(
222-
tbb::blocked_range<short>(0, (short)mTimeFrame->getNrof()),
223-
[&](const tbb::blocked_range<short>& Rofs) {
224-
for (short pivotRofId = Rofs.begin(); pivotRofId < Rofs.end(); ++pivotRofId) {
225-
bool skipROF = iteration && (int)mTimeFrame->getPrimaryVertices(pivotRofId).size() > mVrtParams[iteration].vertPerRofThreshold;
226-
short startROF{std::max((short)0, static_cast<short>(pivotRofId - mVrtParams[iteration].deltaRof))};
227-
short endROF{std::min(static_cast<short>(mTimeFrame->getNrof()), static_cast<short>(pivotRofId + mVrtParams[iteration].deltaRof + 1))};
228-
auto mobileOffset0 = mTimeFrame->getNTrackletsROF(pivotRofId, 0);
229-
auto mobileOffset1 = mTimeFrame->getNTrackletsROF(pivotRofId, 1);
230-
for (auto targetRofId = startROF; targetRofId < endROF; ++targetRofId) {
231-
trackleterKernelHost<TrackletMode::Layer0Layer1, false>(
232-
!skipROF ? mTimeFrame->getClustersOnLayer(targetRofId, 0) : gsl::span<Cluster>(),
233-
!skipROF ? mTimeFrame->getClustersOnLayer(pivotRofId, 1) : gsl::span<Cluster>(),
234-
mTimeFrame->getUsedClustersROF(targetRofId, 0),
235-
mTimeFrame->getIndexTable(targetRofId, 0).data(),
236-
mVrtParams[iteration].phiCut,
237-
mTimeFrame->getTracklets()[0],
238-
mTimeFrame->getNTrackletsCluster(pivotRofId, 0),
239-
mIndexTableUtils,
240-
pivotRofId,
241-
targetRofId,
242-
mTimeFrame->getExclusiveNTrackletsCluster(pivotRofId, 0),
243-
mVrtParams[iteration].maxTrackletsPerCluster);
244-
trackleterKernelHost<TrackletMode::Layer1Layer2, false>(
245-
!skipROF ? mTimeFrame->getClustersOnLayer(targetRofId, 2) : gsl::span<Cluster>(),
246-
!skipROF ? mTimeFrame->getClustersOnLayer(pivotRofId, 1) : gsl::span<Cluster>(),
247-
mTimeFrame->getUsedClustersROF(targetRofId, 2),
248-
mTimeFrame->getIndexTable(targetRofId, 2).data(),
249-
mVrtParams[iteration].phiCut,
250-
mTimeFrame->getTracklets()[1],
251-
mTimeFrame->getNTrackletsCluster(pivotRofId, 1),
252-
mIndexTableUtils,
253-
pivotRofId,
254-
targetRofId,
255-
mTimeFrame->getExclusiveNTrackletsCluster(pivotRofId, 1),
256-
mVrtParams[iteration].maxTrackletsPerCluster);
257-
}
258-
}
259-
});
217+
tbb::parallel_for(0, mTimeFrame->getNrof(), [&](const short pivotRofId) {
218+
bool skipROF = iteration && (int)mTimeFrame->getPrimaryVertices(pivotRofId).size() > mVrtParams[iteration].vertPerRofThreshold;
219+
short startROF{std::max((short)0, static_cast<short>(pivotRofId - mVrtParams[iteration].deltaRof))};
220+
short endROF{std::min(static_cast<short>(mTimeFrame->getNrof()), static_cast<short>(pivotRofId + mVrtParams[iteration].deltaRof + 1))};
221+
auto mobileOffset0 = mTimeFrame->getNTrackletsROF(pivotRofId, 0);
222+
auto mobileOffset1 = mTimeFrame->getNTrackletsROF(pivotRofId, 1);
223+
for (auto targetRofId = startROF; targetRofId < endROF; ++targetRofId) {
224+
trackleterKernelHost<TrackletMode::Layer0Layer1, false>(
225+
!skipROF ? mTimeFrame->getClustersOnLayer(targetRofId, 0) : gsl::span<Cluster>(),
226+
!skipROF ? mTimeFrame->getClustersOnLayer(pivotRofId, 1) : gsl::span<Cluster>(),
227+
mTimeFrame->getUsedClustersROF(targetRofId, 0),
228+
mTimeFrame->getIndexTable(targetRofId, 0).data(),
229+
mVrtParams[iteration].phiCut,
230+
mTimeFrame->getTracklets()[0],
231+
mTimeFrame->getNTrackletsCluster(pivotRofId, 0),
232+
mIndexTableUtils,
233+
pivotRofId,
234+
targetRofId,
235+
mTimeFrame->getExclusiveNTrackletsCluster(pivotRofId, 0),
236+
mVrtParams[iteration].maxTrackletsPerCluster);
237+
trackleterKernelHost<TrackletMode::Layer1Layer2, false>(
238+
!skipROF ? mTimeFrame->getClustersOnLayer(targetRofId, 2) : gsl::span<Cluster>(),
239+
!skipROF ? mTimeFrame->getClustersOnLayer(pivotRofId, 1) : gsl::span<Cluster>(),
240+
mTimeFrame->getUsedClustersROF(targetRofId, 2),
241+
mTimeFrame->getIndexTable(targetRofId, 2).data(),
242+
mVrtParams[iteration].phiCut,
243+
mTimeFrame->getTracklets()[1],
244+
mTimeFrame->getNTrackletsCluster(pivotRofId, 1),
245+
mIndexTableUtils,
246+
pivotRofId,
247+
targetRofId,
248+
mTimeFrame->getExclusiveNTrackletsCluster(pivotRofId, 1),
249+
mVrtParams[iteration].maxTrackletsPerCluster);
250+
}
251+
});
260252
});
261253

262254
/// Create tracklets labels for L0-L1, information is as flat as in tracklets vector (no rofId)

Framework/Core/include/Framework/Configurable.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,9 @@ template <typename T>
114114
concept is_process_configurable = is_configurable<T> && requires(T& t) { t.process; };
115115

116116
#define PROCESS_SWITCH(_Class_, _Name_, _Help_, _Default_) \
117-
decltype(ProcessConfigurable{&_Class_ ::_Name_, #_Name_, _Default_, _Help_}) do##_Name_ = ProcessConfigurable{&_Class_ ::_Name_, #_Name_, _Default_, _Help_};
117+
decltype(o2::framework::ProcessConfigurable{&_Class_ ::_Name_, #_Name_, _Default_, _Help_}) do##_Name_ = o2::framework::ProcessConfigurable{&_Class_ ::_Name_, #_Name_, _Default_, _Help_};
118118
#define PROCESS_SWITCH_FULL(_Class_, _Method_, _Name_, _Help_, _Default_) \
119-
decltype(ProcessConfigurable{&_Class_ ::_Method_, #_Name_, _Default_, _Help_}) do##_Name_ = ProcessConfigurable{&_Class_ ::_Method_, #_Name_, _Default_, _Help_};
119+
decltype(o2::framework::ProcessConfigurable{&_Class_ ::_Method_, #_Name_, _Default_, _Help_}) do##_Name_ = o2::framework::ProcessConfigurable{&_Class_ ::_Method_, #_Name_, _Default_, _Help_};
120120

121121
template <typename T, ConfigParamKind K, typename IP>
122122
std::ostream& operator<<(std::ostream& os, Configurable<T, K, IP> const& c)

Framework/Core/src/CallbacksPolicy.cxx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@
2323
namespace o2::framework
2424
{
2525

26-
static bool checkPrescale(const TimingInfo& info, int prescale, bool startProcessing)
26+
static bool checkPrescale(const TimingInfo& info, int prescale, bool startProcessing, bool noDownscaling)
2727
{
2828
if (prescale <= 1) {
2929
static size_t counter = 0;
3030
static size_t downscaleFactor = 1;
3131
if (startProcessing) {
3232
counter++;
3333
}
34-
if (counter <= 100000) {
34+
if (counter <= 100000 || noDownscaling) {
3535
return true;
3636
}
3737
if (counter > 100000 * downscaleFactor) {
@@ -53,6 +53,8 @@ CallbacksPolicy epnProcessReporting()
5353
if (!prescale) {
5454
prescale = 1;
5555
}
56+
static bool noDownscaling = getenv("DPL_REPORT_PROCESSING_NO_DOWNSCALING") != nullptr && std::abs(atoi(getenv("DPL_REPORT_PROCESSING_NO_DOWNSCALING")));
57+
5658
return {
5759
.matcher = [forceReport](DeviceSpec const&, ConfigContext const& context) -> bool {
5860
static bool report = DefaultsHelpers::deploymentMode() == DeploymentMode::OnlineDDS || forceReport;
@@ -61,7 +63,7 @@ CallbacksPolicy epnProcessReporting()
6163
.policy = [prescale](CallbackService& callbacks, InitContext& context) -> void {
6264
callbacks.set<CallbackService::Id::PreProcessing>([prescale](ServiceRegistryRef registry, int op) {
6365
auto& info = registry.get<TimingInfo>();
64-
if ((int)info.firstTForbit != -1 && checkPrescale(info, prescale, true)) {
66+
if ((int)info.firstTForbit != -1 && checkPrescale(info, prescale, true, noDownscaling)) {
6567
char const* what = info.isTimer() ? "timer" : "timeslice";
6668
LOGP(info, "Processing {}:{}, tfCounter:{}, firstTForbit:{}, runNumber:{}, creation:{}, action:{}",
6769
what, info.timeslice, info.tfCounter, info.firstTForbit, info.runNumber, info.creation, op);
@@ -70,7 +72,7 @@ CallbacksPolicy epnProcessReporting()
7072
});
7173
callbacks.set<CallbackService::Id::PostProcessing>([prescale](ServiceRegistryRef registry, int op) {
7274
auto& info = registry.get<TimingInfo>();
73-
if ((int)info.firstTForbit != -1 && checkPrescale(info, prescale, false)) {
75+
if ((int)info.firstTForbit != -1 && checkPrescale(info, prescale, false, noDownscaling)) {
7476
char const* what = info.isTimer() ? "timer" : "timeslice";
7577
LOGP(info, "Done processing {}:{}, tfCounter:{}, firstTForbit:{}, runNumber:{}, creation:{}, action:{}, wall:{}",
7678
what, info.timeslice, info.tfCounter, info.firstTForbit, info.runNumber, info.creation, op, uv_hrtime() - info.lapse);

0 commit comments

Comments
 (0)