]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TPCLib/tracking-ca/AliHLTTPCCATrackletConstructor.h
When Pt is bad defined (ex. no field), the multiple scattering effect is calculated...
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCATrackletConstructor.h
index 2df55b286205e6564500abf45664cb145da51dda..dfd272c8892b4de8e9f39fd748439e56a4f46d72 100644 (file)
@@ -9,13 +9,22 @@
 #ifndef ALIHLTTPCCATRACKLETCONSTRUCTOR_H
 #define ALIHLTTPCCATRACKLETCONSTRUCTOR_H
 
+#ifdef HLTCA_GPUCODE
+#define HLTCA_GPU_USE_INT short
+#else
+#define HLTCA_GPU_USE_INT int
+#endif
 
 #include "AliHLTTPCCADef.h"
+#include "AliHLTTPCCAGPUConfig.h"
+#include "AliHLTTPCCATrackParam.h"
 
 /**
  * @class AliHLTTPCCATrackletConstructor
  *
  */
+class AliHLTTPCCATracker;
+
 class AliHLTTPCCATrackletConstructor
 {
   public:
@@ -26,24 +35,33 @@ class AliHLTTPCCATrackletConstructor
       public:
 #if !defined(HLTCA_GPUCODE)
         AliHLTTPCCASharedMemory()
-            : fItr0( 0 ), fItr1( 0 ), fNRows( 0 ), fMinStartRow( 0 ), fMaxEndRow( 0 ) {}
+                       : fNextTrackletFirst(0), fNextTrackletCount(0), fNextTrackletNoDummy(0), fNextTrackletStupidDummy(0), fNextTrackletFirstRun(0), fNTracklets(0), fSliceDone(0) {}
 
         AliHLTTPCCASharedMemory( const AliHLTTPCCASharedMemory& /*dummy*/ )
-            : fItr0( 0 ), fItr1( 0 ), fNRows( 0 ), fMinStartRow( 0 ), fMaxEndRow( 0 ) {}
+                       : fNextTrackletFirst(0), fNextTrackletCount(0), fNextTrackletNoDummy(0), fNextTrackletStupidDummy(0), fNextTrackletFirstRun(0), fNTracklets(0), fSliceDone(0) {}
         AliHLTTPCCASharedMemory& operator=( const AliHLTTPCCASharedMemory& /*dummy*/ ) { return *this; }
 #endif
 
-#ifndef CUDA_DEVICE_EMULATION
       protected:
+#ifdef HLTCA_GPU_PREFETCHDATA
+        uint4 fData[2][ALIHLTTPCCATRACKLET_CONSTRUCTOR_TEMP_MEM / 4]; // temp memory
+               AliHLTTPCCARow fRow[2]; // row
+#else
+               AliHLTTPCCARow fRows[HLTCA_ROW_COUNT];
+#endif
+               int fNextTrackletFirst;
+               int fNextTrackletCount;
+               int fNextTrackletNoDummy;
+               int fNextTrackletStupidDummy;
+               int fNextTrackletFirstRun;
+               int fNTracklets;
+               int fSliceDone;
+
+#ifdef HLTCA_GPU_TRACKLET_CONSTRUCTOR_DO_PROFILE
+               int fMaxSync;
 #endif
 
-        uint4 fData[2][( ALIHLTTPCCATRACKLET_CONSTRUCTOR_TEMP_MEM+ALIHLTTPCCATRACKLET_CONSTRUCTOR_TEMP_MEM+ALIHLTTPCCATRACKLET_CONSTRUCTOR_TEMP_MEM )/4]; // temp memory
-        int fItr0; // start track index
-        int fItr1; // end track index
-        int fNRows; // n rows
-        int fMinStartRow; // min start row
-        int fMinStartRow32[32]; // min start row for each thread in warp
-        int fMaxEndRow; // max start row
+               int fTrackletStoreCount[2][HLTCA_ROW_COUNT / HLTCA_GPU_SCHED_ROW_STEP + 1];
     };
 
     class  AliHLTTPCCAThreadMemory
@@ -52,25 +70,21 @@ class AliHLTTPCCATrackletConstructor
       public:
 #if !defined(HLTCA_GPUCODE)
         AliHLTTPCCAThreadMemory()
