Skip to content

Commit e7b7990

Browse files
Use base classes to fix aos
1 parent 99eda7e commit e7b7990

File tree

2 files changed

+36
-33
lines changed

2 files changed

+36
-33
lines changed

GPU/Common/MemLayout.h

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,25 @@ template <class SF>
1616
struct RandomAccessAt {
1717
MemLayout::size_t i;
1818
template <class... Args>
19-
constexpr SF operator()(Args& ...args) const { return {{args[i]...}}; }
19+
constexpr SF operator()(Args& ...args) const { return {args[i]...}; }
2020
template <class... Args>
21-
constexpr SF operator()(const Args& ...args) const { return {{args[i]...}}; }
21+
constexpr SF operator()(const Args& ...args) const { return {args[i]...}; }
2222
};
2323

2424
template <class SF>
2525
struct GetPointer {
2626
template <class... Args>
27-
constexpr SF operator()(Args& ...args) const { return {{&args...}}; }
27+
constexpr SF operator()(Args& ...args) const { return {&args...}; }
2828
template <class... Args>
29-
constexpr SF operator()(const Args& ...args) const { return {{&args...}}; }
29+
constexpr SF operator()(const Args& ...args) const { return {&args...}; }
3030
};
3131

3232
template <class SF>
3333
struct AggregateConstructor {
3434
template <class... Args>
35-
constexpr SF operator()(Args& ...args) const { return {{args...}}; }
35+
constexpr SF operator()(Args& ...args) const { return {args...}; }
3636
template <class... Args>
37-
constexpr SF operator()(const Args& ...args) const { return {{args...}}; }
37+
constexpr SF operator()(const Args& ...args) const { return {args...}; }
3838
};
3939

