Skip to content

Commit 7d2603a

Browse files
authored
GPU: Parallize track merger resolve kernel. (#3676)
1 parent b56a533 commit 7d2603a

8 files changed

Lines changed: 287 additions & 127 deletions

File tree

GPU/Common/GPUDefGPUParameters.h

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@
4545
#define GPUCA_LB_GPUTPCGMMergerSliceRefit 256
4646
#define GPUCA_LB_GPUTPCGMMergerUnpackResetIds 256
4747
#define GPUCA_LB_GPUTPCGMMergerUnpackGlobal 256
48-
#define GPUCA_LB_GPUTPCGMMergerResolve 256
48+
#define GPUCA_LB_GPUTPCGMMergerResolve_step0 256
49+
#define GPUCA_LB_GPUTPCGMMergerResolve_step1 256
50+
#define GPUCA_LB_GPUTPCGMMergerResolve_step2 256
51+
#define GPUCA_LB_GPUTPCGMMergerResolve_step3 256
4952
#define GPUCA_LB_GPUTPCGMMergerClearLinks 256
5053
#define GPUCA_LB_GPUTPCGMMergerMergeWithinPrepare 256
5154
#define GPUCA_LB_GPUTPCGMMergerMergeSlicesPrepare 256
@@ -90,7 +93,10 @@
9093
#define GPUCA_LB_GPUTPCGMMergerSliceRefit 64
9194
#define GPUCA_LB_GPUTPCGMMergerUnpackResetIds 256
9295
#define GPUCA_LB_GPUTPCGMMergerUnpackGlobal 256
93-
#define GPUCA_LB_GPUTPCGMMergerResolve 256
96+
#define GPUCA_LB_GPUTPCGMMergerResolve_step0 256
97+
#define GPUCA_LB_GPUTPCGMMergerResolve_step1 256
98+
#define GPUCA_LB_GPUTPCGMMergerResolve_step2 256
99+
#define GPUCA_LB_GPUTPCGMMergerResolve_step3 256
94100
#define GPUCA_LB_GPUTPCGMMergerClearLinks 256
95101
#define GPUCA_LB_GPUTPCGMMergerMergeWithinPrepare 256
96102
#define GPUCA_LB_GPUTPCGMMergerMergeSlicesPrepare 256, 2
@@ -186,8 +192,17 @@
186192
#ifndef GPUCA_LB_GPUTPCGMMergerUnpackGlobal
187193
#define GPUCA_LB_GPUTPCGMMergerUnpackGlobal 256
188194
#endif
189-
#ifndef GPUCA_LB_GPUTPCGMMergerResolve
190-
#define GPUCA_LB_GPUTPCGMMergerResolve 256
195+
#ifndef GPUCA_LB_GPUTPCGMMergerResolve_step0
196+
#define GPUCA_LB_GPUTPCGMMergerResolve_step0 256
197+
#endif
198+
#ifndef GPUCA_LB_GPUTPCGMMergerResolve_step1
199+
#define GPUCA_LB_GPUTPCGMMergerResolve_step1 256
200+
#endif
201+
#ifndef GPUCA_LB_GPUTPCGMMergerResolve_step2
202+
#define GPUCA_LB_GPUTPCGMMergerResolve_step2 256
203+
#endif
204+
#ifndef GPUCA_LB_GPUTPCGMMergerResolve_step3
205+
#define GPUCA_LB_GPUTPCGMMergerResolve_step3 256
191206
#endif
192207
#ifndef GPUCA_LB_GPUTPCGMMergerClearLinks
193208
#define GPUCA_LB_GPUTPCGMMergerClearLinks 256

GPU/GPUTracking/Base/GPUReconstructionKernels.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ GPUCA_KRNL_LB((GPUTPCGMMergerUnpackResetIds ), (simple), (, int
3333
GPUCA_KRNL_LB((GPUTPCGMMergerSliceRefit ), (simple), (, int iSlice), (, iSlice))
3434
GPUCA_KRNL_LB((GPUTPCGMMergerUnpackGlobal ), (simple), (, int iSlice), (, iSlice))
3535
GPUCA_KRNL(( GPUTPCGMMergerUnpackSaveNumber ), (simple), (, int id), (, id))
36-
GPUCA_KRNL_LB((GPUTPCGMMergerResolve ), (simple), (, char useOrigTrackParam, char mergeAll), (, useOrigTrackParam, mergeAll))
36+
GPUCA_KRNL_LB((GPUTPCGMMergerResolve, step0 ), (simple), (), ())
37+
GPUCA_KRNL_LB((GPUTPCGMMergerResolve, step1 ), (simple), (), ())
38+
GPUCA_KRNL_LB((GPUTPCGMMergerResolve, step2 ), (simple), (), ())
39+
GPUCA_KRNL_LB((GPUTPCGMMergerResolve, step3 ), (simple), (, char useOrigTrackParam, char mergeAll), (, useOrigTrackParam, mergeAll))
3740
GPUCA_KRNL_LB((GPUTPCGMMergerClearLinks ), (simple), (, char nOutput), (, nOutput))
3841
GPUCA_KRNL_LB((GPUTPCGMMergerMergeWithinPrepare ), (simple), (), ())
3942
GPUCA_KRNL_LB((GPUTPCGMMergerMergeSlicesPrepare ), (simple), (, int border0, int border1, char useOrigTrackParam), (, border0, border1, useOrigTrackParam))

GPU/GPUTracking/Global/GPUChainTracking.cxx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1643,6 +1643,15 @@ void GPUChainTracking::RunTPCTrackingMerger_MergeBorderTracks(char withinSlice,
16431643
mRec->ReturnVolatileDeviceMemory();
16441644
}
16451645

1646+
void GPUChainTracking::RunTPCTrackingMerger_Resolve(char useOrigTrackParam, char mergeAll, GPUReconstruction::krnlDeviceType deviceType)
1647+
{
1648+
runKernel<GPUTPCGMMergerResolve, 0>(GetGridBlk(BlockCount(), 0, deviceType), krnlRunRangeNone, krnlEventNone);
1649+
runKernel<GPUTPCGMMergerResolve, 1>(GetGridBlk(BlockCount(), 0, deviceType), krnlRunRangeNone, krnlEventNone);
1650+
runKernel<GPUTPCGMMergerResolve, 2>(GetGridBlk(BlockCount(), 0, deviceType), krnlRunRangeNone, krnlEventNone);
1651+
// TODO: Determine number of blocks from block size to fully occupy gpu
1652+
runKernel<GPUTPCGMMergerResolve, 3>(GetGridBlk(BlockCount() * 4, 0, deviceType), krnlRunRangeNone, krnlEventNone, useOrigTrackParam, mergeAll);
1653+
}
1654+
16461655
int GPUChainTracking::RunTPCTrackingMerger(bool synchronizeOutput)
16471656
{
16481657
if (GetDeviceProcessingSettings().debugLevel >= 6 && GetDeviceProcessingSettings().comparableDebutOutput && param().rec.mergerReadFromTrackerDirectly) {
@@ -1701,22 +1710,22 @@ int GPUChainTracking::RunTPCTrackingMerger(bool synchronizeOutput)
17011710
runKernel<GPUMemClean16>({1, -WarpSize(), 0, deviceType, RecoStep::TPCMerging}, krnlRunRangeNone, {}, MergerShadowAll.TmpCounter(), NSLICES * sizeof(*MergerShadowAll.TmpCounter()));
17021711
runKernel<GPUTPCGMMergerMergeWithinPrepare>(GetGridBlk(numBlocks, 0, deviceType), krnlRunRangeNone, krnlEventNone);
17031712
RunTPCTrackingMerger_MergeBorderTracks(1, 0, deviceType);
1704-
runKernel<GPUTPCGMMergerResolve>(GetGridBlk(numBlocks, 0, deviceType), krnlRunRangeNone, krnlEventNone, 0, 1);
1713+
RunTPCTrackingMerger_Resolve(0, 1, deviceType);
17051714
DoDebugAndDump(RecoStep::TPCMerging, 0, doGPUall, Merger, &GPUTPCGMMerger::DumpMergedWithinSlices, mDebugFile);
17061715

17071716
runKernel<GPUTPCGMMergerClearLinks>(GetGridBlk(numBlocks, 0, deviceType), krnlRunRangeNone, krnlEventNone, 0);
17081717
runKernel<GPUMemClean16>({1, -WarpSize(), 0, deviceType, RecoStep::TPCMerging}, krnlRunRangeNone, {}, MergerShadowAll.TmpCounter(), 2 * NSLICES * sizeof(*MergerShadowAll.TmpCounter()));
17091718
runKernel<GPUTPCGMMergerMergeSlicesPrepare>(GetGridBlk(std::max(2u, numBlocks), 0, deviceType), krnlRunRangeNone, krnlEventNone, 2, 3, 0);
17101719
RunTPCTrackingMerger_MergeBorderTracks(0, 0, deviceType);
1711-
runKernel<GPUTPCGMMergerResolve>(GetGridBlk(numBlocks, 0, deviceType), krnlRunRangeNone, krnlEventNone, 0, 0);
1720+
RunTPCTrackingMerger_Resolve(0, 1, deviceType);
17121721
runKernel<GPUMemClean16>({1, -WarpSize(), 0, deviceType, RecoStep::TPCMerging}, krnlRunRangeNone, {}, MergerShadowAll.TmpCounter(), 2 * NSLICES * sizeof(*MergerShadowAll.TmpCounter()));
17131722
runKernel<GPUTPCGMMergerMergeSlicesPrepare>(GetGridBlk(std::max(2u, numBlocks), 0, deviceType), krnlRunRangeNone, krnlEventNone, 0, 1, 0);
17141723
RunTPCTrackingMerger_MergeBorderTracks(0, 0, deviceType);
1715-
runKernel<GPUTPCGMMergerResolve>(GetGridBlk(numBlocks, 0, deviceType), krnlRunRangeNone, krnlEventNone, 0, 0);
1724+
RunTPCTrackingMerger_Resolve(0, 1, deviceType);
17161725
runKernel<GPUMemClean16>({1, -WarpSize(), 0, deviceType, RecoStep::TPCMerging}, krnlRunRangeNone, {}, MergerShadowAll.TmpCounter(), 2 * NSLICES * sizeof(*MergerShadowAll.TmpCounter()));
17171726
runKernel<GPUTPCGMMergerMergeSlicesPrepare>(GetGridBlk(std::max(2u, numBlocks), 0, deviceType), krnlRunRangeNone, krnlEventNone, 0, 1, 1);
17181727
RunTPCTrackingMerger_MergeBorderTracks(0, -1, deviceType);
1719-
runKernel<GPUTPCGMMergerResolve>(GetGridBlk(numBlocks, 0, deviceType), krnlRunRangeNone, krnlEventNone, 1, 0);
1728+
RunTPCTrackingMerger_Resolve(0, 1, deviceType);
17201729
DoDebugAndDump(RecoStep::TPCMerging, 0, doGPUall, Merger, &GPUTPCGMMerger::DumpMergedBetweenSlices, mDebugFile);
17211730

17221731
runKernel<GPUMemClean16>({1, -WarpSize(), 0, deviceType, RecoStep::TPCMerging}, krnlRunRangeNone, {}, MergerShadowAll.TmpCounter(), 2 * NSLICES * sizeof(*MergerShadowAll.TmpCounter()));

GPU/GPUTracking/Global/GPUChainTracking.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ class GPUChainTracking : public GPUChain, GPUReconstructionHelpers::helperDelega
250250
void RunTPCClusterizer_compactPeaks(GPUTPCClusterFinder& clusterer, GPUTPCClusterFinder& clustererShadow, int stage, bool doGPU, int lane);
251251
std::pair<unsigned int, unsigned int> TPCClusterizerDecodeZSCount(unsigned int iSlice, unsigned int minTime, unsigned int maxTime);
252252
void RunTPCTrackingMerger_MergeBorderTracks(char withinSlice, char mergeMode, GPUReconstruction::krnlDeviceType deviceType);
253+
void RunTPCTrackingMerger_Resolve(char useOrigTrackParam, char mergeAll, GPUReconstruction::krnlDeviceType deviceType);
253254

254255
std::atomic_flag mLockAtomic = ATOMIC_FLAG_INIT;
255256

0 commit comments

Comments
 (0)