Skip to content

Commit 2008bc4

Browse files
authored
ITS: GPU report found neighbours (#14438)
1 parent 41279c2 commit 2008bc4

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,9 @@ class TimeFrameGPU : public TimeFrame<nLayers>
130130
// Host-specific getters
131131
gsl::span<int, nLayers - 1> getNTracklets() { return mNTracklets; }
132132
gsl::span<int, nLayers - 2> getNCells() { return mNCells; }
133-
std::array<int, nLayers - 2>& getArrayNCells() { return mNCells; }
133+
auto& getArrayNCells() { return mNCells; }
134+
gsl::span<int, nLayers - 3> getNNeighbours() { return mNNeighbours; }
135+
auto& getArrayNNeighbours() { return mNNeighbours; }
134136

135137
// Host-available device getters
136138
gsl::span<int*> getDeviceTrackletsLUTs() { return mTrackletsLUTDevice; }
@@ -139,7 +141,9 @@ class TimeFrameGPU : public TimeFrame<nLayers>
139141
gsl::span<CellSeed*> getDeviceCells() { return mCellsDevice; }
140142

141143
// Overridden getters
142-
int getNumberOfCells() const;
144+
int getNumberOfTracklets() const final;
145+
int getNumberOfCells() const final;
146+
int getNumberOfNeighbours() const final;
143147

144148
private:
145149
void allocMemAsync(void**, size_t, Stream*, bool); // Abstract owned and unowned memory allocations
@@ -149,6 +153,7 @@ class TimeFrameGPU : public TimeFrame<nLayers>
149153
// Host-available device buffer sizes
150154
std::array<int, nLayers - 1> mNTracklets;
151155
std::array<int, nLayers - 2> mNCells;
156+
std::array<int, nLayers - 3> mNNeighbours;
152157

153158
// Device pointers
154159
IndexTableUtils* mIndexTableUtilsDevice;
@@ -218,12 +223,24 @@ inline std::vector<unsigned int> TimeFrameGPU<nLayers>::getClusterSizes()
218223
return sizes;
219224
}
220225

226+
template <int nLayers>
227+
inline int TimeFrameGPU<nLayers>::getNumberOfTracklets() const
228+
{
229+
return std::accumulate(mNTracklets.begin(), mNTracklets.end(), 0);
230+
}
231+
221232
template <int nLayers>
222233
inline int TimeFrameGPU<nLayers>::getNumberOfCells() const
223234
{
224235
return std::accumulate(mNCells.begin(), mNCells.end(), 0);
225236
}
226237

238+
template <int nLayers>
239+
inline int TimeFrameGPU<nLayers>::getNumberOfNeighbours() const
240+
{
241+
return std::accumulate(mNNeighbours.begin(), mNNeighbours.end(), 0);
242+
}
243+
227244
} // namespace o2::its::gpu
228245

229246
#endif

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,9 @@ void TimeFrameGPU<nLayers>::createNeighboursIndexTablesDevice()
342342
LOGP(debug, "gpu-transfer: loading neighbours LUT for {} elements on layer {}, for {} MB.", mNCells[iLayer], iLayer, mNCells[iLayer] * sizeof(CellSeed) / MB);
343343
allocMemAsync(reinterpret_cast<void**>(&mNeighboursIndexTablesDevice[iLayer]), (mNCells[iLayer] + 1) * sizeof(int), nullptr, this->getExtAllocator());
344344
GPUChkErrS(cudaMemsetAsync(mNeighboursIndexTablesDevice[iLayer], 0, (mNCells[iLayer] + 1) * sizeof(int), mGpuStreams[0]->get()));
345+
if (iLayer < nLayers - 3) {
346+
mNNeighbours[iLayer] = 0;
347+
}
345348
}
346349
STOP_GPU_STREAM_TIMER(mGpuStreams[0]->get());
347350
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ template <int nLayers>
169169
void TrackerTraitsGPU<nLayers>::findCellsNeighbours(const int iteration)
170170
{
171171
mTimeFrameGPU->createNeighboursIndexTablesDevice();
172-
auto& conf = o2::its::ITSGpuTrackingParamConfig::Instance();
172+
const auto& conf = o2::its::ITSGpuTrackingParamConfig::Instance();
173173
for (int iLayer{0}; iLayer < this->mTrkParams[iteration].CellsPerRoad() - 1; ++iLayer) {
174174
const int nextLayerCellsNum{static_cast<int>(mTimeFrameGPU->getNCells()[iLayer + 1])};
175175

@@ -208,10 +208,11 @@ void TrackerTraitsGPU<nLayers>::findCellsNeighbours(const int iteration)
208208
conf.nBlocks,
209209
conf.nThreads);
210210

211-
filterCellNeighboursHandler(mTimeFrameGPU->getDeviceNeighbourPairs(iLayer),
212-
mTimeFrameGPU->getDeviceNeighbours(iLayer),
213-
nNeigh,
214-
mTimeFrameGPU->getExternalAllocator());
211+
nNeigh = filterCellNeighboursHandler(mTimeFrameGPU->getDeviceNeighbourPairs(iLayer),
212+
mTimeFrameGPU->getDeviceNeighbours(iLayer),
213+
nNeigh,
214+
mTimeFrameGPU->getExternalAllocator());
215+
mTimeFrameGPU->getArrayNNeighbours()[iLayer] = nNeigh;
215216
}
216217
mTimeFrameGPU->createNeighboursDeviceArray();
217218
mTimeFrameGPU->unregisterRest();

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,9 @@ struct TimeFrame {
175175
auto& getVerticesMCRecInfo() { return mVerticesMCRecInfo; }
176176

177177
int getNumberOfClusters() const;
178-
int getNumberOfCells() const;
179-
int getNumberOfTracklets() const;
180-
int getNumberOfNeighbours() const;
178+
virtual int getNumberOfCells() const;
179+
virtual int getNumberOfTracklets() const;
180+
virtual int getNumberOfNeighbours() const;
181181
size_t getNumberOfTracks() const;
182182
size_t getNumberOfUsedClusters() const;
183183
auto getNumberOfExtendedTracks() const { return mNExtendedTracks; }

0 commit comments

Comments
 (0)