2 // ************************************************************************
3 // This file is property of and copyright by the ALICE HLT Project *
4 // ALICE Experiment at CERN, All rights reserved. *
5 // See cxx source for full Copyright notice *
7 //*************************************************************************
9 #ifndef ALIHLTTPCCATRACKLETCONSTRUCTOR_H
10 #define ALIHLTTPCCATRACKLETCONSTRUCTOR_H
13 #define HLTCA_GPU_USE_INT short
15 #define HLTCA_GPU_USE_INT int
16 #endif //HLTCA_GPUCODE
18 #include "AliHLTTPCCADef.h"
19 #include "AliHLTTPCCAGPUConfig.h"
20 #include "AliHLTTPCCATrackParam.h"
23 * @class AliHLTTPCCATrackletConstructor
26 class AliHLTTPCCATracker;
28 class AliHLTTPCCATrackletConstructor
32 class AliHLTTPCCAThreadMemory
34 friend class AliHLTTPCCATrackletConstructor; //! friend class
36 #if !defined(HLTCA_GPUCODE)
37 AliHLTTPCCAThreadMemory()
38 : fItr( 0 ), fFirstRow( 0 ), fLastRow( 0 ), fStartRow( 0 ), fEndRow( 0 ), fCurrIH( 0 ), fGo( 0 ), fStage( 0 ), fNHits( 0 ), fNMissed( 0 ), fLastY( 0 ), fLastZ( 0 )
39 #ifdef HLTCA_GPU_ALTERNATIVE_SCHEDULER
40 , fIRow(0), fIRowEnd(0)
44 AliHLTTPCCAThreadMemory( const AliHLTTPCCAThreadMemory& /*dummy*/ )
45 : fItr( 0 ), fFirstRow( 0 ), fLastRow( 0 ), fStartRow( 0 ), fEndRow( 0 ), fCurrIH( 0 ), fGo( 0 ), fStage( 0 ), fNHits( 0 ), fNMissed( 0 ), fLastY( 0 ), fLastZ( 0 )
46 #ifdef HLTCA_GPU_ALTERNATIVE_SCHEDULER
47 , fIRow(0), fIRowEnd(0)
50 AliHLTTPCCAThreadMemory& operator=( const AliHLTTPCCAThreadMemory& /*dummy*/ ) { return *this; }
51 #endif //!HLTCA_GPUCODE
54 //WARNING: This data is copied element by element in CopyTrackletTempData. Changes to members of this class must be reflected in CopyTrackletTempData!!!
55 int fItr; // track index
56 int fFirstRow; // first row index
57 int fLastRow; // last row index
58 int fStartRow; // first row index
59 int fEndRow; // first row index
60 int fCurrIH; // indef of the current hit
61 bool fGo; // do fit/searching flag
62 int fStage; // reco stage
63 int fNHits; // n track hits
64 int fNMissed; // n missed hits during search
65 float fLastY; // Y of the last fitted cluster
66 float fLastZ; // Z of the last fitted cluster
67 #if defined(HLTCA_GPU_ALTERNATIVE_SCHEDULER)
68 int fIRow; //current row for alt sched
69 int fIRowEnd; //last row for current alt sched iteration
73 //Structure to store track parameters and temporary thread variables in global memory when rescheduling
74 struct AliHLTTPCCAGPUTempMemory
76 AliHLTTPCCAThreadMemory fThreadMem;// thread memory
77 AliHLTTPCCATrackParam fParam;// parameters
80 class AliHLTTPCCASharedMemory
82 friend class AliHLTTPCCATrackletConstructor; // friend class
84 #if !defined(HLTCA_GPUCODE)
85 AliHLTTPCCASharedMemory()
86 : fNextTrackletFirst(0), fNextTrackletCount(0), fNextTrackletFirstRun(0), fNTracklets(0) {
87 #ifndef HLTCA_GPU_ALTERNATIVE_SCHEDULER
88 for( int i=0; i<HLTCA_GPU_THREAD_COUNT / HLTCA_GPU_WARP_SIZE + 1; i++)fStartRows[i] = 0;
89 for( int i=0; i<HLTCA_GPU_THREAD_COUNT / HLTCA_GPU_WARP_SIZE + 1; i++) fEndRows[i]=0;
93 AliHLTTPCCASharedMemory( const AliHLTTPCCASharedMemory& /*dummy*/ )
94 : fNextTrackletFirst(0), fNextTrackletCount(0), fNextTrackletFirstRun(0), fNTracklets(0) {
95 #ifndef HLTCA_GPU_ALTERNATIVE_SCHEDULER
96 for( int i=0; i<HLTCA_GPU_THREAD_COUNT / HLTCA_GPU_WARP_SIZE + 1; i++)fStartRows[i] = 0;
97 for( int i=0; i<HLTCA_GPU_THREAD_COUNT / HLTCA_GPU_WARP_SIZE + 1; i++) fEndRows[i]=0;
101 AliHLTTPCCASharedMemory& operator=( const AliHLTTPCCASharedMemory& /*dummy*/ ) { return *this; }
102 #endif //HLTCA_GPUCODE
105 AliHLTTPCCARow fRows[HLTCA_ROW_COUNT]; // rows
106 int fNextTrackletFirst; //First tracklet to be processed by CUDA block during next iteration
107 int fNextTrackletCount; //Number of Tracklets to be processed by CUDA block during next iteration
108 int fNextTrackletFirstRun; //First run for dynamic scheduler?
109 //Use IFDEF to save GPU shared memory
110 #ifdef HLTCA_GPU_ALTERNATIVE_SCHEDULER
111 #ifndef HLTCA_GPU_ALTERNATIVE_SCHEDULER_SIMPLE
112 int fTrackletStorePos; //position in temporary storage
113 AliHLTTPCCATrackletConstructor::AliHLTTPCCAGPUTempMemory swapMemory[HLTCA_GPU_ALTSCHED_MIN_THREADS]; //temporary swap space for scheduling
115 #elif defined(HLTCA_GPU_RESCHED)
116 int fNextTrackletStupidDummy; //Shared Dummy variable to access
117 int fStartRows[HLTCA_GPU_THREAD_COUNT / HLTCA_GPU_WARP_SIZE + 1]; // start rows
118 int fEndRows[HLTCA_GPU_THREAD_COUNT / HLTCA_GPU_WARP_SIZE + 1]; // end rows
120 int fNTracklets; // Total number of tracklets
122 #ifdef HLTCA_GPU_TRACKLET_CONSTRUCTOR_DO_PROFILE
123 int fMaxSync; //temporary shared variable during profile creation
124 #endif //HLTCA_GPU_TRACKLET_CONSTRUCTOR_DO_PROFILE
126 int fTrackletStoreCount[2][HLTCA_ROW_COUNT / HLTCA_GPU_SCHED_ROW_STEP + 1];//Number of tracklets to store in tracklet pool for rescheduling
129 GPUd() static void InitTracklet ( AliHLTTPCCATrackParam &tParam );
131 GPUd() static void UpdateTracklet
132 ( int nBlocks, int nThreads, int iBlock, int iThread,
133 AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam, int iRow );
135 GPUd() static void StoreTracklet
136 ( int nBlocks, int nThreads, int iBlock, int iThread,
137 AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam );
139 GPUd() static bool CheckCov(AliHLTTPCCATrackParam &tParam);
142 GPUd() static void AliHLTTPCCATrackletConstructorGPU(AliHLTTPCCATracker *pTracker);
143 GPUd() static void AliHLTTPCCATrackletConstructorGPUPP(AliHLTTPCCATracker *pTracker);
144 #ifndef HLTCA_GPU_ALTERNATIVE_SCHEDULER
145 GPUd() static int FetchTracklet(AliHLTTPCCATracker &tracker, AliHLTTPCCASharedMemory &sMem, int Reverse, int RowBlock, int &mustInit);
146 GPUd() static void AliHLTTPCCATrackletConstructorInit(int iTracklet, AliHLTTPCCATracker &tracke);
148 GPUd() static int FetchTracklet(AliHLTTPCCATracker &tracker, AliHLTTPCCASharedMemory &sMem, AliHLTTPCCAThreadMemory &rMem, AliHLTTPCCATrackParam &tParam);
150 GPUd() static void CopyTrackletTempData( AliHLTTPCCAThreadMemory &rMemSrc, AliHLTTPCCAThreadMemory &rMemDst, AliHLTTPCCATrackParam &tParamSrc, AliHLTTPCCATrackParam &tParamDst);
152 GPUd() static void AliHLTTPCCATrackletConstructorCPU(AliHLTTPCCATracker &tracker);
153 GPUd() static int AliHLTTPCCATrackletConstructorGlobalTracking(AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam& tParam, int startrow, int increment);
154 #endif //HLTCA_GPUCODE
156 GPUd() static bool SAVE() { return 1; }
159 #endif //ALIHLTTPCCATRACKLETCONSTRUCTOR_H