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 AliHLTTPCCASharedMemory
34 friend class AliHLTTPCCATrackletConstructor;
36 #if !defined(HLTCA_GPUCODE)
37 AliHLTTPCCASharedMemory()
38 : fNextTrackletFirst(0), fNextTrackletCount(0), fNextTrackletNoDummy(0), fNextTrackletStupidDummy(0), fNextTrackletFirstRun(0), fNTracklets(0), fSliceDone(0) {}
40 AliHLTTPCCASharedMemory( const AliHLTTPCCASharedMemory& /*dummy*/ )
41 : fNextTrackletFirst(0), fNextTrackletCount(0), fNextTrackletNoDummy(0), fNextTrackletStupidDummy(0), fNextTrackletFirstRun(0), fNTracklets(0), fSliceDone(0) {}
42 AliHLTTPCCASharedMemory& operator=( const AliHLTTPCCASharedMemory& /*dummy*/ ) { return *this; }
43 #endif //HLTCA_GPUCODE
46 #ifdef HLTCA_GPU_PREFETCHDATA
47 uint4 fData[2][ALIHLTTPCCATRACKLET_CONSTRUCTOR_TEMP_MEM / 4]; // temp memory
48 AliHLTTPCCARow fRow[2]; // row
50 AliHLTTPCCARow fRows[HLTCA_ROW_COUNT];
51 #endif //HLTCA_GPU_PREFETCHDATA
52 int fNextTrackletFirst;
53 int fNextTrackletCount;
54 int fNextTrackletNoDummy;
55 int fNextTrackletStupidDummy;
56 int fNextTrackletFirstRun;
60 #ifdef HLTCA_GPU_TRACKLET_CONSTRUCTOR_DO_PROFILE
62 #endif //HLTCA_GPU_TRACKLET_CONSTRUCTOR_DO_PROFILE
64 int fTrackletStoreCount[2][HLTCA_ROW_COUNT / HLTCA_GPU_SCHED_ROW_STEP + 1];
67 class AliHLTTPCCAThreadMemory
69 friend class AliHLTTPCCATrackletConstructor;
71 #if !defined(HLTCA_GPUCODE)
72 AliHLTTPCCAThreadMemory()
73 : fItr( 0 ), fFirstRow( 0 ), fLastRow( 0 ), fStartRow( 0 ), fEndRow( 0 ), fCurrIH( 0 ), fGo( 0 ), fCurrentData( 0 ), fStage( 0 ), fNHits( 0 ), fNMissed( 0 ), fLastY( 0 ), fLastZ( 0 ) {}
75 AliHLTTPCCAThreadMemory( const AliHLTTPCCAThreadMemory& /*dummy*/ )
76 : fItr( 0 ), fFirstRow( 0 ), fLastRow( 0 ), fStartRow( 0 ), fEndRow( 0 ), fCurrIH( 0 ), fGo( 0 ), fCurrentData( 0 ), fStage( 0 ), fNHits( 0 ), fNMissed( 0 ), fLastY( 0 ), fLastZ( 0 ) {}
77 AliHLTTPCCAThreadMemory& operator=( const AliHLTTPCCAThreadMemory& /*dummy*/ ) { return *this; }
78 #endif //!HLTCA_GPUCODE
81 int fItr; // track index
82 int fFirstRow; // first row index
83 int fLastRow; // last row index
84 int fStartRow; // first row index
85 int fEndRow; // first row index
86 int fCurrIH; // indef of the current hit
87 bool fGo; // do fit/searching flag
88 bool fCurrentData; // index of the current memory array
89 int fStage; // reco stage
90 int fNHits; // n track hits
91 int fNMissed; // n missed hits during search
92 float fLastY; // Y of the last fitted cluster
93 float fLastZ; // Z of the last fitted cluster
96 struct AliHLTTPCCAGPUTempMemory
98 AliHLTTPCCAThreadMemory fThreadMem;
99 AliHLTTPCCATrackParam fParam;
102 GPUd() static void InitTracklet ( AliHLTTPCCATrackParam &tParam );
104 GPUd() static void ReadData( int iThread, AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, int iRow );
106 GPUd() static void UpdateTracklet
107 ( int nBlocks, int nThreads, int iBlock, int iThread,
108 AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam, int iRow );
110 GPUd() static void StoreTracklet
111 ( int nBlocks, int nThreads, int iBlock, int iThread,
112 AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam );
115 GPUd() static void AliHLTTPCCATrackletConstructorNewGPU(AliHLTTPCCATracker *pTracker);
116 GPUd() static int FetchTracklet(AliHLTTPCCATracker &tracker, AliHLTTPCCASharedMemory &sMem, int Reverse, int RowBlock, int &mustInit);
117 GPUd() static void AliHLTTPCCATrackletConstructorInit(int iTracklet, AliHLTTPCCATracker &tracke);
118 GPUd() static void CopyTrackletTempData( AliHLTTPCCAThreadMemory &rMemSrc, AliHLTTPCCAThreadMemory &rMemDst, AliHLTTPCCATrackParam &tParamSrc, AliHLTTPCCATrackParam &tParamDst);
120 GPUd() static void AliHLTTPCCATrackletConstructorNewCPU(AliHLTTPCCATracker &tracker);
121 #endif //HLTCA_GPUCODE
123 GPUd() static bool SAVE() { return 1; }
125 #if defined(HLTCA_GPUCODE)
126 //GPUhd() inline int NMemThreads() { return 128; }
127 #define TRACKLET_CONSTRUCTOR_NMEMTHREDS HLTCA_GPU_TRACKLET_CONSTRUCTOR_NMEMTHREDS
129 //GPUhd() inline int NMemThreads() { return 1; }
130 #define TRACKLET_CONSTRUCTOR_NMEMTHREDS 1
131 #endif //!HLTCA_GPUCODE
135 #endif //ALIHLTTPCCATRACKLETCONSTRUCTOR_H