Skip to content

Commit b557930

Browse files
Fixed aos
1 parent 039a6b6 commit b557930

10 files changed

Lines changed: 93 additions & 62 deletions

File tree

GPU/GPUTracking/DataTypes/GPUDataTypes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ struct GPUTrackingInOutPointers {
225225
const AliHLTTPCRawCluster* rawClusters[NSECTORS] = {nullptr};
226226
uint32_t nRawClusters[NSECTORS] = {0};
227227
const o2::tpc::ClusterNativeAccess* clustersNative = nullptr;
228-
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> sectorTracks[NSECTORS];
228+
MemLayout::interface<GPUTPCTrackSkeleton, MemLayout::const_pointer, MemLayout::Flag::aos>::type sectorTracks[NSECTORS];
229229
uint32_t nSectorTracks[NSECTORS] = {0};
230230
const GPUTPCHitId* sectorClusters[NSECTORS] = {nullptr};
231231
uint32_t nSectorClusters[NSECTORS] = {0};

GPU/GPUTracking/Global/GPUChainTracking.cxx

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -549,23 +549,35 @@ void GPUChainTracking::ClearIOPointers()
549549
new (&mIOMem) InOutMemory;
550550
}
551551

552+
void GPUChainTracking::AllocateIOMemorySectorTracks(
553+
uint32_t nSectorTracks,
554+
MemLayout::interface<GPUTPCTrackSkeleton, MemLayout::const_pointer, MemLayout::Flag::aos>::type& IOPtrSectorTrack,
555+
MemLayout::interface<GPUTPCTrackSkeleton, unique_ptr_array, MemLayout::Flag::aos>::type& IOMemSectorTrack
556+
) {
557+
AllocateIOMemoryHelper(nSectorTracks, IOPtrSectorTrack, IOMemSectorTrack);
558+
}
559+
void GPUChainTracking::AllocateIOMemorySectorTracks(
560+
uint32_t nSectorTracks,
561+
MemLayout::interface<GPUTPCTrackSkeleton, MemLayout::const_pointer, MemLayout::Flag::soa>::type& IOPtrSectorTrack,
562+
MemLayout::interface<GPUTPCTrackSkeleton, unique_ptr_array, MemLayout::Flag::soa>::type& IOMemSectorTrack
563+
) {
564+
AllocateIOMemoryHelper(nSectorTracks, IOPtrSectorTrack.mFirstHitID, IOMemSectorTrack.mFirstHitID);
565+
AllocateIOMemoryHelper(nSectorTracks, IOPtrSectorTrack.mNHits, IOMemSectorTrack.mNHits);
566+
AllocateIOMemoryHelper(nSectorTracks, IOPtrSectorTrack.mLocalTrackId, IOMemSectorTrack.mLocalTrackId);
567+
568+
AllocateIOMemoryHelper(nSectorTracks, IOPtrSectorTrack.mParam.mX, IOMemSectorTrack.mParam.mX);
569+
AllocateIOMemoryHelper(nSectorTracks, IOPtrSectorTrack.mParam.mC, IOMemSectorTrack.mParam.mC);
570+
AllocateIOMemoryHelper(nSectorTracks, IOPtrSectorTrack.mParam.mZOffset, IOMemSectorTrack.mParam.mZOffset);
571+
AllocateIOMemoryHelper(nSectorTracks, IOPtrSectorTrack.mParam.mP, IOMemSectorTrack.mParam.mP);
572+
}
573+
552574
void GPUChainTracking::AllocateIOMemory()
553575
{
554576
for (uint32_t i = 0; i < NSECTORS; i++) {
555577
AllocateIOMemoryHelper(mIOPtrs.nClusterData[i], mIOPtrs.clusterData[i], mIOMem.clusterData[i]);
556578
AllocateIOMemoryHelper(mIOPtrs.nRawClusters[i], mIOPtrs.rawClusters[i], mIOMem.rawClusters[i]);
557-
558-
//AllocateIOMemoryHelper(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i], mIOMem.sectorTracks[i]);
559-
560-
AllocateIOMemoryHelper(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i].mFirstHitID, mIOMem.sectorTracks[i].mFirstHitID);
561-
AllocateIOMemoryHelper(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i].mNHits, mIOMem.sectorTracks[i].mNHits);
562-
AllocateIOMemoryHelper(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i].mLocalTrackId, mIOMem.sectorTracks[i].mLocalTrackId);
563-
564-
AllocateIOMemoryHelper(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i].mParam.mX, mIOMem.sectorTracks[i].mParam.mX);
565-
AllocateIOMemoryHelper(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i].mParam.mC, mIOMem.sectorTracks[i].mParam.mC);
566-
AllocateIOMemoryHelper(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i].mParam.mZOffset, mIOMem.sectorTracks[i].mParam.mZOffset);
567-
AllocateIOMemoryHelper(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i].mParam.mP, mIOMem.sectorTracks[i].mParam.mP);
568-
579+
//AllocateIOMemoryHelper(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i], mIOMem.sectorTracks[i]); // debug
580+
AllocateIOMemorySectorTracks(mIOPtrs.nSectorTracks[i], mIOPtrs.sectorTracks[i], mIOMem.sectorTracks[i]); // new
569581
AllocateIOMemoryHelper(mIOPtrs.nSectorClusters[i], mIOPtrs.sectorClusters[i], mIOMem.sectorClusters[i]);
570582
}
571583
mIOMem.clusterNativeAccess.reset(new ClusterNativeAccess);

