Skip to content

Commit 704cd71

Browse files
Works except for two partial template specializations
1 parent 3b50421 commit 704cd71

10 files changed

Lines changed: 96 additions & 20 deletions

File tree

GPU/GPUTracking/DataTypes/GPUDataTypes.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <cstddef>
2525
#endif
2626
#include "GPUTRDDef.h"
27+
#include "GPUTPCDef.h"
2728

2829
struct AliHLTTPCClusterMCLabel;
2930
struct AliHLTTPCRawCluster;
@@ -97,7 +98,8 @@ struct TPCZSLinkMapping;
9798

9899
#include "utils/bitfield.h"
99100

100-
class GPUTPCTrack;
101+
template <template <class> class F>
102+
struct GPUTPCTrackSkeleton;
101103
class GPUTPCHitId;
102104
class GPUTPCGMMergedTrack;
103105
struct GPUTPCGMMergedTrackHit;
@@ -224,7 +226,7 @@ struct GPUTrackingInOutPointers {
224226
const AliHLTTPCRawCluster* rawClusters[NSECTORS] = {nullptr};
225227
uint32_t nRawClusters[NSECTORS] = {0};
226228
const o2::tpc::ClusterNativeAccess* clustersNative = nullptr;
227-
const GPUTPCTrack* sectorTracks[NSECTORS] = {nullptr};
229+
const GPUTPCTrackSkeleton<wrapper::value>* sectorTracks[NSECTORS] = {nullptr}; // GPUTPCTrack
228230
uint32_t nSectorTracks[NSECTORS] = {0};
229231
const GPUTPCHitId* sectorClusters[NSECTORS] = {nullptr};
230232
uint32_t nSectorClusters[NSECTORS] = {0};

GPU/GPUTracking/Global/GPUChainTracking.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class GPUChainTracking : public GPUChain
107107
std::unique_ptr<AliHLTTPCRawCluster[]> rawClusters[NSECTORS];
108108
std::unique_ptr<o2::tpc::ClusterNative[]> clustersNative;
109109
std::unique_ptr<o2::tpc::ClusterNativeAccess> clusterNativeAccess;
110-
std::unique_ptr<GPUTPCTrack[]> sectorTracks[NSECTORS];
110+
std::unique_ptr<GPUTPCTrackSkeleton<wrapper::value>[]> sectorTracks[NSECTORS];
111111
std::unique_ptr<GPUTPCHitId[]> sectorClusters[NSECTORS];
112112
std::unique_ptr<AliHLTTPCClusterMCLabel[]> mcLabelsTPC;
113113
std::unique_ptr<GPUTPCMCInfo[]> mcInfosTPC;

GPU/GPUTracking/SectorTracker/GPUTPCBaseTrackParam.h

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

1818
#include "GPUTPCDef.h"
19-
#include "wrapper.h"
19+
// #include "wrapper.h"
2020

2121
namespace o2::gpu
2222
{
@@ -30,6 +30,12 @@ namespace o2::gpu
3030
*/
3131
template <template <class> class F>
3232
struct GPUTPCBaseTrackParamSkeleton {
33+
template <template <class> class F_new>
34+
operator GPUTPCBaseTrackParamSkeleton<F_new>() const { return {mX, mC, mZOffset, mP}; }
35+
36+
template <template <class> class F_new>
37+
operator GPUTPCBaseTrackParamSkeleton<F_new>() { return {mX, mC, mZOffset, mP}; }
38+
3339
GPUd() float X() const { return mX; }
3440
GPUd() float Y() const { return mP[0]; }
3541
GPUd() float Z() const { return mP[1]; }

GPU/GPUTracking/SectorTracker/GPUTPCDef.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ typedef uint32_t calink;
3131
typedef uint32_t cahit;
3232
#endif
3333
struct cahit2 { cahit x, y; };
34+
35+
namespace wrapper {
36+
template <class T> using value = T;
37+
template <class T> using reference = T&;
38+
template <class T> using const_reference = const T&;
39+
template <class T> using pointer = T*;
40+
} // namespace o2::gpu::wrapper
41+
3442
} // namespace o2::GPU
3543

3644
#endif //GPUDTPCEF_H

GPU/GPUTracking/SectorTracker/GPUTPCTrack.h

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "GPUTPCBaseTrackParam.h"
1919
#include "GPUTPCDef.h"
20+
// #include "wrapper.h"
2021

2122
namespace o2::gpu
2223
{
@@ -27,14 +28,13 @@ namespace o2::gpu
2728
* The class is dedicated for internal use by the GPUTPCTracker algorithm.
2829
* The track parameters at both ends are stored separately in the GPUTPCEndPoint class
2930
*/
30-
class GPUTPCTrack
31+
template <template <class> class F>
32+
class GPUTPCTrackSkeleton
3133
{
3234
public:
3335
#if !defined(GPUCA_GPUCODE)
34-
GPUTPCTrack() : mFirstHitID(0), mNHits(0), mLocalTrackId(-1), mParam()
35-
{
36-
}
37-
~GPUTPCTrack() = default;
36+
GPUTPCTrackSkeleton();
37+
~GPUTPCTrackSkeleton() = default;
3838
#endif //! GPUCA_GPUCODE
3939

4040
GPUhd() int32_t NHits() const { return mNHits; }
@@ -45,8 +45,30 @@ class GPUTPCTrack
4545
GPUhd() void SetNHits(int32_t v) { mNHits = v; }
4646
GPUhd() void SetLocalTrackId(int32_t v) { mLocalTrackId = v; }
4747
GPUhd() void SetFirstHitID(int32_t v) { mFirstHitID = v; }
48-
49-
GPUhd() void SetParam(const GPUTPCBaseTrackParam& v) { mParam = v; }
48+
GPUhd() void SetParam(GPUTPCBaseTrackParamSkeleton<wrapper::const_reference> v) {
49+
mParam.mX = v.mX;
50+
mParam.mC[0] = v.mC[0];
51+
mParam.mC[1] = v.mC[1];
52+
mParam.mC[2] = v.mC[2];
53+
mParam.mC[3] = v.mC[3];
54+
mParam.mC[4] = v.mC[4];
55+
mParam.mC[5] = v.mC[5];
56+
mParam.mC[6] = v.mC[6];
57+
mParam.mC[7] = v.mC[7];
58+
mParam.mC[8] = v.mC[8];
59+
mParam.mC[9] = v.mC[9];
60+
mParam.mC[10] = v.mC[10];
61+
mParam.mC[11] = v.mC[11];
62+
mParam.mC[12] = v.mC[12];
63+
mParam.mC[13] = v.mC[13];
64+
mParam.mC[14] = v.mC[14];
65+
mParam.mZOffset = v.mZOffset;
66+
mParam.mP[0] = v.mP[0];
67+
mParam.mP[1] = v.mP[1];
68+
mParam.mP[2] = v.mP[2];
69+
mParam.mP[3] = v.mP[3];
70+
mParam.mP[4] = v.mP[4];
71+
}
5072

5173
private:
5274
int32_t mFirstHitID; // index of the first track cell in the track->cell pointer array
@@ -56,6 +78,16 @@ class GPUTPCTrack
5678

5779
private:
5880
};
81+
82+
#if !defined(GPUCA_GPUCODE)
83+
template <>
84+
GPUTPCTrackSkeleton<wrapper::value>::GPUTPCTrackSkeleton() : mFirstHitID(0), mNHits(0), mLocalTrackId(-1), mParam()
85+
{
86+
}
87+
#endif //! GPUCA_GPUCODE
88+
89+
using GPUTPCTrack = GPUTPCTrackSkeleton<wrapper::value>;
90+
5991
} // namespace o2::gpu
6092

6193
#endif // GPUTPCTRACK_H

GPU/GPUTracking/SectorTracker/GPUTPCTrackParam.cxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
#include "GPUTPCTrackLinearisation.h"
1616
#include "GPUTPCTrackParam.h"
1717
#include "GPUTPCGeometry.h"
18-
#include "wrapper.h"
18+
#include "GPUTPCDef.h"
19+
// #include "wrapper.h"
1920

2021
using namespace o2::gpu;
2122

GPU/GPUTracking/SectorTracker/GPUTPCTrackParam.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#include "GPUTPCBaseTrackParam.h"
1919
#include "GPUTPCDef.h"
2020
#include "GPUCommonMath.h"
21-
#include "wrapper.h"
21+
// #include "wrapper.h"
2222

2323
namespace o2::gpu
2424
{

GPU/GPUTracking/SectorTracker/GPUTPCTracker.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ namespace o2::gpu
3131
{
3232
struct GPUTPCClusterData;
3333
struct GPUParam;
34-
class GPUTPCTrack;
34+
template <template <class> class F>
35+
struct GPUTPCTrackSkeleton;
3536
class GPUTPCRow;
3637

3738
class GPUTPCTracker : public GPUProcessor
@@ -201,7 +202,7 @@ class GPUTPCTracker : public GPUProcessor
201202
GPUhd() GPUglobalref() calink* TrackletRowHits() const { return mTrackletRowHits; }
202203

203204
GPUhd() GPUglobalref() GPUAtomic(uint32_t) * NTracks() const { return &mCommonMem->nTracks; }
204-
GPUhd() GPUglobalref() GPUTPCTrack* Tracks() const { return mTracks; }
205+
GPUhd() GPUglobalref() GPUTPCTrackSkeleton<wrapper::value>* Tracks() const { return mTracks; }
205206
GPUhd() GPUglobalref() GPUAtomic(uint32_t) * NTrackHits() const { return &mCommonMem->nTrackHits; }
206207
GPUhd() GPUglobalref() GPUTPCHitId* TrackHits() const { return mTrackHits; }
207208

@@ -253,7 +254,7 @@ class GPUTPCTracker : public GPUProcessor
253254
GPUglobalref() GPUTPCHitId* mTrackletStartHits = nullptr; // start hits for the tracklets
254255
GPUglobalref() GPUTPCTracklet_pointer mTracklets;// tracklets
255256
GPUglobalref() calink* mTrackletRowHits = nullptr; // Hits for each Tracklet in each row
256-
GPUglobalref() GPUTPCTrack* mTracks = nullptr; // reconstructed tracks
257+
GPUglobalref() GPUTPCTrackSkeleton<wrapper::value>* mTracks = nullptr; // reconstructed tracks
257258
GPUglobalref() GPUTPCHitId* mTrackHits = nullptr; // array of track hit numbers
258259

259260
static int32_t StarthitSortComparison(const void* a, const void* b);

GPU/GPUTracking/SectorTracker/GPUTPCTracklet.h

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
#include "GPUTPCBaseTrackParam.h"
1919
#include "GPUTPCDef.h"
20-
#include "wrapper.h"
20+
// #include "wrapper.h"
2121

2222
namespace o2::gpu
2323
{
@@ -39,12 +39,35 @@ class GPUTPCTrackletSkeleton
3939
GPUhd() int32_t LastRow() const { return mLastRow; }
4040
GPUhd() int32_t HitWeight() const { return mHitWeight; }
4141
GPUhd() uint32_t FirstHit() const { return mFirstHit; }
42-
GPUhd() const GPUTPCBaseTrackParam& Param() const { return mParam; }
42+
GPUhd() GPUTPCBaseTrackParamSkeleton<wrapper::const_reference> Param() const { return {mParam.mX, mParam.mC, mParam.mZOffset, mParam.mP}; }
4343

4444
GPUhd() void SetFirstRow(int32_t v) { mFirstRow = v; }
4545
GPUhd() void SetLastRow(int32_t v) { mLastRow = v; }
4646
GPUhd() void SetFirstHit(uint32_t v) { mFirstHit = v; }
47-
GPUhd() void SetParam(const GPUTPCBaseTrackParam& v) { mParam = reinterpret_cast<const GPUTPCBaseTrackParam&>(v); }
47+
GPUhd() void SetParam(GPUTPCBaseTrackParamSkeleton<wrapper::const_reference> v) {
48+
mParam.mX = v.mX;
49+
mParam.mC[0] = v.mC[0];
50+
mParam.mC[1] = v.mC[1];
51+
mParam.mC[2] = v.mC[2];
52+
mParam.mC[3] = v.mC[3];
53+
mParam.mC[4] = v.mC[4];
54+
mParam.mC[5] = v.mC[5];
55+
mParam.mC[6] = v.mC[6];
56+
mParam.mC[7] = v.mC[7];
57+
mParam.mC[8] = v.mC[8];
58+
mParam.mC[9] = v.mC[9];
59+
mParam.mC[10] = v.mC[10];
60+
mParam.mC[11] = v.mC[11];
61+
mParam.mC[12] = v.mC[12];
62+
mParam.mC[13] = v.mC[13];
63+
mParam.mC[14] = v.mC[14];
64+
mParam.mZOffset = v.mZOffset;
65+
mParam.mP[0] = v.mP[0];
66+
mParam.mP[1] = v.mP[1];
67+
mParam.mP[2] = v.mP[2];
68+
mParam.mP[3] = v.mP[3];
69+
mParam.mP[4] = v.mP[4];
70+
}
4871
GPUhd() void SetHitWeight(const int32_t w) { mHitWeight = w; }
4972

5073
// private:
@@ -55,6 +78,9 @@ class GPUTPCTrackletSkeleton
5578
F<uint32_t> mFirstHit; // first hit in row hit array
5679
};
5780

81+
template<>
82+
GPUhd() GPUTPCBaseTrackParamSkeleton<wrapper::const_reference> GPUTPCTrackletSkeleton<wrapper::pointer>::Param() const { return {mParam->mX, mParam->mC, mParam->mZOffset, mParam->mP}; }
83+
5884
using GPUTPCTracklet = GPUTPCTrackletSkeleton<wrapper::value>;
5985
using GPUTPCTracklet_reference = GPUTPCTrackletSkeleton<wrapper::reference>;
6086
using GPUTPCTracklet_const_reference = GPUTPCTrackletSkeleton<wrapper::const_reference>;

GPU/GPUTracking/Standalone/cmake/config.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ set(GPUCA_CONFIG_GL3W 0)
2828
set(GPUCA_CONFIG_O2 1)
2929
set(GPUCA_BUILD_DEBUG 0)
3030
set(GPUCA_BUILD_DEBUG_SANITIZE 0)
31-
set(GPUCA_DETERMINISTIC_MODE 0 CACHE BOOL "GPUCA_DETERMINISTIC_MODE") # OFF / NO_FAST_MATH / OPTO2 / GPU / WHOLEO2
31+
set(GPUCA_DETERMINISTIC_MODE 0 CACHE BOOL "GPUCA_DETERMINISTIC_MODE") # OFF / NO_FAST_MATH / OPTO2 / GPU / WHOLEO2
3232
#set(GPUCA_CUDA_GCCBIN c++-14)
3333
#set(GPUCA_OPENCL_CLANGBIN clang-20)
3434
set(HIP_AMDGPUTARGET "default" CACHE STRING "HIP_AMDGPUTARGET") # "gfx906;gfx908;gfx90a"

0 commit comments

Comments
 (0)