@@ -476,7 +476,7 @@ GPUdic(2, 1) void GPUTPCTrackletConstructor::DoTracklet(GPUconstantref() GPUTPCT
476476}
477477
478478template <>
479- GPUdii () void GPUTPCTrackletConstructor::Thread<GPUTPCTrackletConstructor::singleSector> (int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUsharedref () GPUSharedMemory& sMem , processorType& GPUrestrict () tracker)
479+ GPUdii () void GPUTPCTrackletConstructor::Thread (int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUsharedref () GPUSharedMemory& sMem , processorType& GPUrestrict () tracker)
480480{
481481 if (get_local_id (0 ) == 0 ) {
482482 sMem .mNStartHits = *tracker.NStartHits();
@@ -491,79 +491,6 @@ GPUdii() void GPUTPCTrackletConstructor::Thread<GPUTPCTrackletConstructor::singl
491491 }
492492}
493493
494- template <>
495- GPUdii () void GPUTPCTrackletConstructor::Thread<GPUTPCTrackletConstructor::allSectors>(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUsharedref () GPUSharedMemory& sMem , processorType& GPUrestrict () tracker0)
496- {
497- GPUconstantref () GPUTPCTracker* GPUrestrict () pTracker = &tracker0;
498- #ifdef GPUCA_GPUCODE
499- int32_t mySector = get_group_id (0 ) % GPUCA_NSECTORS;
500- int32_t currentSector = -1 ;
501-
502- if (get_local_id (0 ) == 0 ) {
503- sMem .mNextStartHitFirstRun = 1 ;
504- }
505- GPUCA_UNROLL (, U ())
506- for (uint32_t iSector = 0 ; iSector < GPUCA_NSECTORS; iSector++) {
507- GPUconstantref () GPUTPCTracker& GPUrestrict () tracker = pTracker[mySector];
508-
509- GPUTPCThreadMemory rMem;
510-
511- while ((rMem.mISH = FetchTracklet (tracker, sMem )) != -2 ) {
512- if (rMem.mISH >= 0 && get_local_id (0 ) < GPUCA_GET_THREAD_COUNT (GPUCA_LB_GPUTPCTrackletConstructor)) {
513- rMem.mISH += get_local_id (0 );
514- } else {
515- rMem.mISH = -1 ;
516- }
517-
518- if (mySector != currentSector) {
519- if (get_local_id (0 ) == 0 ) {
520- sMem .mNStartHits = *tracker.NStartHits();
521- }
522- CA_SHARED_CACHE (&sMem .mRows [0 ], tracker.TrackingDataRows (), GPUCA_ROW_COUNT * sizeof (GPUTPCRow));
523- GPUbarrier ();
524- currentSector = mySector;
525- }
526-
527- if (rMem.mISH >= 0 && rMem.mISH < sMem .mNStartHits ) {
528- rMem.mGo = true ;
529- DoTracklet (tracker, sMem , rMem);
530- }
531- }
532- if (++mySector >= GPUCA_NSECTORS) {
533- mySector = 0 ;
534- }
535- }
536- #else
537- for (int32_t iSector = 0 ; iSector < GPUCA_NSECTORS; iSector++) {
538- Thread<singleSector>(nBlocks, nThreads, iBlock, iThread, sMem , pTracker[iSector]);
539- }
540- #endif
541- }
542-
543- #ifdef GPUCA_GPUCODE
544-
545- GPUd () int32_t GPUTPCTrackletConstructor::FetchTracklet (GPUconstantref () GPUTPCTracker& GPUrestrict () tracker, GPUsharedref () GPUSharedMemory& sMem )
546- {
547- const uint32_t nStartHit = *tracker.NStartHits();
548- GPUbarrier ();
549- if (get_local_id (0 ) == 0 ) {
550- int32_t firstStartHit = -2 ;
551- if (sMem .mNextStartHitFirstRun == 1 ) {
552- firstStartHit = (get_group_id (0 ) - tracker.ISector ()) / GPUCA_NSECTORS * GPUCA_GET_THREAD_COUNT (GPUCA_LB_GPUTPCTrackletConstructor);
553- sMem .mNextStartHitFirstRun = 0 ;
554- } else {
555- if (tracker.GPUParameters ()->nextStartHit < nStartHit) {
556- firstStartHit = CAMath::AtomicAdd<uint32_t >(&tracker.GPUParameters ()->nextStartHit , GPUCA_GET_THREAD_COUNT (GPUCA_LB_GPUTPCTrackletConstructor));
557- }
558- }
559- sMem .mNextStartHitFirst = firstStartHit < (int32_t )nStartHit ? firstStartHit : -2 ;
560- }
561- GPUbarrier ();
562- return (sMem .mNextStartHitFirst );
563- }
564-
565- #endif // GPUCA_GPUCODE
566-
567494template <> // FIXME: GPUgeneric() needed to make the clang spirv output link correctly
568495GPUd () int32_t GPUTPCTrackletConstructor::GPUTPCTrackletConstructorExtrapolationTracking<GPUgeneric () GPUTPCExtrapolationTracking::GPUSharedMemory>(GPUconstantref () GPUTPCTracker& GPUrestrict () tracker, GPUsharedref () GPUTPCExtrapolationTracking::GPUSharedMemory& sMem , GPUTPCTrackParam& GPUrestrict () tParam, int32_t row, int32_t increment, int32_t iTracklet, calink* rowHits)
569496{
0 commit comments