Skip to content

Commit 3cccce2

Browse files
committed
ITS: improve track follower
1 parent a36cd93 commit 3cccce2

9 files changed

Lines changed: 538 additions & 641 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class TimeFrameGPU : public TimeFrame<NLayers>
8787
void createTrackITSExtDevice(const size_t);
8888
void loadTrackExtensionStartStatesDevice();
8989
void createTrackExtensionCandidatesDevice(const size_t);
90-
void createTrackExtensionScratchDevice(const size_t, const int);
90+
void createTrackExtensionScratchDevice(const int nThreads, const int beamWidth);
9191
void createTrackExtensionResultsDevice(const size_t);
9292
void downloadTrackITSExtDevice();
9393
void downloadTrackExtensionCandidatesDevice();

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

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

16+
#include <array>
1617
#include <gsl/gsl>
1718

1819
#include "ITStracking/BoundedAllocator.h"
@@ -36,6 +37,10 @@ class Cluster;
3637
class TrackITSExt;
3738
class ExternalAllocator;
3839

40+
inline constexpr int kTrackExtensionLaunchBlocks = 60;
41+
inline constexpr int kTrackExtensionLaunchThreadsPerBlock = 256;
42+
inline constexpr int kTrackExtensionLaunchThreads = kTrackExtensionLaunchBlocks * kTrackExtensionLaunchThreadsPerBlock;
43+
3944
template <int NLayers>
4045
void computeTrackExtensionCandidatesHandler(const TrackExtensionStartState<NLayers>* tracks,
4146
const IndexTableUtils<NLayers>* utils,
@@ -50,8 +55,8 @@ void computeTrackExtensionCandidatesHandler(const TrackExtensionStartState<NLaye
5055
int* candidateOffsets,
5156
TrackExtensionHypothesis<NLayers>* activeHypotheses,
5257
TrackExtensionHypothesis<NLayers>* nextHypotheses,
53-
const std::vector<float>& layerRadiiHost,
54-
const std::vector<float>& layerxX0Host,
58+
const std::array<float, NLayers> layerRadii,
59+
const std::array<float, NLayers> layerxX0,
5560
const int nTracks,
5661
const int nLayers,
5762
const int phiBins,
@@ -73,7 +78,7 @@ void computeTrackExtensionResultsHandler(const TrackExtensionStartState<NLayers>
7378
const int* candidateOffsets,
7479
TrackExtensionResult<NLayers>* results,
7580
const TrackingFrameInfo** trackingFrameInfo,
76-
const std::vector<float>& layerxX0Host,
81+
const std::array<float, NLayers> layerxX0,
7782
const int nTracks,
7883
const int nLayers,
7984
const float bz,

Detectors/ITSMFT/ITS/tracking/GPU/cuda/TimeFrameGPU.cu

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -578,10 +578,10 @@ void TimeFrameGPU<NLayers>::createTrackExtensionCandidatesDevice(const size_t nT
578578
}
579579

580580
template <int NLayers>
581-
void TimeFrameGPU<NLayers>::createTrackExtensionScratchDevice(const size_t nTracks, const int beamWidth)
581+
void TimeFrameGPU<NLayers>::createTrackExtensionScratchDevice(const int nThreads, const int beamWidth)
582582
{
583583
GPUTimer timer("reserving track extension scratch");
584-
const size_t nHypotheses = nTracks * std::max(1, beamWidth);
584+
const size_t nHypotheses = static_cast<size_t>(std::max(1, nThreads)) * std::max(1, beamWidth);
585585
GPULog("gpu-allocation: reserving {} track extension hypotheses per scratch buffer, for {:.2f} MB each.", nHypotheses, nHypotheses * sizeof(o2::its::TrackExtensionHypothesis<NLayers>) / constants::MB);
586586
mActiveTrackExtensionHypothesesDevice = nullptr;
587587
mNextTrackExtensionHypothesesDevice = nullptr;

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <unistd.h>
1414

1515
#include <algorithm>
16+
#include <array>
1617

1718
#include "ITStrackingGPU/TrackerTraitsGPU.h"
1819
#include "ITStrackingGPU/TrackingKernels.h"
@@ -398,7 +399,13 @@ void TrackerTraitsGPU<NLayers>::buildTrackExtensionCandidates(const int iteratio
398399
mTimeFrameGPU->syncStreams();
399400
mTimeFrameGPU->loadTrackExtensionStartStatesDevice();
400401
mTimeFrameGPU->createTrackExtensionCandidatesDevice(nTracks);
401-
mTimeFrameGPU->createTrackExtensionScratchDevice(nTracks, beamWidth);
402+
mTimeFrameGPU->createTrackExtensionScratchDevice(kTrackExtensionLaunchThreads, beamWidth);
403+
std::array<float, NLayers> layerRadii{};
404+
std::array<float, NLayers> layerxX0{};
405+
for (int iLayer{0}; iLayer < this->mTrkParams[iteration].NLayers; ++iLayer) {
406+
layerRadii[iLayer] = this->mTrkParams[iteration].LayerRadii[iLayer];
407+
layerxX0[iLayer] = this->mTrkParams[iteration].LayerxX0[iLayer];
408+
}
402409
computeTrackExtensionCandidatesHandler<NLayers>(mTimeFrameGPU->getDeviceTrackExtensionStartStates(),
403410
mTimeFrameGPU->getDeviceIndexTableUtils(),
404411
mTimeFrameGPU->getDeviceROFMaskTableView(),
@@ -412,8 +419,8 @@ void TrackerTraitsGPU<NLayers>::buildTrackExtensionCandidates(const int iteratio
412419
mTimeFrameGPU->getDeviceTrackExtensionCandidateOffsets(),
413420
mTimeFrameGPU->getDeviceActiveTrackExtensionHypotheses(),
414421
mTimeFrameGPU->getDeviceNextTrackExtensionHypotheses(),
415-
this->mTrkParams[iteration].LayerRadii,
416-
this->mTrkParams[iteration].LayerxX0,
422+
layerRadii,
423+
layerxX0,
417424
static_cast<int>(nTracks),
418425
this->mTrkParams[iteration].NLayers,
419426
this->mTrkParams[iteration].PhiBins,
@@ -434,7 +441,7 @@ void TrackerTraitsGPU<NLayers>::buildTrackExtensionCandidates(const int iteratio
434441
mTimeFrameGPU->getDeviceTrackExtensionCandidateOffsets(),
435442
mTimeFrameGPU->getDeviceTrackExtensionResults(),
436443
mTimeFrameGPU->getDeviceArrayTrackingFrameInfo(),
437-
this->mTrkParams[iteration].LayerxX0,
444+
layerxX0,
438445
static_cast<int>(nTracks),
439446
this->mTrkParams[iteration].NLayers,
440447
this->mBz,
@@ -477,7 +484,7 @@ bool TrackerTraitsGPU<NLayers>::materializeTrackExtensionCandidate(TrackITSExt&
477484
diff |= (0x1u << iLayer);
478485
}
479486
}
480-
track.setPattern(track.getPattern() | (diff << 24));
487+
applyExtendedClustersPattern<NLayers>(track, diff);
481488
return true;
482489
}
483490

0 commit comments

Comments
 (0)