4040
struct FirstMember {
@@ -47,20 +47,20 @@ struct FirstMember {
4747
template <class SF>
4848
struct PreIncrement {
4949
template <class... Args>
50-
constexpr SF operator()(Args& ...args) const { return {{++args...}}; }
50+
constexpr SF operator()(Args& ...args) const { return {++args...}; }
5151
};
5252

5353
template <class SF>
5454
struct PreDecrement {
5555
template <class... Args>
56-
constexpr SF operator()(Args& ...args) const { return {{--args...}}; }
56+
constexpr SF operator()(Args& ...args) const { return {--args...}; }
5757
};
5858

5959
template <class SF>
6060
struct Advance {
6161
ptrdiff_t i;
6262
template <class... Args>
63-
constexpr SF operator()(const Args& ...args) const { return {{(args + i)...}}; }
63+
constexpr SF operator()(const Args& ...args) const { return {(args + i)...}; }
6464
};
6565

6666
struct CopyAssignment {
@@ -78,10 +78,10 @@ struct wrapper : public S<F> {
7878
constexpr wrapper() = default;
7979
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
8080
template <template <class> class F_other>
81-
constexpr wrapper(wrapper<S, F_other>& other) : Base{other.apply(AggregateConstructor<wrapper>{})} {}
81+
constexpr wrapper(S<F_other>& other) : Base{other.apply(AggregateConstructor<Base>{})} {}
8282

83-
constexpr wrapper<S, reference> operator[] (size_t i) { return Base::apply(RandomAccessAt<wrapper<S, reference>>{i}); }
84-
constexpr wrapper<S, const_reference> operator[] (size_t i) const { return Base::apply(RandomAccessAt<wrapper<S, const_reference>>{i}); }
83+
constexpr wrapper<S, reference> operator[] (size_t i) { return Base::apply(RandomAccessAt<S<reference>>{i}); }
84+
constexpr wrapper<S, const_reference> operator[] (size_t i) const { return Base::apply(RandomAccessAt<S<const_reference>>{i}); }
8585

8686
constexpr wrapper<S, reference> operator*() { return operator[](0); }
8787
constexpr wrapper<S, const_reference> operator*(ptrdiff_t) const { return operator[](0); }
@@ -93,8 +93,8 @@ struct wrapper<S, value> : public S<value> {
9393

9494
constexpr wrapper() = default;
9595
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
96-
constexpr wrapper(wrapper<S, reference> other) : Base(other.apply(AggregateConstructor<wrapper>{})) {}
97-
constexpr wrapper(wrapper<S, const_reference> other) : Base(other.apply(AggregateConstructor<wrapper>{})) {}
96+
constexpr wrapper(const S<reference>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
97+
constexpr wrapper(const S<const_reference> other) : Base(other.apply(AggregateConstructor<Base>{})) {}
9898

9999
//constexpr S<MemLayout::pointer> operator& () { return apply(GetPointer<S<MemLayout::pointer>>{}); }
100100
//constexpr S<MemLayout::const_pointer> operator& () const { return apply(GetPointer<S<MemLayout::const_pointer>>{}); }
@@ -106,7 +106,7 @@ struct wrapper<S, reference> : public S<reference> {
106106

107107
constexpr wrapper() = delete;
108108
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
109-
constexpr wrapper(wrapper<S, value>& other) : Base(other.apply(AggregateConstructor<wrapper>{})) {}
109+
constexpr wrapper(S<value>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
110110

111111
constexpr wrapper(const wrapper& other) = default;
112112

@@ -127,8 +127,8 @@ struct wrapper<S, reference> : public S<reference> {
127127

128128
constexpr wrapper& operator=(wrapper&& other) { return operator=(other); }
129129

130-
constexpr wrapper<S, pointer> operator& () { return Base::apply(GetPointer<wrapper<S, pointer>>{}); }
131-
//constexpr wrapper<S, const_pointer> operator& () const { return Base::apply(GetPointer<wrapper<S, const_pointer>>{}); }
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>>{}); }
132132
};
133133

134134
template <template <template <class> class> class S>
@@ -137,10 +137,10 @@ struct wrapper<S, const_reference> : public S<const_reference> {
137137

138138
constexpr wrapper() = delete;
139139
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
140-
constexpr wrapper(const wrapper<S, value>& other) : Base(other.apply(AggregateConstructor<wrapper>{})) {}
141-
constexpr wrapper(const wrapper<S, reference>& other) : Base(other.apply(AggregateConstructor<wrapper>{})) {}
140+
constexpr wrapper(const S<value>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
141+
constexpr wrapper(const S<reference>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
142142

143-
constexpr wrapper<S, const_pointer> operator&() const { return Base::apply(GetPointer<wrapper<S, const_pointer>>{}); }
143+
constexpr wrapper<S, const_pointer> operator&() const { return Base::apply(GetPointer<S<const_pointer>>{}); }
144144
};
145145

146146
template <template <template <class> class> class S>
@@ -150,8 +150,8 @@ struct wrapper<S, pointer> : public S<pointer> {
150150
constexpr wrapper() = default;
151151
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
152152

153-
constexpr wrapper<S, reference> operator[] (size_t i) { return Base::apply(RandomAccessAt<wrapper<S, reference>>{i}); }
154-
constexpr wrapper<S, const_reference> operator[] (size_t i) const { return Base::apply(RandomAccessAt<wrapper<S, const_reference>>{i}); }
153+
constexpr wrapper<S, reference> operator[] (size_t i) { return Base::apply(RandomAccessAt<S<reference>>{i}); }
154+
constexpr const wrapper<S, const_reference> operator[] (size_t i) const { return Base::apply(RandomAccessAt<S<const_reference>>{i}); }
155155

156156
constexpr wrapper<S, reference> operator*() { return operator[](0); }
157157
constexpr wrapper<S, const_reference> operator*() const { return operator[](0); }
@@ -160,13 +160,13 @@ struct wrapper<S, pointer> : public S<pointer> {
160160
constexpr bool operator!=(const wrapper& other) const { return !this->operator==(other); }
161161
constexpr bool operator<(const wrapper& other) const { return Base::apply(FirstMember{}) < other.apply(FirstMember{}); }
162162

163-
constexpr wrapper operator+(ptrdiff_t i) const { return Base::apply(Advance<wrapper>{i}); }
163+
constexpr wrapper operator+(ptrdiff_t i) const { return Base::apply(Advance<Base>{i}); }
164164
constexpr wrapper operator-(ptrdiff_t i) const { return operator+(-i); }
165165
constexpr ptrdiff_t operator-(const wrapper& other) const { return Base::apply(FirstMember{}) - other.apply(FirstMember{}); }
166166

167-
constexpr wrapper& operator++() { Base::apply(PreIncrement<wrapper>{}); return *this; }
167+
constexpr wrapper& operator++() { Base::apply(PreIncrement<Base>{}); return *this; }
168168
constexpr wrapper& operator+=(ptrdiff_t i) { return *this = *this + i; }
169-
constexpr wrapper& operator--() { Base::apply(PreDecrement<wrapper>{}); return *this; }
169+
constexpr wrapper& operator--() { Base::apply(PreDecrement<Base>{}); return *this; }
170170
constexpr wrapper& operator-=(ptrdiff_t i) { return *this = *this - i; }
171171
};
172172

@@ -176,9 +176,9 @@ struct wrapper<S, const_pointer> : public S<const_pointer> {
176176

177177
constexpr wrapper() = default;
178178
constexpr wrapper(Base b) : Base{static_cast<Base&&>(b)} {}
179-
constexpr wrapper(wrapper<S, pointer> other) : Base(other.apply(AggregateConstructor<wrapper>{})) {}
179+
constexpr wrapper(const S<pointer>& other) : Base(other.apply(AggregateConstructor<Base>{})) {}
180180

181-
constexpr wrapper<S, const_reference> operator[] (size_t i) const { return Base::apply(RandomAccessAt<wrapper<S, const_reference>>{i}); }
181+
constexpr wrapper<S, const_reference> operator[] (size_t i) const { return Base::apply(RandomAccessAt<S<const_reference>>{i}); }
182182
constexpr wrapper<S, const_reference> operator*() const { return operator[](0); }
183183
};
184184

GPU/GPUTracking/SectorTracker/GPUTPCTracker.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ class GPUTPCTracker : public GPUProcessor
6565
template <MemLayout::Flag layout>
6666
using TrackletArrayType = MemLayout::interface<GPUTPCTrackletSkeleton, MemLayout::pointer, layout>::type;
6767

68+
template <MemLayout::Flag layout>
69+
using TrackArrayType = MemLayout::interface<GPUTPCTrackSkeleton, MemLayout::pointer, layout>::type;
70+
6871
struct commonMemoryStruct {
6972
GPUAtomic(uint32_t) nStartHits = 0; // number of start hits
7073
GPUAtomic(uint32_t) nTracklets = 0; // number of tracklets
@@ -248,12 +251,12 @@ class GPUTPCTracker : public GPUProcessor
248251
GPUglobalref() char* mGPUTrackletTemp = nullptr; // Temp Memory for GPU Tracklet Constructor
249252

250253
// event
251-
GPUglobalref() commonMemoryStruct* mCommonMem = nullptr; // common event memory
252-
GPUglobalref() GPUTPCHitId* mTrackletStartHits = nullptr; // start hits for the tracklets
253-
GPUglobalref() TrackletArrayType<MemLayout::Flag::soa> mTracklets; // tracklets
254-
GPUglobalref() calink* mTrackletRowHits = nullptr; // Hits for each Tracklet in each row
255-
GPUglobalref() MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::pointer> mTracks; // reconstructed tracks
256-
GPUglobalref() GPUTPCHitId* mTrackHits = nullptr; // array of track hit numbers
254+
GPUglobalref() commonMemoryStruct* mCommonMem = nullptr; // common event memory
255+
GPUglobalref() GPUTPCHitId* mTrackletStartHits = nullptr; // start hits for the tracklets
256+
GPUglobalref() TrackletArrayType<MemLayout::Flag::aos> mTracklets; // tracklets
257+
GPUglobalref() calink* mTrackletRowHits = nullptr; // Hits for each Tracklet in each row
258+
GPUglobalref() TrackArrayType<MemLayout::Flag::soa> mTracks; // reconstructed tracks
259+
GPUglobalref() GPUTPCHitId* mTrackHits = nullptr; // array of track hit numbers
257260

258261
static int32_t StarthitSortComparison(const void* a, const void* b);
259262
};

0 commit comments

Comments
 (0)