GPU/GPUTracking/Global/GPUChainTracking.h

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ class GPUChainTracking : public GPUChain
9191
// Structures for input and output data
9292
GPUTrackingInOutPointers& mIOPtrs;
9393

94+
template <class T>
95+
using unique_ptr_array = std::unique_ptr<T[]>;
96+
9497
struct InOutMemory {
9598
InOutMemory();
9699
~InOutMemory();
@@ -109,10 +112,7 @@ class GPUChainTracking : public GPUChain
109112
std::unique_ptr<o2::tpc::ClusterNative[]> clustersNative;
110113
std::unique_ptr<o2::tpc::ClusterNativeAccess> clusterNativeAccess;
111114

112-
template <class T>
113-
using unique_ptr_array = std::unique_ptr<T[]>;
114-
115-
MemLayout::wrapper<GPUTPCTrackSkeleton, unique_ptr_array> sectorTracks[NSECTORS];
115+
MemLayout::interface<GPUTPCTrackSkeleton, unique_ptr_array, MemLayout::Flag::aos>::type sectorTracks[NSECTORS];
116116

117117
std::unique_ptr<GPUTPCHitId[]> sectorClusters[NSECTORS];
118118
std::unique_ptr<AliHLTTPCClusterMCLabel[]> mcLabelsTPC;
@@ -138,6 +138,16 @@ class GPUChainTracking : public GPUChain
138138

139139
// Read / Dump / Clear Data
140140
void ClearIOPointers();
141+
void AllocateIOMemorySectorTracks(
142+
uint32_t nSectorTracks,
143+
MemLayout::interface<GPUTPCTrackSkeleton, MemLayout::const_pointer, MemLayout::Flag::aos>::type& IOPtrSectorTrack,
144+
MemLayout::interface<GPUTPCTrackSkeleton, unique_ptr_array, MemLayout::Flag::aos>::type& IOMemSectorTrack
145+
);
146+
void AllocateIOMemorySectorTracks(
147+
uint32_t nSectorTracks,
148+
MemLayout::interface<GPUTPCTrackSkeleton, MemLayout::const_pointer, MemLayout::Flag::soa>::type& IOPtrSectorTrack,
149+
MemLayout::interface<GPUTPCTrackSkeleton, unique_ptr_array, MemLayout::Flag::soa>::type& IOMemSectorTrack
150+
);
141151
void AllocateIOMemory();
142152
using GPUChain::DumpData;
143153
void DumpData(const char* filename, const GPUTrackingInOutPointers* ioPtrs = nullptr);

GPU/GPUTracking/Merger/GPUTPCGMMerger.cxx

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ GPUd() void GPUTPCGMMerger::ClearTrackLinks(int32_t nBlocks, int32_t nThreads, i
488488
}
489489
}
490490

