From 7f9bf9459a928b5efecae9070e9bafd26806d03f Mon Sep 17 00:00:00 2001 From: Felix Schlepper Date: Fri, 15 Aug 2025 13:32:32 +0200 Subject: [PATCH 1/3] ITS: parallelize cell labeling Signed-off-by: Felix Schlepper --- .../ITSMFT/ITS/tracking/src/TrackerTraits.cxx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx b/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx index 2ebfbfe235c5b..c77d0a2dc65c8 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx @@ -459,13 +459,18 @@ void TrackerTraits::computeLayerCells(const int iteration) /// Create cells labels if (mTimeFrame->hasMCinformation()) { - for (int iLayer{0}; iLayer < mTrkParams[iteration].CellsPerRoad(); ++iLayer) { - for (const auto& cell : mTimeFrame->getCells()[iLayer]) { - MCCompLabel currentLab{mTimeFrame->getTrackletsLabel(iLayer)[cell.getFirstTrackletIndex()]}; - MCCompLabel nextLab{mTimeFrame->getTrackletsLabel(iLayer + 1)[cell.getSecondTrackletIndex()]}; - mTimeFrame->getCellsLabel(iLayer).emplace_back(currentLab == nextLab ? currentLab : MCCompLabel()); - } - } + tbb::parallel_for( + tbb::blocked_range(0, mTrkParams[iteration].CellsPerRoad()), + [&](const tbb::blocked_range& Layers) { + for (int iLayer = Layers.begin(); iLayer < Layers.end(); ++iLayer) { + mTimeFrame->getCellsLabel(iLayer).reserve(mTimeFrame->getCells()[iLayer].size()); + for (const auto& cell : mTimeFrame->getCells()[iLayer]) { + MCCompLabel currentLab{mTimeFrame->getTrackletsLabel(iLayer)[cell.getFirstTrackletIndex()]}; + MCCompLabel nextLab{mTimeFrame->getTrackletsLabel(iLayer + 1)[cell.getSecondTrackletIndex()]}; + mTimeFrame->getCellsLabel(iLayer).emplace_back(currentLab == nextLab ? currentLab : MCCompLabel()); + } + } + }); } } From 3f20605ce3fc6f58bd1af7526e674626f3e2cc03 Mon Sep 17 00:00:00 2001 From: Felix Schlepper Date: Fri, 15 Aug 2025 14:04:17 +0200 Subject: [PATCH 2/3] ITS: wipe labels iff has mc Signed-off-by: Felix Schlepper --- Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx b/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx index a59c51949b9f9..0c61cae6fe458 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx @@ -666,7 +666,6 @@ void TimeFrame::wipe() deepVectorClear(mROFramesPV); deepVectorClear(mPrimaryVertices); deepVectorClear(mRoads); - deepVectorClear(mRoadLabels); deepVectorClear(mMSangles); deepVectorClear(mPhiCuts); deepVectorClear(mPositionResolution); @@ -676,9 +675,15 @@ void TimeFrame::wipe() deepVectorClear(mTrackletsIndexROF); deepVectorClear(mPrimaryVertices); deepVectorClear(mTrackletClusters); - deepVectorClear(mVerticesContributorLabels); deepVectorClear(mLines); - deepVectorClear(mLinesLabels); + if (hasMCinformation()) { + deepVectorClear(mLinesLabels); + deepVectorClear(mVerticesContributorLabels); + deepVectorClear(mTrackletLabels); + deepVectorClear(mCellLabels); + deepVectorClear(mRoadLabels); + deepVectorClear(mTracksLabel); + } } template class TimeFrame<7>; From ccc733327eefbcb6d5a0395af6e8d54948c39de6 Mon Sep 17 00:00:00 2001 From: Felix Schlepper Date: Sat, 16 Aug 2025 12:45:23 +0200 Subject: [PATCH 3/3] ITS: create artefacts labels only on demand Signed-off-by: Felix Schlepper --- .../ITSMFT/ITS/tracking/include/ITStracking/Configuration.h | 2 ++ .../ITS/tracking/include/ITStracking/TrackingConfigParam.h | 2 ++ Detectors/ITSMFT/ITS/tracking/src/Configuration.cxx | 2 ++ Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx | 6 +++--- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Configuration.h b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Configuration.h index 40fe31abbfa36..2bfa0639ad5a2 100644 --- a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Configuration.h +++ b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Configuration.h @@ -80,6 +80,8 @@ struct TrackingParameters { float TrackFollowerNSigmaCutZ = 1.f; float TrackFollowerNSigmaCutPhi = 1.f; + bool createArtefactLabels{false}; + bool PrintMemory = false; // print allocator usage in epilog report size_t MaxMemory = std::numeric_limits::max(); bool DropTFUponFailure = false; diff --git a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TrackingConfigParam.h b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TrackingConfigParam.h index 5b4b1aca1dfb8..e8d3692909d05 100644 --- a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TrackingConfigParam.h +++ b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/TrackingConfigParam.h @@ -97,6 +97,8 @@ struct TrackerParamConfig : public o2::conf::ConfigurableParamHelper::max(); diff --git a/Detectors/ITSMFT/ITS/tracking/src/Configuration.cxx b/Detectors/ITSMFT/ITS/tracking/src/Configuration.cxx index 144b9a1dfc7c4..6af66b18a2878 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/Configuration.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/Configuration.cxx @@ -187,6 +187,8 @@ std::vector TrackingMode::getTrackingParameters(TrackingMode p.MinPt[lslot] *= bFactor; } + p.createArtefactLabels = tc.createArtefactLabels; + p.PrintMemory = tc.printMemory; p.MaxMemory = tc.maxMemory; p.DropTFUponFailure = tc.dropTFUponFailure; diff --git a/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx b/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx index c77d0a2dc65c8..b3476b46207ed 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/TrackerTraits.cxx @@ -272,7 +272,7 @@ void TrackerTraits::computeLayerTracklets(const int iteration, int iROF }); /// Create tracklets labels - if (mTimeFrame->hasMCinformation()) { + if (mTimeFrame->hasMCinformation() && mTrkParams[iteration].createArtefactLabels) { tbb::parallel_for( tbb::blocked_range(0, mTrkParams[iteration].TrackletsPerRoad()), [&](const tbb::blocked_range& Layers) { @@ -313,7 +313,7 @@ void TrackerTraits::computeLayerCells(const int iteration) if (iLayer > 0) { deepVectorClear(mTimeFrame->getCellsLookupTable()[iLayer - 1]); } - if (mTimeFrame->hasMCinformation()) { + if (mTimeFrame->hasMCinformation() && mTrkParams[iteration].createArtefactLabels) { deepVectorClear(mTimeFrame->getCellsLabel(iLayer)); } } @@ -458,7 +458,7 @@ void TrackerTraits::computeLayerCells(const int iteration) }); /// Create cells labels - if (mTimeFrame->hasMCinformation()) { + if (mTimeFrame->hasMCinformation() && mTrkParams[iteration].createArtefactLabels) { tbb::parallel_for( tbb::blocked_range(0, mTrkParams[iteration].CellsPerRoad()), [&](const tbb::blocked_range& Layers) {