Skip to content

Commit 5b99ec7

Browse files
committed
Add gpuSpan
1 parent 94be8d9 commit 5b99ec7

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,24 @@ struct gpuPair {
2929
T2 second;
3030
};
3131

32+
template <typename T>
33+
struct gpuSpan {
34+
GPUd() gpuSpan() : _data(nullptr), _size(0) {}
35+
GPUd() gpuSpan(T* data, size_t size) : _data(data), _size(size) {}
36+
GPUd() gpuSpan(const T* data, size_t size) : _data(data), _size(size) {}
37+
GPUd() T& operator[](size_t idx) const { return _data[idx]; }
38+
GPUd() size_t size() const { return _size; }
39+
GPUd() bool empty() const { return _size == 0; }
40+
GPUd() T& front() const { return _data[0]; }
41+
GPUd() T& back() const { return _data[_size - 1]; }
42+
GPUd() T* begin() const { return _data; }
43+
GPUd() T* end() const { return _data + _size; }
44+
45+
protected:
46+
const T* _data;
47+
size_t _size;
48+
};
49+
3250
namespace gpu
3351
{
3452

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "ITStracking/IndexTableUtils.h"
3333
#include "ITStracking/MathUtils.h"
3434
#include "DataFormatsITS/TrackITS.h"
35+
#include "ReconstructionDataFormats/Vertex.h"
3536

3637
#include "ITStrackingGPU/TrackerTraitsGPU.h"
3738
#include "ITStrackingGPU/TrackingKernels.h"
@@ -70,10 +71,9 @@ inline void gpuAssert(cudaError_t code, const char* file, int line, bool abort =
7071
}
7172

7273
namespace o2::its
73-
7474
{
7575
using namespace constants::its2;
76-
76+
using Vertex = o2::dataformats::Vertex<o2::dataformats::TimeStamp<int>>;
7777
namespace gpu
7878
{
7979
GPUd() bool fitTrack(TrackITSExt& track,
@@ -196,9 +196,17 @@ struct is_valid_pair {
196196
}
197197
};
198198

199-
GPUd() void getPrimaryVertices(const int rof,
200-
const uint8_t* mask,
201-
const Vertex* vertices);
199+
GPUd() gpuSpan<Vertex> getPrimaryVertices(const int rof,
200+
const int* roframesPV,
201+
const int nRof,
202+
const uint8_t* mask,
203+
const Vertex* vertices)
204+
{
205+
const int start = roframesPV[rof];
206+
const int stop_idx = rof >= nRof - 1 ? nRof : rof + 1;
207+
size_t delta = mask[rof] ? roframesPV[stop_idx] - start : 0; // return empty span if Rof is excluded
208+
return gpuSpan<Vertex>(&vertices[start], delta);
209+
};
202210

203211
template <int nLayers>
204212
GPUg() void fitTrackSeedsKernel(

0 commit comments

Comments
 (0)