Skip to content

Commit e0436db

Browse files
Add restrict keyword again
1 parent a9ad891 commit e0436db

11 files changed

Lines changed: 110 additions & 26 deletions

GPU/Common/GPUCommonAlgorithm.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
#define GPUCOMMONALGORITHM_H
1717

1818
#include "GPUCommonDef.h"
19-
#include "MemLayout.h"
2019

2120
#if !defined(GPUCA_GPUCODE) // Could also enable custom search on the CPU, but it is not always faster, so we stick to std::sort
2221
#include <algorithm>

GPU/Common/MemLayout.h

Lines changed: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ template <class T> using const_reference = const T&;
1212
template <class T> using pointer = T*;
1313
template <class T> using const_pointer = const T*;
1414

15+
template <class T> using reference_restrict = T& __restrict__;
16+
template <class T> using const_reference_restrict = const T& __restrict__;
17+
template <class T> using pointer_restrict = T* __restrict__;
18+
template <class T> using const_pointer_restrict = const T* __restrict__;
19+
1520
template <class SF>
1621
struct RandomAccessAt {
1722
MemLayout::size_t i;
@@ -78,7 +83,9 @@ struct wrapper : public S<F> {
7883
constexpr wrapper() = default;
7984
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
8085
template <template <class> class F_other>
81-
constexpr wrapper(S<F_other> other) : Base{other.apply(AggregateConstructor<Base>{})} {}
86+
constexpr wrapper(S<F_other>& other) : Base{other.apply(AggregateConstructor<Base>{})} {}
87+
template <template <class> class F_other>
88+
constexpr wrapper(const S<F_other>& other) : Base{other.apply(AggregateConstructor<Base>{})} {}
8289

8390
constexpr wrapper<S, reference> operator[] (size_t i) { return Base::apply(RandomAccessAt<S<reference>>{i}); }
8491
constexpr wrapper<S, const_reference> operator[] (size_t i) const { return Base::apply(RandomAccessAt<S<const_reference>>{i}); }
@@ -107,9 +114,14 @@ struct wrapper<S, reference> : public S<reference> {
107114
constexpr wrapper() = delete;
108115
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
109116
constexpr wrapper(S<value>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
117+
constexpr wrapper(S<reference_restrict> other) : Base(other.apply(AggregateConstructor<Base>{})) {}
110118

111119
constexpr wrapper(const wrapper& other) = default;
112120

121+
constexpr wrapper& operator=(const wrapper<S, value>& other) {
122+
Base::apply(other, CopyAssignment{});
123+
return *this;
124+
}
113125
constexpr wrapper& operator=(const wrapper& other) {
114126
Base::apply(other, CopyAssignment{});
115127
return *this;
@@ -118,17 +130,61 @@ struct wrapper<S, reference> : public S<reference> {
118130
Base::apply(other, CopyAssignment{});
119131
return *this;
120132
}
133+
constexpr wrapper& operator=(const wrapper<S, reference_restrict>& other) {
134+
Base::apply(other, CopyAssignment{});
135+
return *this;
136+
}
137+
constexpr wrapper& operator=(const wrapper<S, const_reference_restrict>& other) {
138+
Base::apply(other, CopyAssignment{});
139+
return *this;
140+
}
141+
142+
constexpr wrapper(wrapper&& other) = default;
143+
144+
constexpr wrapper& operator=(wrapper&& other) { return operator=(other); }
145+
146+
constexpr wrapper<S, pointer> operator&() { return Base::apply(GetPointer<S<pointer>>{}); }
147+
//constexpr wrapper<S, const_pointer> operator&() const { return Base::apply(GetPointer<S<const_pointer>>{}); }
148+
};
149+
150+
template <template <template <class> class> class S>
151+
struct wrapper<S, reference_restrict> : public S<reference_restrict> {
152+
using Base = S<reference_restrict>;
153+
154+
constexpr wrapper() = delete;
155+
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
156+
constexpr wrapper(S<value>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
157+
constexpr wrapper(S<reference> other) : Base(other.apply(AggregateConstructor<Base>{})) {}
158+
159+
constexpr wrapper(const wrapper& other) = default;
160+
121161
constexpr wrapper& operator=(const wrapper<S, value>& other) {
122162
Base::apply(other, CopyAssignment{});
123163
return *this;
124164
}
165+
constexpr wrapper& operator=(const wrapper& other) {
166+
Base::apply(other, CopyAssignment{});
167+
return *this;
168+
}
169+
constexpr wrapper& operator=(const wrapper<S, reference>& other) {
170+
Base::apply(other, CopyAssignment{});
171+
return *this;
172+
}
173+
constexpr wrapper& operator=(const wrapper<S, const_reference>& other) {
174+
Base::apply(other, CopyAssignment{});
175+
return *this;
176+
}
177+
constexpr wrapper& operator=(const wrapper<S, const_reference_restrict>& other) {
178+
Base::apply(other, CopyAssignment{});
179+
return *this;
180+
}
125181

126182
constexpr wrapper(wrapper&& other) = default;
127183

128184
constexpr wrapper& operator=(wrapper&& other) { return operator=(other); }
129185

130-
constexpr wrapper<S, pointer> operator& () { return Base::apply(GetPointer<S<pointer>>{}); }
131-
//constexpr wrapper<S, const_pointer> operator& () const { return Base::apply(GetPointer<S<const_pointer>>{}); }
186+
constexpr wrapper<S, pointer> operator&() { return Base::apply(GetPointer<S<pointer>>{}); }
187+
//constexpr wrapper<S, const_pointer> operator&() const { return Base::apply(GetPointer<S<const_pointer>>{}); }
132188
};
133189

134190
template <template <template <class> class> class S>
@@ -139,6 +195,22 @@ struct wrapper<S, const_reference> : public S<const_reference> {
139195
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
140196
constexpr wrapper(const S<value>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
141197
constexpr wrapper(const S<reference>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
198+
constexpr wrapper(const S<reference_restrict>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
199+
constexpr wrapper(const S<const_reference_restrict>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
200+
201+
constexpr wrapper<S, const_pointer> operator&() const { return Base::apply(GetPointer<S<const_pointer>>{}); }
202+
};
203+
204+
template <template <template <class> class> class S>
205+
struct wrapper<S, const_reference_restrict> : public S<const_reference_restrict> {
206+
using Base = S<const_reference_restrict>;
207+
208+
constexpr wrapper() = delete;
209+
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
210+
constexpr wrapper(const S<value>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
211+
constexpr wrapper(const S<reference>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
212+
constexpr wrapper(const S<reference_restrict>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
213+
constexpr wrapper(const S<const_reference>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
142214

143215
constexpr wrapper<S, const_pointer> operator&() const { return Base::apply(GetPointer<S<const_pointer>>{}); }
144216
};
@@ -180,6 +252,19 @@ struct wrapper<S, const_pointer> : public S<const_pointer> {
180252

181253
constexpr wrapper<S, const_reference> operator[] (size_t i) const { return Base::apply(RandomAccessAt<S<const_reference>>{i}); }
182254
constexpr wrapper<S, const_reference> operator*() const { return operator[](0); }
255+
256+
constexpr bool operator==(const wrapper& other) const { return Base::apply(FirstMember{}) == other.apply(FirstMember{}); }
257+
constexpr bool operator!=(const wrapper& other) const { return !this->operator==(other); }
258+
constexpr bool operator<(const wrapper& other) const { return Base::apply(FirstMember{}) < other.apply(FirstMember{}); }
259+
260+
constexpr wrapper operator+(ptrdiff_t i) const { return Base::apply(Advance<Base>{i}); }
261+
constexpr wrapper operator-(ptrdiff_t i) const { return operator+(-i); }
262+
constexpr ptrdiff_t operator-(const wrapper& other) const { return Base::apply(FirstMember{}) - other.apply(FirstMember{}); }
263+
264+
constexpr wrapper& operator++() { Base::apply(PreIncrement<Base>{}); return *this; }
265+
constexpr wrapper& operator+=(ptrdiff_t i) { return *this = *this + i; }
266+
constexpr wrapper& operator--() { Base::apply(PreDecrement<Base>{}); return *this; }
267+
constexpr wrapper& operator-=(ptrdiff_t i) { return *this = *this - i; }
183268
};
184269

185270
enum Flag { soa, aos };

GPU/GPUTracking/SectorTracker/GPUTPCExtrapolationTracking.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ GPUd() int32_t GPUTPCExtrapolationTracking::PerformExtrapolationTrackingRun(GPUT
111111
}
112112
}
113113
//GPUTPCTrack& GPUrestrict() track = tracker.Tracks()[trackId];
114-
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::reference> track = tracker.Tracks()[trackId]; // reference_restrict
114+
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::reference_restrict> track = tracker.Tracks()[trackId];
115115
track.SetParam(tParam.GetParam());
116116
track.SetNHits(nHits);
117117
track.SetFirstHitID(hitId);

GPU/GPUTracking/SectorTracker/GPUTPCTrack.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ struct iterator_traits<MemLayout::wrapper<o2::gpu::GPUTPCTrackSkeleton, MemLayou
8080
using iterator_category = random_access_iterator_tag;
8181
using difference_type = MemLayout::ptrdiff_t;
8282
using value_type = MemLayout::wrapper<o2::gpu::GPUTPCTrackSkeleton, MemLayout::value>;
83-
using pointer = void; //MemLayout::wrapper<o2::gpu::GPUTPCTrackSkeleton, MemLayout::pointer>;
83+
using pointer = void;
8484
using reference = MemLayout::wrapper<o2::gpu::GPUTPCTrackSkeleton, MemLayout::reference>;
8585
};
8686

GPU/GPUTracking/SectorTracker/GPUTPCTrackLinearisation.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class GPUTPCTrackLinearisation
4040
GPUTPCTrackLinearisation() : mSinPhi(0), mCosPhi(1), mDzDs(0), mQPt(0) {}
4141
GPUTPCTrackLinearisation(float SinPhi1, float CosPhi1, float DzDs1, float QPt1) : mSinPhi(SinPhi1), mCosPhi(CosPhi1), mDzDs(DzDs1), mQPt(QPt1) {}
4242

43-
GPUd() GPUTPCTrackLinearisation(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference> t); // const_reference_restrict
43+
GPUd() GPUTPCTrackLinearisation(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference_restrict> t);
4444

4545
GPUd() void Set(float SinPhi1, float CosPhi1, float DzDs1, float QPt1);
4646

@@ -66,7 +66,7 @@ class GPUTPCTrackLinearisation
6666
float mQPt; // QPt
6767
};
6868

69-
GPUdi() GPUTPCTrackLinearisation::GPUTPCTrackLinearisation(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference> t) : mSinPhi(t.SinPhi()), mCosPhi(0), mDzDs(t.DzDs()), mQPt(t.QPt()) // const_reference_restrict
69+
GPUdi() GPUTPCTrackLinearisation::GPUTPCTrackLinearisation(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference_restrict> t) : mSinPhi(t.SinPhi()), mCosPhi(0), mDzDs(t.DzDs()), mQPt(t.QPt())
7070
{
7171
if (mSinPhi > GPUCA_MAX_SIN_PHI) {
7272
mSinPhi = GPUCA_MAX_SIN_PHI;

GPU/GPUTracking/SectorTracker/GPUTPCTrackParam.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ using namespace o2::gpu;
3131
//
3232

3333
template <template <class> class F>
34-
GPUd() float GPUTPCTrackParamSkeleton<F>::GetDist2(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference> t) const // const_reference_restrict
34+
GPUd() float GPUTPCTrackParamSkeleton<F>::GetDist2(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference_restrict> t) const
3535
{
3636
// get squared distance between tracks
3737

@@ -42,7 +42,7 @@ GPUd() float GPUTPCTrackParamSkeleton<F>::GetDist2(MemLayout::wrapper<GPUTPCTrac
4242
}
4343

4444
template <template <class> class F>
45-
GPUd() float GPUTPCTrackParamSkeleton<F>::GetDistXZ2(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference> t) const // const_reference_restrict
45+
GPUd() float GPUTPCTrackParamSkeleton<F>::GetDistXZ2(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference_restrict> t) const
4646
{
4747
// get squared distance between tracks in X&Z
4848

@@ -879,5 +879,5 @@ GPUd() int32_t GPUTPCTrackParamSkeleton<F>::GetPropagatedYZ(float bz, float x, f
879879
namespace o2::gpu {
880880
template class GPUTPCTrackParamSkeleton<MemLayout::value>;
881881
template class GPUTPCTrackParamSkeleton<MemLayout::reference>;
882-
//template class GPUTPCTrackParamSkeleton<MemLayout::reference_restrict>;
882+
template class GPUTPCTrackParamSkeleton<MemLayout::reference_restrict>;
883883
} // namespace o2::gpu

GPU/GPUTracking/SectorTracker/GPUTPCTrackParam.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ class GPUTPCTrackParamSkeleton
103103
GPUd() void SetChi2(float v) { mChi2 = v; }
104104
GPUd() void SetNDF(int32_t v) { mNDF = v; }
105105

106-
GPUd() float GetDist2(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference> t) const; // const_reference_restrict
107-
GPUd() float GetDistXZ2(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference> t) const; // const_reference_restrict
106+
GPUd() float GetDist2(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference_restrict> t) const;
107+
GPUd() float GetDistXZ2(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::const_reference_restrict> t) const;
108108

109109
GPUd() float GetS(float x, float y, float Bz) const;
110110

GPU/GPUTracking/SectorTracker/GPUTPCTracker.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ class GPUTPCTracker : public GPUProcessor
196196
GPUhd() GPUglobalref() GPUTPCHitId* TrackletStartHits() { return mTrackletStartHits; }
197197
GPUhd() GPUglobalref() GPUTPCHitId* TrackletTmpStartHits() const { return mTrackletTmpStartHits; }
198198

199-
GPUhd() GPUglobalref() MemLayout::wrapper<GPUTPCTrackletSkeleton, MemLayout::reference> Tracklet(int32_t i) { return mTracklets[i]; } // reference_restrict
199+
GPUhd() GPUglobalref() MemLayout::wrapper<GPUTPCTrackletSkeleton, MemLayout::reference_restrict> Tracklet(int32_t i) { return mTracklets[i]; }
200200

201201
template <MemLayout::Flag layout>
202202
GPUhd() GPUglobalref() TrackletArrayType<layout> Tracklets() const { return mTracklets; }

GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.cxx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@
3030

3131
using namespace o2::gpu;
3232

33-
GPUdii() void GPUTPCTrackletConstructor::InitTracklet(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam) // reference_restrict
33+
GPUdii() void GPUTPCTrackletConstructor::InitTracklet(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam)
3434
{
3535
// Initialize Tracklet Parameters using default values
3636
tParam.InitParam();
3737
}
3838

39-
GPUd() bool GPUTPCTrackletConstructor::CheckCov(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam) // reference_restrict
39+
GPUd() bool GPUTPCTrackletConstructor::CheckCov(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam)
4040
{
4141
bool ok = 1;
4242
const float* c = tParam.Cov();
@@ -53,7 +53,7 @@ GPUd() bool GPUTPCTrackletConstructor::CheckCov(MemLayout::wrapper<GPUTPCTrackPa
5353
return (ok);
5454
}
5555

56-
GPUd() void GPUTPCTrackletConstructor::StoreTracklet(int32_t /*nBlocks*/, int32_t /*nThreads*/, int32_t /*iBlock*/, int32_t /*iThread*/, GPUsharedref() GPUSharedMemory& s, GPUTPCThreadMemory& GPUrestrict() r, GPUconstantref() GPUTPCTracker& GPUrestrict() tracker, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam, calink* rowHits) // reference_restrict
56+
GPUd() void GPUTPCTrackletConstructor::StoreTracklet(int32_t /*nBlocks*/, int32_t /*nThreads*/, int32_t /*iBlock*/, int32_t /*iThread*/, GPUsharedref() GPUSharedMemory& s, GPUTPCThreadMemory& GPUrestrict() r, GPUconstantref() GPUTPCTracker& GPUrestrict() tracker, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam, calink* rowHits)
5757
{
5858
// reconstruction of tracklets, tracklet store step
5959
const uint32_t nHits = r.mLastRow + 1 - r.mFirstRow;
@@ -79,7 +79,7 @@ GPUd() void GPUTPCTrackletConstructor::StoreTracklet(int32_t /*nBlocks*/, int32_
7979
return;
8080
}
8181

82-
GPUglobalref() MemLayout::wrapper<GPUTPCTrackletSkeleton, MemLayout::reference> tracklet = tracker.Tracklet(itrout); // reference_restrict
82+
GPUglobalref() MemLayout::wrapper<GPUTPCTrackletSkeleton, MemLayout::reference_restrict> tracklet = tracker.Tracklet(itrout);
8383

8484
CADEBUG(printf(" Storing tracklet: %d rows\n", nHits));
8585

@@ -104,7 +104,7 @@ GPUd() void GPUTPCTrackletConstructor::StoreTracklet(int32_t /*nBlocks*/, int32_
104104
}
105105

106106
template <class T>
107-
GPUdic(2, 1) void GPUTPCTrackletConstructor::UpdateTracklet(int32_t /*nBlocks*/, int32_t /*nThreads*/, int32_t /*iBlock*/, int32_t /*iThread*/, GPUsharedref() T& s, GPUTPCThreadMemory& GPUrestrict() r, GPUconstantref() GPUTPCTracker& GPUrestrict() tracker, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam, int32_t iRow, calink& rowHit, calink* rowHits) // reference_restrict
107+
GPUdic(2, 1) void GPUTPCTrackletConstructor::UpdateTracklet(int32_t /*nBlocks*/, int32_t /*nThreads*/, int32_t /*iBlock*/, int32_t /*iThread*/, GPUsharedref() T& s, GPUTPCThreadMemory& GPUrestrict() r, GPUconstantref() GPUTPCTracker& GPUrestrict() tracker, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam, int32_t iRow, calink& rowHit, calink* rowHits)
108108
{
109109
// reconstruction of tracklets, tracklets update step
110110
CA_MAKE_SHARED_REF(GPUTPCRow, row, tracker.Row(iRow), s.mRows[iRow]);
@@ -491,7 +491,7 @@ GPUdii() void GPUTPCTrackletConstructor::Thread(int32_t nBlocks, int32_t nThread
491491
}
492492

493493
template <> // FIXME: GPUgeneric() needed to make the clang spirv output link correctly
494-
GPUd() int32_t GPUTPCTrackletConstructor::GPUTPCTrackletConstructorExtrapolationTracking<GPUgeneric() GPUTPCExtrapolationTracking::GPUSharedMemory>(GPUconstantref() GPUTPCTracker& GPUrestrict() tracker, GPUsharedref() GPUTPCExtrapolationTracking::GPUSharedMemory& sMem, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam, int32_t row, int32_t increment, int32_t iTracklet, calink* rowHits) // reference_restrict
494+
GPUd() int32_t GPUTPCTrackletConstructor::GPUTPCTrackletConstructorExtrapolationTracking<GPUgeneric() GPUTPCExtrapolationTracking::GPUSharedMemory>(GPUconstantref() GPUTPCTracker& GPUrestrict() tracker, GPUsharedref() GPUTPCExtrapolationTracking::GPUSharedMemory& sMem, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam, int32_t row, int32_t increment, int32_t iTracklet, calink* rowHits)
495495
{
496496
GPUTPCThreadMemory rMem;
497497
rMem.mISH = iTracklet;

GPU/GPUTracking/SectorTracker/GPUTPCTrackletConstructor.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,18 @@ class GPUTPCTrackletConstructor : public GPUKernelTemplate
7272
#endif // GPUCA_TRACKLET_CONSTRUCTOR_DO_PROFILE
7373
};
7474

75-
GPUd() static void InitTracklet(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam); // reference_restrict
75+
GPUd() static void InitTracklet(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam);
7676

7777
template <class T>
78-
GPUd() static void UpdateTracklet(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUsharedref() T& s, GPUTPCThreadMemory& r, GPUconstantref() GPUTPCTracker& tracker, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam, int32_t iRow, calink& rowHit, calink* rowHits); // reference_restrict
78+
GPUd() static void UpdateTracklet(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUsharedref() T& s, GPUTPCThreadMemory& r, GPUconstantref() GPUTPCTracker& tracker, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam, int32_t iRow, calink& rowHit, calink* rowHits);
7979

80-
GPUd() static void StoreTracklet(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUsharedref() GPUSharedMemory& s, GPUTPCThreadMemory& r, GPUconstantref() GPUTPCTracker& tracker, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam, calink* rowHits); // reference_restrict
80+
GPUd() static void StoreTracklet(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUsharedref() GPUSharedMemory& s, GPUTPCThreadMemory& r, GPUconstantref() GPUTPCTracker& tracker, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam, calink* rowHits);
8181

82-
GPUd() static bool CheckCov(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam); // reference_restrict
82+
GPUd() static bool CheckCov(MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam);
8383
GPUd() static void DoTracklet(GPUconstantref() GPUTPCTracker& tracker, GPUsharedref() GPUTPCTrackletConstructor::GPUSharedMemory& sMem, GPUTPCThreadMemory& rMem);
8484

8585
template <class T>
86-
GPUd() static int32_t GPUTPCTrackletConstructorExtrapolationTracking(GPUconstantref() GPUTPCTracker& tracker, GPUsharedref() T& sMem, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference> tParam, int32_t startrow, int32_t increment, int32_t iTracklet, calink* rowHits); // reference_restrict
86+
GPUd() static int32_t GPUTPCTrackletConstructorExtrapolationTracking(GPUconstantref() GPUTPCTracker& tracker, GPUsharedref() T& sMem, MemLayout::wrapper<GPUTPCTrackParamSkeleton, MemLayout::reference_restrict> tParam, int32_t startrow, int32_t increment, int32_t iTracklet, calink* rowHits);
8787

8888
typedef GPUconstantref() GPUTPCTracker processorType;
8989
GPUhdi() constexpr static GPUDataTypes::RecoStep GetRecoStep() { return GPUDataTypes::RecoStep::TPCSectorTracking; }

0 commit comments

Comments
 (0)