]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/TPCLib/tracking-ca/AliHLTTPCCATrackletConstructor.h
coverity 17742 fixed
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCATrackletConstructor.h
CommitLineData
00d07bcd 1//-*- Mode: C++ -*-
ce565086 2// ************************************************************************
fbb9b71b 3// This file is property of and copyright by the ALICE HLT Project *
ce565086 4// ALICE Experiment at CERN, All rights reserved. *
5// See cxx source for full Copyright notice *
6// *
7//*************************************************************************
00d07bcd 8
9#ifndef ALIHLTTPCCATRACKLETCONSTRUCTOR_H
10#define ALIHLTTPCCATRACKLETCONSTRUCTOR_H
11
b22af1bf 12#ifdef HLTCA_GPUCODE
13#define HLTCA_GPU_USE_INT short
14#else
15#define HLTCA_GPU_USE_INT int
31649d4b 16#endif //HLTCA_GPUCODE
00d07bcd 17
18#include "AliHLTTPCCADef.h"
b22af1bf 19#include "AliHLTTPCCAGPUConfig.h"
20#include "AliHLTTPCCATrackParam.h"
00d07bcd 21
22/**
23 * @class AliHLTTPCCATrackletConstructor
fbb9b71b 24 *
00d07bcd 25 */
b22af1bf 26class AliHLTTPCCATracker;
27
00d07bcd 28class AliHLTTPCCATrackletConstructor
29{
fbb9b71b 30 public:
00d07bcd 31
fbb9b71b 32 class AliHLTTPCCAThreadMemory
00d07bcd 33 {
e26f1a08 34 friend class AliHLTTPCCATrackletConstructor; //! friend class
fbb9b71b 35 public:
00d07bcd 36#if !defined(HLTCA_GPUCODE)
fbb9b71b 37 AliHLTTPCCAThreadMemory()
2fba026d 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)
41#endif
42 {}
fbb9b71b 43
44 AliHLTTPCCAThreadMemory( const AliHLTTPCCAThreadMemory& /*dummy*/ )
2fba026d 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)
48#endif
49 {}
fbb9b71b 50 AliHLTTPCCAThreadMemory& operator=( const AliHLTTPCCAThreadMemory& /*dummy*/ ) { return *this; }
31649d4b 51#endif //!HLTCA_GPUCODE
7be9b0d7 52
fbb9b71b 53 protected:
2fba026d 54 //WARNING: This data is copied element by element in CopyTrackletTempData. Changes to members of this class must be reflected in CopyTrackletTempData!!!
fbb9b71b 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
fbb9b71b 61 bool fGo; // do fit/searching flag
fbb9b71b 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
2fba026d 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
70#endif
00d07bcd 71 };
72
1e63725a 73 //Structure to store track parameters and temporary thread variables in global memory when rescheduling
b22af1bf 74 struct AliHLTTPCCAGPUTempMemory
75 {
e26f1a08 76 AliHLTTPCCAThreadMemory fThreadMem;// thread memory
77 AliHLTTPCCATrackParam fParam;// parameters
b22af1bf 78 };
2fba026d 79
80 class AliHLTTPCCASharedMemory
81 {
82 friend class AliHLTTPCCATrackletConstructor; // friend class
83 public:
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;
90#endif
91 }
92
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;
98#endif
99 }
100
101 AliHLTTPCCASharedMemory& operator=( const AliHLTTPCCASharedMemory& /*dummy*/ ) { return *this; }
102#endif //HLTCA_GPUCODE
103
104 protected:
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
114#endif
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
119#endif
120 int fNTracklets; // Total number of tracklets
121
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
125
126 int fTrackletStoreCount[2][HLTCA_ROW_COUNT / HLTCA_GPU_SCHED_ROW_STEP + 1];//Number of tracklets to store in tracklet pool for rescheduling
127 };
fbb9b71b 128
b22af1bf 129 GPUd() static void InitTracklet ( AliHLTTPCCATrackParam &tParam );
00d07bcd 130
fbb9b71b 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 );
134
135 GPUd() static void StoreTracklet
136 ( int nBlocks, int nThreads, int iBlock, int iThread,
137 AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam );
00d07bcd 138
e4818148 139 GPUd() static bool CheckCov(AliHLTTPCCATrackParam &tParam);
140
b22af1bf 141#ifdef HLTCA_GPUCODE
f0bada7f 142 GPUd() static void AliHLTTPCCATrackletConstructorGPU(AliHLTTPCCATracker *pTracker);
143 GPUd() static void AliHLTTPCCATrackletConstructorGPUPP(AliHLTTPCCATracker *pTracker);
2fba026d 144#ifndef HLTCA_GPU_ALTERNATIVE_SCHEDULER
b22af1bf 145 GPUd() static int FetchTracklet(AliHLTTPCCATracker &tracker, AliHLTTPCCASharedMemory &sMem, int Reverse, int RowBlock, int &mustInit);
146 GPUd() static void AliHLTTPCCATrackletConstructorInit(int iTracklet, AliHLTTPCCATracker &tracke);
2fba026d 147#else
148 GPUd() static int FetchTracklet(AliHLTTPCCATracker &tracker, AliHLTTPCCASharedMemory &sMem, AliHLTTPCCAThreadMemory &rMem, AliHLTTPCCATrackParam &tParam);
149#endif
b22af1bf 150 GPUd() static void CopyTrackletTempData( AliHLTTPCCAThreadMemory &rMemSrc, AliHLTTPCCAThreadMemory &rMemDst, AliHLTTPCCATrackParam &tParamSrc, AliHLTTPCCATrackParam &tParamDst);
151#else
f0bada7f 152 GPUd() static void AliHLTTPCCATrackletConstructorCPU(AliHLTTPCCATracker &tracker);
e4818148 153 GPUd() static int AliHLTTPCCATrackletConstructorGlobalTracking(AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam& tParam, int startrow, int increment);
31649d4b 154#endif //HLTCA_GPUCODE
b22af1bf 155
fbb9b71b 156 GPUd() static bool SAVE() { return 1; }
00d07bcd 157};
158
31649d4b 159#endif //ALIHLTTPCCATRACKLETCONSTRUCTOR_H