491-
GPUd() int32_t GPUTPCGMMerger::RefitSectorTrack(GPUTPCGMSectorTrack& sectorTrack, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> inTrack, float alpha, int32_t sector)
491+
GPUd() int32_t GPUTPCGMMerger::RefitSectorTrack(GPUTPCGMSectorTrack& sectorTrack, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> inTrack, float alpha, int32_t sector)
492492
{
493493
GPUTPCGMPropagator prop;
494494
prop.SetMaterialTPC();
@@ -497,14 +497,14 @@ GPUd() int32_t GPUTPCGMMerger::RefitSectorTrack(GPUTPCGMSectorTrack& sectorTrack
497497
prop.SetFitInProjections(false);
498498
prop.SetPolynomialField(&Param().polynomialField);
499499
GPUTPCGMTrackParam trk;
500-
trk.X() = inTrack->Param().GetX();
501-
trk.Y() = inTrack->Param().GetY();
502-
trk.Z() = inTrack->Param().GetZ();
503-
trk.SinPhi() = inTrack->Param().GetSinPhi();
504-
trk.DzDs() = inTrack->Param().GetDzDs();
505-
trk.QPt() = inTrack->Param().GetQPt();
506-
trk.TZOffset() = Param().par.earlyTpcTransform ? inTrack->Param().GetZOffset() : GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convZOffsetToVertexTime(sector, inTrack->Param().GetZOffset(), Param().continuousMaxTimeBin);
507-
trk.ShiftZ(this, sector, sectorTrack.ClusterZT0(), sectorTrack.ClusterZTN(), inTrack->Param().GetX(), inTrack->Param().GetX()); // We do not store the inner / outer cluster X, so we just use the track X instead
500+
trk.X() = inTrack.Param().GetX();
501+
trk.Y() = inTrack.Param().GetY();
502+
trk.Z() = inTrack.Param().GetZ();
503+
trk.SinPhi() = inTrack.Param().GetSinPhi();
504+
trk.DzDs() = inTrack.Param().GetDzDs();
505+
trk.QPt() = inTrack.Param().GetQPt();
506+
trk.TZOffset() = Param().par.earlyTpcTransform ? inTrack.Param().GetZOffset() : GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convZOffsetToVertexTime(sector, inTrack.Param().GetZOffset(), Param().continuousMaxTimeBin);
507+
trk.ShiftZ(this, sector, sectorTrack.ClusterZT0(), sectorTrack.ClusterZTN(), inTrack.Param().GetX(), inTrack.Param().GetX()); // We do not store the inner / outer cluster X, so we just use the track X instead
508508
sectorTrack.SetX2(0.f);
509509
for (int32_t way = 0; way < 2; way++) {
510510
if (way) {
@@ -513,14 +513,14 @@ GPUd() int32_t GPUTPCGMMerger::RefitSectorTrack(GPUTPCGMSectorTrack& sectorTrack
513513
}
514514
trk.ResetCovariance();
515515
prop.SetTrack(&trk, alpha);
516-
int32_t start = way ? inTrack->NHits() - 1 : 0;
517-
int32_t end = way ? 0 : (inTrack->NHits() - 1);
516+
int32_t start = way ? inTrack.NHits() - 1 : 0;
517+
int32_t end = way ? 0 : (inTrack.NHits() - 1);
518518
int32_t incr = way ? -1 : 1;
519519
for (int32_t i = start; i != end; i += incr) {
520520
float x, y, z;
521521
int32_t row, flags;
522522
const GPUTPCTracker& tracker = GetConstantMem()->tpcTrackers[sector];
523-
const GPUTPCHitId& ic = tracker.TrackHits()[inTrack->FirstHitID() + i];
523+
const GPUTPCHitId& ic = tracker.TrackHits()[inTrack.FirstHitID() + i];
524524
int32_t clusterIndex = tracker.Data().ClusterDataIndex(tracker.Data().Row(ic.RowIndex()), ic.HitIndex());
525525
row = ic.RowIndex();
526526
const ClusterNative& cl = GetConstantMem()->ioPtrs.clustersNative->clustersLinear[GetConstantMem()->ioPtrs.clustersNative->clusterOffset[sector][0] + clusterIndex];
@@ -550,11 +550,11 @@ GPUd() int32_t GPUTPCGMMerger::RefitSectorTrack(GPUTPCGMSectorTrack& sectorTrack
550550
return 0;
551551
}
552552

553-
GPUd() void GPUTPCGMMerger::SetTrackClusterZT(GPUTPCGMSectorTrack& track, int32_t iSector, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> sectorTr)
553+
GPUd() void GPUTPCGMMerger::SetTrackClusterZT(GPUTPCGMSectorTrack& track, int32_t iSector, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> sectorTr)
554554
{
555555
const GPUTPCTracker& trk = GetConstantMem()->tpcTrackers[iSector];
556-
const GPUTPCHitId& ic1 = trk.TrackHits()[sectorTr->FirstHitID()];
557-
const GPUTPCHitId& ic2 = trk.TrackHits()[sectorTr->FirstHitID() + sectorTr->NHits() - 1];
556+
const GPUTPCHitId& ic1 = trk.TrackHits()[sectorTr.FirstHitID()];
557+
const GPUTPCHitId& ic2 = trk.TrackHits()[sectorTr.FirstHitID() + sectorTr.NHits() - 1];
558558
int32_t clusterIndex1 = trk.Data().ClusterDataIndex(trk.Data().Row(ic1.RowIndex()), ic1.HitIndex());
559559
int32_t clusterIndex2 = trk.Data().ClusterDataIndex(trk.Data().Row(ic2.RowIndex()), ic2.HitIndex());
560560
if (Param().par.earlyTpcTransform) {
@@ -574,12 +574,11 @@ GPUd() void GPUTPCGMMerger::UnpackSectorGlobal(int32_t nBlocks, int32_t nThreads
574574
{
575575
const GPUTPCTracker& trk = GetConstantMem()->tpcTrackers[iSector];
576576
float alpha = Param().Alpha(iSector);
577-
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> sectorTr = mMemory->firstExtrapolatedTracks[iSector];
578577
uint32_t nLocalTracks = trk.CommonMemory()->nLocalTracks;
579578
uint32_t nTracks = *trk.NTracks();
580579
for (uint32_t itr = nLocalTracks + iBlock * nThreads + iThread; itr < nTracks; itr += nBlocks * nThreads) {
581-
sectorTr = &trk.Tracks()[itr];
582-
int32_t localId = mTrackIDs[(sectorTr->LocalTrackId() >> 24) * mNMaxSingleSectorTracks + (sectorTr->LocalTrackId() & 0xFFFFFF)];
580+
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> sectorTr = trk.Tracks()[itr];
581+
int32_t localId = mTrackIDs[(sectorTr.LocalTrackId() >> 24) * mNMaxSingleSectorTracks + (sectorTr.LocalTrackId() & 0xFFFFFF)];
583582
if (localId == -1) {
584583
continue;
585584
}
@@ -611,10 +610,9 @@ GPUd() void GPUTPCGMMerger::RefitSectorTracks(int32_t nBlocks, int32_t nThreads,
611610
uint32_t nLocalTracks = trk.CommonMemory()->nLocalTracks;
612611

613612
float alpha = Param().Alpha(iSector);
614-
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> sectorTr;
615613

616614
for (uint32_t itr = iBlock * nThreads + iThread; itr < nLocalTracks; itr += nBlocks * nThreads) {
617-
sectorTr = &trk.Tracks()[itr];
615+
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> sectorTr = trk.Tracks()[itr];
618616
GPUTPCGMSectorTrack track;
619617
SetTrackClusterZT(track, iSector, sectorTr);
620618
if (Param().rec.tpc.mergerCovSource == 0) {
@@ -642,7 +640,7 @@ GPUd() void GPUTPCGMMerger::RefitSectorTracks(int32_t nBlocks, int32_t nThreads,
642640
track.SetExtrapolatedTrackId(0, -1);
643641
track.SetExtrapolatedTrackId(1, -1);
644642
uint32_t myTrack = CAMath::AtomicAdd(&mMemory->nUnpackedTracks, 1u);
645-
mTrackIDs[iSector * mNMaxSingleSectorTracks + sectorTr->LocalTrackId()] = myTrack;
643+
mTrackIDs[iSector * mNMaxSingleSectorTracks + sectorTr.LocalTrackId()] = myTrack;
646644
mSectorTrackInfos[myTrack] = track;
647645
}
648646
}
@@ -710,7 +708,7 @@ GPUd() void GPUTPCGMMerger::MergeSectorsPrepareStep2(int32_t nBlocks, int32_t nT
710708
if (Param().rec.tpc.mergerCovSource == 2 && trackTmp.X2() != 0.f) {
711709
trackTmp.UseParam2();
712710
} else {
713-
trackTmp.Set(this, trackMin->OrigTrack(), trackMin->Alpha(), trackMin->Sector());
711+
trackTmp.Set(this, *trackMin->OrigTrack(), trackMin->Alpha(), trackMin->Sector());
714712
}
715713
} else {
716714
if (CAMath::Abs(track->QPt()) * Param().qptB5Scaler < Param().rec.tpc.mergerLooperSecondHorizontalQPtB5Limit) {

GPU/GPUTracking/Merger/GPUTPCGMMerger.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class GPUTPCGMMerger : public GPUProcessor
7474
GPUAtomic(uint32_t) nMergedTrackClusters;
7575
GPUAtomic(uint32_t) nO2Tracks;
7676
GPUAtomic(uint32_t) nO2ClusRefs;
77-
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> firstExtrapolatedTracks[NSECTORS];
77+
MemLayout::interface<GPUTPCTrackSkeleton, MemLayout::const_pointer, MemLayout::Flag::aos>::type firstExtrapolatedTracks[NSECTORS];
7878
GPUAtomic(uint32_t) tmpCounter[2 * NSECTORS];
7979
GPUAtomic(uint32_t) nLooperMatchCandidates;
8080
};
@@ -154,8 +154,8 @@ class GPUTPCGMMerger : public GPUProcessor
154154
GPUd() uint16_t MemoryResOutputO2MC() const { return mMemoryResOutputO2MC; }
155155
GPUd() uint16_t MemoryResOutputO2Scratch() const { return mMemoryResOutputO2Scratch; }
156156

157-
GPUd() int32_t RefitSectorTrack(GPUTPCGMSectorTrack& sectorTrack, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> inTrack, float alpha, int32_t sector);
158-
GPUd() void SetTrackClusterZT(GPUTPCGMSectorTrack& track, int32_t iSector, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> sectorTr);
157+
GPUd() int32_t RefitSectorTrack(GPUTPCGMSectorTrack& sectorTrack, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> inTrack, float alpha, int32_t sector);
158+
GPUd() void SetTrackClusterZT(GPUTPCGMSectorTrack& track, int32_t iSector, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> sectorTr);
159159

160160
int32_t CheckSectors();
161161
GPUd() void RefitSectorTracks(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, int32_t iSector);

GPU/GPUTracking/Merger/GPUTPCGMMergerDump.cxx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "GPUTrackingRefit.h"
3838
#include "CorrectionMapsHelper.h"
3939
#include "GPUConstantMem.h"
40+
#include "MemLayout.h"
4041

4142
using namespace o2::gpu;
4243
using namespace gputpcgmmergertypes;
@@ -264,15 +265,15 @@ inline void GPUTPCGMMerger::MergedTrackStreamerInternal(const GPUTPCGMBorderTrac
264265
}
265266
const GPUTPCTracker& tracker1 = GetConstantMem()->tpcTrackers[sector1];
266267
const GPUTPCGMSectorTrack& sectorTrack1 = mSectorTrackInfos[b1.TrackID()];
267-
const GPUTPCTrack& inTrack1 = *sectorTrack1.OrigTrack();
268+
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> inTrack1 = *sectorTrack1.OrigTrack();
268269
for (int32_t i = 0; i < inTrack1.NHits(); i++) {
269270
const GPUTPCHitId& ic1 = tracker1.TrackHits()[inTrack1.FirstHitID() + i];
270271
int32_t clusterIndex = tracker1.Data().ClusterDataIndex(tracker1.Data().Row(ic1.RowIndex()), ic1.HitIndex());
271272
hits1[ic1.RowIndex()] = clusterIndex;
272273
}
273274
const GPUTPCTracker& tracker2 = GetConstantMem()->tpcTrackers[sector2];
274275
const GPUTPCGMSectorTrack& sectorTrack2 = mSectorTrackInfos[b2.TrackID()];
275-
const GPUTPCTrack& inTrack2 = *sectorTrack2.OrigTrack();
276+
MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> inTrack2 = *sectorTrack2.OrigTrack();
276277
for (int32_t i = 0; i < inTrack2.NHits(); i++) {
277278
const GPUTPCHitId& ic2 = tracker2.TrackHits()[inTrack2.FirstHitID() + i];
278279
int32_t clusterIndex = tracker2.Data().ClusterDataIndex(tracker2.Data().Row(ic2.RowIndex()), ic2.HitIndex());

GPU/GPUTracking/Merger/GPUTPCGMSectorTrack.cxx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
using namespace o2::gpu;
2525
using namespace o2::tpc;
2626

27-
GPUd() void GPUTPCGMSectorTrack::Set(const GPUTPCGMMerger* merger, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> sectorTr, float alpha, int32_t sector)
27+
GPUd() void GPUTPCGMSectorTrack::Set(const GPUTPCGMMerger* merger, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> sectorTr, float alpha, int32_t sector)
2828
{
29-
MemLayout::wrapper<GPUTPCBaseTrackParamSkeleton, MemLayout::const_reference> t = sectorTr->Param();
30-
mOrigTrack = sectorTr;
29+
MemLayout::wrapper<GPUTPCBaseTrackParamSkeleton, MemLayout::const_reference> t = sectorTr.Param();
30+
mOrigTrack = &sectorTr;
3131
mParam.mX = t.GetX();
3232
mParam.mY = t.GetY();
3333
mParam.mZ = t.GetZ();
@@ -46,9 +46,9 @@ GPUd() void GPUTPCGMSectorTrack::Set(const GPUTPCGMMerger* merger, MemLayout::wr
4646
mNClusters = sectorTr->NHits();
4747
}
4848

49-
GPUd() void GPUTPCGMSectorTrack::Set(const GPUTPCGMTrackParam& trk, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> sectorTr, float alpha, int32_t sector)
49+
GPUd() void GPUTPCGMSectorTrack::Set(const GPUTPCGMTrackParam& trk, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> sectorTr, float alpha, int32_t sector)
5050
{
51-
mOrigTrack = sectorTr;
51+
mOrigTrack = &sectorTr;
5252
mParam.mX = trk.GetX();
5353
mParam.mY = trk.GetY();
5454
mParam.mZ = trk.GetZ();

GPU/GPUTracking/Merger/GPUTPCGMSectorTrack.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ class GPUTPCGMSectorTrack
7474
mClusterZT[1] = v2;
7575
}
7676

77-
GPUd() void Set(const GPUTPCGMTrackParam& trk, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> sectorTr, float alpha, int32_t sector);
77+
GPUd() void Set(const GPUTPCGMTrackParam& trk, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> sectorTr, float alpha, int32_t sector);
7878
GPUd() void SetParam2(const GPUTPCGMTrackParam& trk);
79-
GPUd() void Set(const GPUTPCGMMerger* merger, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_pointer> sectorTr, float alpha, int32_t sector);
79+
GPUd() void Set(const GPUTPCGMMerger* merger, MemLayout::wrapper<GPUTPCTrackSkeleton, MemLayout::const_reference> sectorTr, float alpha, int32_t sector);
8080
GPUd() void UseParam2() { mParam = mParam2; }
8181
GPUd() void SetX2(float v) { mParam2.mX = v; }
8282
GPUd() float X2() const { return mParam2.mX; }

GPU/GPUTracking/SectorTracker/GPUTPCTracker.cxx

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void GPUTPCTracker::RegisterMemoryAllocation()
109109
}
110110

111111
GPUhd() void GPUTPCTracker::SetPointersTrackletsHelper(void* & mem, GPUTPCTracker::TrackletArrayType<MemLayout::Flag::aos>& tracklets) {
112-
computePointerWithAlignment(mem, tracklets, mNMaxTracklets);
112+
computePointerWithAlignment(mem, tracklets, mNMaxTracklets);
113113
}
114114

115115
GPUhd() void GPUTPCTracker::SetPointersTrackletsHelper(void* & mem, GPUTPCTracker::TrackletArrayType<MemLayout::Flag::soa>& tracklets) {
@@ -132,16 +132,23 @@ GPUhd() void* GPUTPCTracker::SetPointersTracklets(void* mem)
132132
return mem;
133133
}
134134

135+
GPUhd() void GPUTPCTracker::SetPointersTracksHelper(void* & mem, GPUTPCTracker::TrackArrayType<MemLayout::Flag::aos>& tracks) {
136+
computePointerWithAlignment(mem, tracks, mNMaxTracks);
137+
}
138+
139+
GPUhd() void GPUTPCTracker::SetPointersTracksHelper(void* & mem, GPUTPCTracker::TrackArrayType<MemLayout::Flag::soa>& tracks) {
140+
computePointerWithAlignment(mem, tracks.mFirstHitID, mNMaxTracks);
141+
computePointerWithAlignment(mem, tracks.mNHits, mNMaxTracks);
142+
computePointerWithAlignment(mem, tracks.mLocalTrackId, mNMaxTracks);
143+
computePointerWithAlignment(mem, tracks.mParam.mX, mNMaxTracks);
144+
computePointerWithAlignment(mem, tracks.mParam.mC, mNMaxTracks);
145+
computePointerWithAlignment(mem, tracks.mParam.mZOffset, mNMaxTracks);
146+
computePointerWithAlignment(mem, tracks.mParam.mP, mNMaxTracks);
147+
}
148+
135149
GPUhd() void* GPUTPCTracker::SetPointersOutput(void* mem)
136150
{
137-
computePointerWithAlignment(mem, mTracks.mFirstHitID, mNMaxTracklets);
138-
computePointerWithAlignment(mem, mTracks.mNHits, mNMaxTracklets);
139-
computePointerWithAlignment(mem, mTracks.mLocalTrackId, mNMaxTracklets);
140-
computePointerWithAlignment(mem, mTracks.mParam.mX, mNMaxTracklets);
141-
computePointerWithAlignment(mem, mTracks.mParam.mC, mNMaxTracklets);
142-
computePointerWithAlignment(mem, mTracks.mParam.mZOffset, mNMaxTracklets);
143-
computePointerWithAlignment(mem, mTracks.mParam.mP, mNMaxTracklets);
144-
//computePointerWithAlignment(mem, mTracks, mNMaxTracks);
151+
SetPointersTracksHelper(mem, mTracks);
145152
computePointerWithAlignment(mem, mTrackHits, mNMaxTrackHits);
146153
return mem;
147154
}

0 commit comments

Comments
 (0)