Project
Loading...
Searching...
No Matches
TimeFrameGPU.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
12
13#ifndef TRACKINGITSGPU_INCLUDE_TIMEFRAMEGPU_H
14#define TRACKINGITSGPU_INCLUDE_TIMEFRAMEGPU_H
15
16#include <gsl/gsl>
17#include <bitset>
18
26
27namespace o2::its::gpu
28{
29
30template <int NLayers>
31class TimeFrameGPU : public TimeFrame<NLayers>
32{
38 using typename TimeFrame<NLayers>::TrackSeedN;
39 static constexpr int MaxLinks = TrackingTopologyN::MaxLinks;
40 static constexpr int MaxCells = TrackingTopologyN::MaxCells;
41 static constexpr int MaxStreams = MaxCells > NLayers ? MaxCells : NLayers;
42
43 public:
44 TimeFrameGPU() = default;
45 ~TimeFrameGPU() override = default;
46
48 void pushMemoryStack(const int);
49 void popMemoryStack(const int);
51 void initialise(const TrackingParameters&, int maxLayers);
52 void initialise(const TrackingParameters&, int maxLayers, int iteration);
56 void createTrackingFrameInfoDeviceArray(const int = NLayers);
58 void createUnsortedClustersDeviceArray(const int = NLayers);
59 void createClustersDeviceArray(const int = NLayers);
60 void loadClustersIndexTables(const int);
61 void createClustersIndexTablesArray(const int = NLayers);
62 void createClustersDevice(const int);
66 void sortClustersDevice(const int layer, const TrackingParameters& trkParam);
67 void createUsedClustersDevice(const int);
68 void createUsedClustersDeviceArray(const int = NLayers);
71 void createROFrameClustersDeviceArray(const int = NLayers);
72 void loadROFCutMask(const int);
78
80 void createTrackletsLUTDevice(bool, const int);
82 void createTrackSeedsDevice(const size_t capacity);
83 void createTrackletsBuffers(const int, size_t capacity);
85 void createCellsBuffers(const int, size_t capacity);
87 void createCellsLUTDevice(const int);
89 void createNeighboursDevice(const unsigned int layer, size_t capacity);
90 void createNeighboursLUTDevice(const int, const unsigned int);
91 void createTrackITSExtDevice(const size_t capacity);
92 void createTrackITSExtHost(const size_t nTracks);
93 void createTrackExtensionScratchDevice(const int nThreads, const int maxHypotheses);
95
96 // Seeding-vertexer
101
102 void createLinesDevice(const int nCells);
103 void createDiamondDevice(const Vertex& diamond);
104 unsigned int downloadLinesDevice();
105 unsigned int getNLines();
106 const auto& getHostLines() const { return mLinesHost; }
107 const auto& getHostLineRof() const { return mLineRofHost; }
108 const auto& getHostLineClusters() const { return mLineClustersHost; }
109
111 auto& getStream(const size_t stream) { return mGpuStreams[stream]; }
112 auto& getStreams() { return mGpuStreams; }
113 void syncStreams(const bool = true);
114 void waitEvent(const int, const int);
115 void recordEvent(const int);
116
118 virtual void wipe() final;
119
121 virtual bool isGPU() const noexcept final { return true; }
122 virtual const char* getName() const noexcept override final { return "GPU"; }
123 IndexTableUtilsN* getDeviceIndexTableUtils() { return mIndexTableUtilsDevice; }
124 const float* getDeviceLayerRadii() const { return mLayerRadiiDevice; }
125 const float* getDeviceMinPts() const { return mMinPtsDevice; }
126 const float* getDeviceLayerxX0() const { return mLayerxX0Device; }
127 const auto getDeviceROFOverlapTableView() { return mDeviceROFOverlapTableView; }
128 const auto getDeviceROFVertexLookupTableView() { return mDeviceROFVertexLookupTableView; }
129 const auto getDeviceROFMaskTableView() { return mDeviceROFMaskTableView; }
130 const auto getDeviceTrackingTopologyView() const { return mDeviceTrackingTopologyView; }
131 auto& getTrackITSExt() { return mTrackITSExt; }
132 auto& getTrackIndices() { return mTrackIndices; }
133 Vertex* getDeviceVertices() { return mPrimaryVerticesDevice; }
134 int* getDeviceROFramesClusters(const int layer) { return mROFramesClustersDevice[layer]; }
135 int* getDeviceClusterSortKeys(const int layer) { return mClusterSortKeysDevice[layer]; }
136 int* getDeviceClusterSortPerm(const int layer) { return mClusterSortPermDevice[layer]; }
137 Cluster* getDeviceUnsortedClusters(const int layer) { return mUnsortedClustersDevice[layer]; }
138 Cluster* getDeviceClusters(const int layer) { return mClustersDevice[layer]; }
139 int* getDeviceClustersIndexTable(const int layer) { return mClustersIndexTablesDevice[layer]; }
140 const float* getDeviceMinRs() const { return mClusterMinRDevice; }
141 const float* getDeviceMaxRs() const { return mClusterMaxRDevice; }
142 int* getDeviceROFramesPV() { return mROFramesPVDevice; }
143 unsigned char* getDeviceUsedClusters(const int);
145
146 // Hybrid
147 TrackITSExt* getDeviceTrackITSExt() { return mTrackITSExtDevice; }
148 int* getDeviceTrackIndices() { return mTrackIndicesDevice; }
149 TrackExtensionHypothesis<NLayers>* getDeviceActiveTrackExtensionHypotheses() { return mActiveTrackExtensionHypothesesDevice; }
150 TrackExtensionHypothesis<NLayers>* getDeviceNextTrackExtensionHypotheses() { return mNextTrackExtensionHypothesesDevice; }
151 int* getDeviceNeighboursLUT(const int layer) { return mNeighboursLUTDevice[layer]; }
152 CellNeighbour** getDeviceArrayNeighbours() { return mNeighboursDeviceArray; }
153 unsigned long long** getDeviceArrayClusterOwners() { return mClusterOwnersDeviceArray; }
154 o2::its::Line* getDeviceLines() { return mLinesDevice; }
155 int* getDeviceLineSlots() { return mLineSlotsDevice; }
156 int* getDeviceLineRof() { return mLineRofDevice; }
157 int* getDeviceLineClusters() { return mLineClustersDevice; }
158 float* getDeviceLineChi2() { return mLineChi2Device; }
159 float* getDeviceLinePt() { return mLinePtDevice; }
160 float* getDeviceLineZs() { return mLineZsDevice; }
161 o2::its::TimeEstBC* getDeviceLineTimes() { return mLineTimesDevice; }
162 int* getDeviceLineSortedIdx() { return mLinesSortedIdx; }
163 LineProjSoA getLineProjSoA() { return {mLineZsDevice, mLineTimesDevice, mLinesSortedIdx, mLineRofDevice}; }
164 LineProjSoA getLineProjSortedSoA() { return {mLineZsSortedDevice, mLineTimesSortedDevice, mLinesSortedIdx, mLineRofSortedDevice}; }
165 int* getDeviceRofLineOffsets() { return mRofLineOffsetsDevice; }
166 int* getDeviceLineDensity() { return mLineDensityDevice; }
167 gpu::LineWindow* getDeviceLineWin() { return mLineWinDevice; }
168 uint8_t* getDeviceLineIsPeak() { return mLineIsPeakDevice; }
169 int* getDeviceLineDensityFine() { return mLineDensityFineDevice; }
170 gpu::LineWindow* getDeviceLineWinFine() { return mLineWinFineDevice; }
171 uint8_t* getDeviceLineIsPeakFine() { return mLineIsPeakFineDevice; }
172 int* getDevicePeakScan() { return mPeakScanDevice; }
173 int* getDevicePeakLineIdx() { return mPeakLineIdxDevice; }
174 int* getDevicePeakOffsets() { return mPeakOffsetsDevice; }
175 const int* getDeviceNPeaks() { return mPeakOffsetsDevice + this->getNrof(1); }
176 VertexCand* getDeviceVertexCands() { return mVertexCandsDevice; }
178 void downloadPeakMembershipInputs(); // MC-only: peak indices, z-windows and the sorted time/idx columns
179 const auto& getHostVertexCands() const { return mVertexCandsHost; }
180 const auto& getHostPeakOffsets() const { return mPeakOffsetsHost; }
181 const auto& getHostPeakMembership() const { return mPeakMembershipHost; }
182 bounded_vector<o2::MCCompLabel>& getLineLabelFlat() { return mLineLabelFlatHost; }
183 const bounded_vector<o2::MCCompLabel>& getLineLabelFlat() const { return mLineLabelFlatHost; }
184 Vertex* getDeviceDiamond() { return mDiamondDevice; }
185 std::array<CellNeighbour*, MaxCells>& getDeviceNeighboursAll() { return mNeighboursDevice; }
186 CellNeighbour* getDeviceNeighbours(const int layer) { return mNeighboursDevice[layer]; }
187 const TrackingFrameInfo** getDeviceArrayTrackingFrameInfo() const { return mTrackingFrameInfoDeviceArray; }
188 const Cluster** getDeviceArrayClusters() const { return mClustersDeviceArray; }
189 const Cluster** getDeviceArrayUnsortedClusters() const { return mUnsortedClustersDeviceArray; }
190 const int** getDeviceArrayClustersIndexTables() const { return mClustersIndexTablesDeviceArray; }
191 std::vector<unsigned int> getClusterSizes();
192 uint8_t** getDeviceArrayUsedClusters() const { return mUsedClustersDeviceArray; }
193 const int** getDeviceROFrameClusters() const { return mROFramesClustersDeviceArray; }
194 Tracklet** getDeviceArrayTracklets() { return mTrackletsDeviceArray; }
195 int** getDeviceArrayTrackletsLUT() const { return mTrackletsLUTDeviceArray; }
196 int** getDeviceArrayCellsLUT() const { return mCellsLUTDeviceArray; }
197 int** getDeviceArrayNeighboursCellLUT() const { return mNeighboursCellLUTDeviceArray; }
198 CellSeed** getDeviceArrayCells() { return mCellsDeviceArray; }
199 TrackSeedN* getDeviceTrackSeeds() { return mTrackSeedsDevice; }
200 int* getDeviceTrackSeedIndices() { return mTrackSeedIndicesDevice; }
201 int* getDeviceTrackCounter() { return mTrackCounterDevice; }
202 auto getNTrackSeeds() const { return mNTracks; }
203
205
206 // Host-specific getters
207 gsl::span<int> getNTracklets() { return {mNTracklets.data(), static_cast<gsl::span<int>::size_type>(this->mTrackingTopologyView.nLinks)}; }
208 gsl::span<int> getNCells() { return {mNCells.data(), static_cast<gsl::span<int>::size_type>(this->mTrackingTopologyView.nCells)}; }
209 auto& getArrayNCells() { return mNCells; }
210 gsl::span<int> getNNeighbours() { return {mNNeighbours.data(), static_cast<gsl::span<int>::size_type>(this->mTrackingTopologyView.nCells)}; }
211
212 // Host-available device getters
213 gsl::span<int*> getDeviceTrackletsLUTs() { return mTrackletsLUTDevice; }
214 gsl::span<int*> getDeviceCellLUTs() { return mCellsLUTDevice; }
215 gsl::span<Tracklet*> getDeviceTracklets() { return mTrackletsDevice; }
216 gsl::span<CellSeed*> getDeviceCells() { return mCellsDevice; }
217
218 // Overridden getters
219 size_t getNumberOfTracklets() const final;
220 size_t getNumberOfCells() const final;
221 size_t getNumberOfNeighbours() const final;
222
223 protected:
224 void prepareClusters(const TrackingParameters& trkParam, const int maxLayers) override;
225 void allocateClusterSortStorage(const TrackingParameters& trkParam, const int maxLayers) override;
226
227 private:
228 enum class SlotInit {
229 Raw,
230 Zero
231 };
232
233 template <typename T>
234 T* allocDevice(size_t n, int32_t type = o2::gpu::GPUMemoryResource::MEMORY_GPU);
235 template <typename T>
236 T* allocDeviceAsync(size_t n, Stream&, int32_t type = o2::gpu::GPUMemoryResource::MEMORY_GPU);
237 template <typename SlotPtr>
238 SlotPtr* allocSlotArray(size_t n);
239 template <typename T>
240 void copyToDevice(T* dst, const T* src, size_t n);
241 template <typename T>
242 void copyFromDevice(T* dst, const T* src, size_t n);
243 template <typename T, typename ArrayT>
244 void publishSlot(ArrayT deviceArray, int slot, T* const& devicePtr, Stream&);
245 template <typename T, size_t N, typename ArrayT>
246 T* createSlot(std::array<T*, N>& slots, ArrayT deviceArray, int slot, size_t n, const char* what, SlotInit init = SlotInit::Raw, int32_t type = o2::gpu::GPUMemoryResource::MEMORY_GPU);
247 template <typename T, size_t N, typename ArrayT, typename Container>
248 void uploadSlot(std::array<T*, N>& slots, ArrayT deviceArray, int slot, const Container& host, const char* what);
249 template <typename ArrayT, typename T, size_t N>
250 void createPinnedSlotArray(ArrayT& deviceArray, std::array<T*, N>& slots, std::bitset<NLayers + 1>& pinned);
251 template <typename Layers>
252 void pinHostLayers(Layers& layers, std::bitset<NLayers + 1>& pinned, int maxLayers);
253 template <typename Table>
254 typename Table::View uploadNavigationTable(const Table& table, const typename Table::View& hostView);
255
256 // Host-available device buffer sizes
257 std::array<int, MaxLinks> mNTracklets{};
258 std::array<int, MaxCells> mNCells{};
259 std::array<int, MaxCells> mNNeighbours{};
260
261 // Device pointers
262 IndexTableUtilsN* mIndexTableUtilsDevice{nullptr};
263 float* mIterationParametersDevice{nullptr};
264 const float* mLayerRadiiDevice{nullptr};
265 const float* mMinPtsDevice{nullptr};
266 const float* mLayerxX0Device{nullptr};
267 // device navigation views
268 ROFOverlapTableN::View mDeviceROFOverlapTableView;
269 ROFVertexLookupTableN::View mDeviceROFVertexLookupTableView;
270 ROFMaskTableN::View mDeviceROFMaskTableView;
271 std::vector<typename TrackingTopologyN::View> mDeviceTrackerTopologyViews;
272 typename TrackingTopologyN::View mDeviceTrackingTopologyView;
273
274 // Hybrid pref
275 Vertex* mPrimaryVerticesDevice{nullptr};
276 std::array<Cluster*, NLayers> mClustersDevice{};
277 std::array<Cluster*, NLayers> mUnsortedClustersDevice{};
278 std::array<int*, NLayers> mClustersIndexTablesDevice{};
279 std::array<unsigned char*, NLayers> mUsedClustersDevice{};
280 std::array<int*, NLayers> mROFramesClustersDevice{};
281 const Cluster** mClustersDeviceArray{nullptr};
282 const Cluster** mUnsortedClustersDeviceArray{nullptr};
283 const int** mClustersIndexTablesDeviceArray{nullptr};
284 uint8_t** mUsedClustersDeviceArray{nullptr};
285 const int** mROFramesClustersDeviceArray{nullptr};
286 int* mROFramesPVDevice;
287 std::array<int*, NLayers> mClusterSortKeysDevice{};
288 std::array<int*, NLayers> mClusterSortPermDevice{};
289 float* mClusterMinRDevice{nullptr};
290 float* mClusterMaxRDevice{nullptr};
291 std::array<Tracklet*, MaxLinks> mTrackletsDevice{};
292 std::array<int*, MaxLinks> mTrackletsLUTDevice{};
293 std::array<int*, MaxCells> mCellsLUTDevice{};
294 std::array<int*, MaxCells> mNeighboursLUTDevice{};
295
296 Tracklet** mTrackletsDeviceArray{nullptr};
297 int** mCellsLUTDeviceArray{nullptr};
298 int** mNeighboursCellLUTDeviceArray{nullptr};
299 int** mTrackletsLUTDeviceArray{nullptr};
300 std::array<CellSeed*, MaxCells> mCellsDevice{};
301 CellSeed** mCellsDeviceArray{nullptr};
302 TrackSeedN* mTrackSeedsDevice{nullptr};
303 int* mTrackSeedIndicesDevice{nullptr};
304 int* mTrackCounterDevice{nullptr};
305 unsigned int mNTracks{0};
306
307 TrackITSExt* mTrackITSExtDevice{nullptr};
308 int* mTrackIndicesDevice{nullptr};
309 TrackExtensionHypothesis<NLayers>* mActiveTrackExtensionHypothesesDevice{nullptr};
310 TrackExtensionHypothesis<NLayers>* mNextTrackExtensionHypothesesDevice{nullptr};
311 std::array<CellNeighbour*, MaxCells> mNeighboursDevice{};
312 CellNeighbour** mNeighboursDeviceArray{nullptr};
313 std::array<TrackingFrameInfo*, NLayers> mTrackingFrameInfoDevice{};
314 const TrackingFrameInfo** mTrackingFrameInfoDeviceArray{nullptr};
315 std::array<unsigned long long*, 3> mClusterOwnersDevice{};
316 unsigned long long** mClusterOwnersDeviceArray{nullptr};
317 int* mLineSlotsDevice{nullptr};
318 o2::its::Line* mLinesDevice{nullptr};
319 int* mLineRofDevice{nullptr};
320 int* mLineClustersDevice{nullptr};
321 float* mLineChi2Device{nullptr};
322 float* mLinePtDevice{nullptr};
323 float* mLineZsDevice{nullptr};
324 o2::its::TimeEstBC* mLineTimesDevice{nullptr};
325 float* mLineZsSortedDevice{nullptr};
326 o2::its::TimeEstBC* mLineTimesSortedDevice{nullptr};
327 int* mLinesSortedIdx{nullptr};
328 int* mLineRofSortedDevice{nullptr}; // per (sorted) line's ROF
329 int* mRofLineOffsetsDevice{nullptr}; // CSR offsets into the (rof,z)-sorted lines, size nRofs+1
330 int* mLineDensityDevice{nullptr}; // per (sorted) line: count of time-compatible neighbours in its z-window
331 gpu::LineWindow* mLineWinDevice{nullptr}; // per (sorted) line: [lo,hi) bounds of its z-window (sorted coords)
332 uint8_t* mLineIsPeakDevice{nullptr}; // per (sorted) line: 1 if it is a local density peak (vertex candidate)
333 int* mLineDensityFineDevice{nullptr};
334 gpu::LineWindow* mLineWinFineDevice{nullptr};
335 uint8_t* mLineIsPeakFineDevice{nullptr};
336 int* mPeakScanDevice{nullptr}; // per (sorted) line: number of peaks strictly before it
337 int* mPeakLineIdxDevice{nullptr}; // per peak slot: the sorted line index it came from
338 int* mPeakOffsetsDevice{nullptr}; // CSR offsets into the compacted peaks
339 VertexCand* mVertexCandsDevice{nullptr};
340 int mNLinesCapacity{0}; // = nCells the line buffers were sized for
341 bounded_vector<o2::its::Line> mLinesHost;
342 bounded_vector<int> mLineRofHost;
343 bounded_vector<int> mLineClustersHost;
344 bounded_vector<VertexCand> mVertexCandsHost;
345 bounded_vector<int> mPeakOffsetsHost;
346 bounded_vector<o2::MCCompLabel> mLineLabelFlatHost;
347 PeakMembershipHost mPeakMembershipHost;
348 Vertex* mDiamondDevice{nullptr};
349
350 // State
351 Streams mGpuStreams;
352 std::bitset<NLayers + 1> mPinnedUnsortedClusters{0};
353 std::bitset<NLayers + 1> mPinnedClusters{0};
354 std::bitset<NLayers + 1> mPinnedClustersIndexTables{0};
355 std::bitset<NLayers + 1> mPinnedUsedClusters{0};
356 std::bitset<NLayers + 1> mPinnedROFramesClusters{0};
357 std::bitset<NLayers + 1> mPinnedTrackingFrameInfo{0};
358
359 // Temporary buffer for storing output tracks from GPU tracking
360 bounded_vector<TrackITSExt> mTrackITSExt;
361 bounded_vector<int> mTrackIndices;
362};
363
364template <int NLayers>
365inline std::vector<unsigned int> TimeFrameGPU<NLayers>::getClusterSizes()
366{
367 std::vector<unsigned int> sizes(this->mUnsortedClusters.size());
368 std::transform(this->mUnsortedClusters.begin(), this->mUnsortedClusters.end(), sizes.begin(),
369 [](const auto& v) { return static_cast<unsigned int>(v.size()); });
370 return sizes;
371}
372
373template <int NLayers>
375{
376 return std::accumulate(mNTracklets.begin(), mNTracklets.begin() + this->mTrackingTopologyView.nLinks, 0);
377}
378
379template <int NLayers>
381{
382 return std::accumulate(mNCells.begin(), mNCells.begin() + this->mTrackingTopologyView.nCells, 0);
383}
384
385template <int NLayers>
387{
388 return std::accumulate(mNNeighbours.begin(), mNNeighbours.begin() + this->mTrackingTopologyView.nCells, 0);
389}
390
391} // namespace o2::its::gpu
392
393#endif
small types shared by the host and device seeding vertexers, describing lines projected onto the beam...
#define protected
HMPID cluster implementation.
Definition Cluster.h:27
CellSeed: connections of three clusters.
Definition Cell.h:81
unsigned int downloadLinesDevice()
gsl::span< Tracklet * > getDeviceTracklets()
int * getDeviceClustersIndexTable(const int layer)
size_t getNumberOfTracklets() const final
virtual const char * getName() const noexcept override final
virtual bool isGPU() const noexcept final
interface
void createUsedClustersDevice(const int)
int * getDeviceROFramesClusters(const int layer)
void prepareClusters(const TrackingParameters &trkParam, const int maxLayers) override
void createClustersIndexTables(const int)
TrackExtensionHypothesis< NLayers > * getDeviceActiveTrackExtensionHypotheses()
void pushMemoryStack(const int)
Most relevant operations.
void createROFrameClustersDeviceArray(const int=NLayers)
const float * getDeviceMinRs() const
int * getDeviceClusterSortPerm(const int layer)
const auto getDeviceROFOverlapTableView()
void loadClustersIndexTables(const int)
TrackITSExt * getDeviceTrackITSExt()
TrackSeedN * getDeviceTrackSeeds()
void createTrackletsBuffers(const int, size_t capacity)
void initialise(const TrackingParameters &, int maxLayers, int iteration)
const auto & getHostLines() const
const auto getDeviceROFMaskTableView()
unsigned char * getDeviceUsedClusters(const int)
virtual void wipe() final
cleanup
void createTrackITSExtHost(const size_t nTracks)
size_t getNumberOfNeighbours() const final
void createTrackletsLUTDevice(bool, const int)
gpu::LineWindow * getDeviceLineWin()
uint8_t ** getDeviceArrayUsedClusters() const
const auto & getHostLineClusters() const
const int ** getDeviceArrayClustersIndexTables() const
const float * getDeviceMinPts() const
void createTrackExtensionScratchDevice(const int nThreads, const int maxHypotheses)
gpu::LineWindow * getDeviceLineWinFine()
void recordEvent(const int)
int ** getDeviceArrayCellsLUT() const
CellSeed ** getDeviceArrayCells()
gsl::span< CellSeed * > getDeviceCells()
o2::its::Line * getDeviceLines()
const auto getDeviceTrackingTopologyView() const
void waitEvent(const int, const int)
gsl::span< int * > getDeviceTrackletsLUTs()
void popMemoryStack(const int)
void createCellsBuffers(const int, size_t capacity)
void syncStreams(const bool=true)
~TimeFrameGPU() override=default
int * getDeviceNeighboursLUT(const int layer)
const int ** getDeviceROFrameClusters() const
uint8_t * getDeviceLineIsPeakFine()
VertexCand * getDeviceVertexCands()
void loadTrackingFrameInfoDevice(const int)
void createUnsortedClustersDeviceArray(const int=NLayers)
o2::its::TimeEstBC * getDeviceLineTimes()
const auto getDeviceROFVertexLookupTableView()
Tracklet ** getDeviceArrayTracklets()
void createClustersDevice(const int)
size_t getNumberOfCells() const final
auto & getStream(const size_t stream)
synchronization
void createTrackingFrameInfoDeviceArray(const int=NLayers)
Cluster * getDeviceUnsortedClusters(const int layer)
LineProjSoA getLineProjSortedSoA()
const auto & getHostLineRof() const
const auto & getHostPeakOffsets() const
void loadUnsortedClustersDevice(const int)
void createDiamondDevice(const Vertex &diamond)
const float * getDeviceLayerxX0() const
Cluster * getDeviceClusters(const int layer)
void loadROFCutMask(const int)
void createClustersDeviceArray(const int=NLayers)
void createCellsLUTDevice(const int)
void sortClustersDevice(const int layer, const TrackingParameters &trkParam)
const Cluster ** getDeviceArrayUnsortedClusters() const
void loadIterationParameters(const TrackingParameters &)
int * getDeviceClusterSortKeys(const int layer)
CellNeighbour ** getDeviceArrayNeighbours()
CellNeighbour * getDeviceNeighbours(const int layer)
const auto & getHostPeakMembership() const
void setDevicePropagator(const o2::base::PropagatorImpl< float > *p) final
void createTrackITSExtDevice(const size_t capacity)
int ** getDeviceArrayTrackletsLUT() const
gsl::span< int > getNCells()
void createLinesDevice(const int nCells)
const float * getDeviceMaxRs() const
void createClustersIndexTablesArray(const int=NLayers)
int ** getDeviceArrayNeighboursCellLUT() const
const o2::base::Propagator * getChainPropagator()
const Cluster ** getDeviceArrayClusters() const
TrackExtensionHypothesis< NLayers > * getDeviceNextTrackExtensionHypotheses()
gsl::span< int > getNNeighbours()
const TrackingFrameInfo ** getDeviceArrayTrackingFrameInfo() const
IndexTableUtilsN * getDeviceIndexTableUtils()
void createNeighboursLUTDevice(const int, const unsigned int)
const auto & getHostVertexCands() const
void loadROFrameClustersDevice(const int)
void createClusterSortScratchDevice(const int layer)
std::array< CellNeighbour *, MaxCells > & getDeviceNeighboursAll()
unsigned long long ** getDeviceArrayClusterOwners()
void createUsedClustersDeviceArray(const int=NLayers)
gsl::span< int * > getDeviceCellLUTs()
void initialise(const TrackingParameters &, int maxLayers)
void createNeighboursDevice(const unsigned int layer, size_t capacity)
void allocateClusterSortStorage(const TrackingParameters &trkParam, const int maxLayers) override
const float * getDeviceLayerRadii() const
void createTrackSeedsDevice(const size_t capacity)
bounded_vector< o2::MCCompLabel > & getLineLabelFlat()
gsl::span< int > getNTracklets()
std::vector< unsigned int > getClusterSizes()
const bounded_vector< o2::MCCompLabel > & getLineLabelFlat() const
GLdouble n
Definition glcorearb.h:1982
GLenum src
Definition glcorearb.h:1767
const GLdouble * v
Definition glcorearb.h:832
GLuint GLsizei const GLuint const GLintptr const GLsizeiptr * sizes
Definition glcorearb.h:2595
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLenum GLenum dst
Definition glcorearb.h:1767
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
GLuint GLuint stream
Definition glcorearb.h:1806
uint8_t itsSharedClusterMap uint8_t
o2::its::LineWindow LineWindow
TrackExtensionHypothesis< NLayers > int const int maxHypotheses
o2::dataformats::Vertex< o2::its::TimeEstBC > Vertex
Definition Vertex.h:26
ROFVertexLookupTable< NLayers > ROFVertexLookupTableN
Definition TimeFrame.h:75
TrackSeed< NLayers > TrackSeedN
Definition TimeFrame.h:78
IndexTableUtils< NLayers > IndexTableUtilsN
Definition TimeFrame.h:73
const o2::base::PropagatorImpl< float > * mPropagatorDevice
Definition TimeFrame.h:315
int getNrof(int layer) const
Definition TimeFrame.h:109
TrackingTopologyN::View mTrackingTopologyView
Definition TimeFrame.h:366
TrackingTopology< NLayers > TrackingTopologyN
Definition TimeFrame.h:77
ROFOverlapTable< NLayers > ROFOverlapTableN
Definition TimeFrame.h:74
ROFMaskTable< NLayers > ROFMaskTableN
Definition TimeFrame.h:76