-            : fItr( 0 ), fFirstRow( 0 ), fLastRow( 0 ), fStartRow( 0 ), fEndRow( 0 ), fCurrIH( 0 ), fIsMemThread( 0 ), fGo( 0 ), fSave( 0 ), fCurrentData( 0 ), fStage( 0 ), fNHits( 0 ), fNMissed( 0 ), fLastY( 0 ), fLastZ( 0 ) {}
+            : 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 ) {}
 
         AliHLTTPCCAThreadMemory( const AliHLTTPCCAThreadMemory& /*dummy*/ )
-            : fItr( 0 ), fFirstRow( 0 ), fLastRow( 0 ), fStartRow( 0 ), fEndRow( 0 ), fCurrIH( 0 ), fIsMemThread( 0 ), fGo( 0 ), fSave( 0 ), fCurrentData( 0 ), fStage( 0 ), fNHits( 0 ), fNMissed( 0 ), fLastY( 0 ), fLastZ( 0 ) {}
+            : 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 ) {}
         AliHLTTPCCAThreadMemory& operator=( const AliHLTTPCCAThreadMemory& /*dummy*/ ) { return *this; }
 #endif
 
-#ifndef CUDA_DEVICE_EMULATION
       protected:
-#endif
         int fItr; // track index
         int fFirstRow;  // first row index
         int fLastRow; // last row index
         int fStartRow;  // first row index
         int fEndRow;  // first row index
         int fCurrIH; // indef of the current hit
-        bool fIsMemThread; // is the thread used for memory taken
         bool fGo; // do fit/searching flag
-        bool fSave; // save flag
         bool fCurrentData; // index of the current memory array
         int fStage; // reco stage
         int fNHits; // n track hits
@@ -79,21 +93,13 @@ class AliHLTTPCCATrackletConstructor
         float fLastZ; // Z of the last fitted cluster
     };
 
-    GPUd() static int NThreadSyncPoints() { return 4 + 159*2 + 1 + 1; }
+       struct AliHLTTPCCAGPUTempMemory
+       {
+               AliHLTTPCCAThreadMemory fThreadMem;
+               AliHLTTPCCATrackParam fParam;
+       };
 
-    GPUd() static void Thread( int nBlocks, int nThreads, int iBlock, int iThread,
-                               int iSync, AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r,
-                               AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam );
-
-    GPUd() static void Step0
-    ( int nBlocks, int nThreads, int iBlock, int iThread,
-      AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam );
-    GPUd() static void Step1
-    ( int nBlocks, int nThreads, int iBlock, int iThread,
-      AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam );
-    GPUd() static void Step2
-    ( int nBlocks, int nThreads, int iBlock, int iThread,
-      AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam );
+       GPUd() static void InitTracklet ( AliHLTTPCCATrackParam &tParam );
 
     GPUd() static void ReadData( int iThread, AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, int iRow );
 
@@ -105,11 +111,20 @@ class AliHLTTPCCATrackletConstructor
     ( int nBlocks, int nThreads, int iBlock, int iThread,
       AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam );
 
+#ifdef HLTCA_GPUCODE
+       GPUd() static void AliHLTTPCCATrackletConstructorNewGPU(AliHLTTPCCATracker *pTracker);
+       GPUd() static int FetchTracklet(AliHLTTPCCATracker &tracker, AliHLTTPCCASharedMemory &sMem, int Reverse, int RowBlock, int &mustInit);
+       GPUd() static void AliHLTTPCCATrackletConstructorInit(int iTracklet, AliHLTTPCCATracker &tracke);
+       GPUd() static void CopyTrackletTempData( AliHLTTPCCAThreadMemory &rMemSrc, AliHLTTPCCAThreadMemory &rMemDst, AliHLTTPCCATrackParam &tParamSrc, AliHLTTPCCATrackParam &tParamDst);
+#else
+       GPUd() static void AliHLTTPCCATrackletConstructorNewCPU(AliHLTTPCCATracker &tracker);
+#endif
+
     GPUd() static bool SAVE() { return 1; }
 
 #if defined(HLTCA_GPUCODE)
     //GPUhd() inline int NMemThreads() { return 128; }
-#define TRACKLET_CONSTRUCTOR_NMEMTHREDS 128
+#define TRACKLET_CONSTRUCTOR_NMEMTHREDS HLTCA_GPU_TRACKLET_CONSTRUCTOR_NMEMTHREDS
 #else
     //GPUhd() inline int NMemThreads() { return 1; }
 #define TRACKLET_CONSTRUCTOR_NMEMTHREDS 1
@@ -118,4 +133,5 @@ class AliHLTTPCCATrackletConstructor
 };
 
 
+
 #endif