15#ifndef GPUCHAINTRACKING_H
16#define GPUCHAINTRACKING_H
34struct ClusterNativeAccess;
36class CalibdEdxContainer;
47class GPUTPCGPUTracker;
48class GPUDisplayInterface;
50class GPUTPCClusterStatistics;
52class TPCFastTransform;
53class GPUTrackingInputProvider;
54struct GPUChainTrackingFinalContext;
55struct GPUTPCCFChainContext;
56struct GPUNewCalibValues;
57struct GPUTriggerOutputs;
67 int32_t
Init()
override;
71 void MemorySize(
size_t& gpuMem,
size_t& pageLockedHostMem)
override;
72 int32_t
CheckErrorCodes(
bool cpuOnly =
false,
bool forceShowErrors =
false, std::vector<std::array<uint32_t, 4>>* fillErrors =
nullptr)
override;
92 std::unique_ptr<GPUTrackingInOutZS::GPUTrackingInOutZSMeta>
tpcZSmeta2;
94 std::unique_ptr<GPUTrackingInOutDigits>
digitMap;
116 std::unique_ptr<o2::dataformats::ConstMCTruthContainerView<o2::MCCompLabel>[]>
tpcDigitMCView;
160 template <
int32_t I,
class T = GPUTRDTracker>
175 void SetTPCFastTransform(std::unique_ptr<TPCFastTransform>&& tpcFastTransform, std::unique_ptr<CorrectionMapsHelper>&& tpcTransformHelper);
176 void SetMatLUT(std::unique_ptr<o2::base::MatLayerCylSet>&& lut);
177 void SetTRDGeometry(std::unique_ptr<o2::trd::GeometryFlat>&& geo);
223 int32_t
ReadEvent(uint32_t iSector, int32_t threadId);
224 void WriteOutput(int32_t iSector, int32_t threadId);
248 std::unique_ptr<GPUQA>
mQA;
259 std::unique_ptr<o2::base::MatLayerCylSet>
mMatLUTU;
289 int32_t RunChainFinalize();
291 int32_t RunTPCTrackingSectors_internal();
292 int32_t RunTPCClusterizer_prepare(
bool restorePointers);
293#ifdef GPUCA_TPC_GEOMETRY_O2
294 std::pair<uint32_t, uint32_t> RunTPCClusterizer_transferZS(int32_t iSector,
const CfFragment& fragment, int32_t lane);
296 std::pair<uint32_t, uint32_t> TPCClusterizerDecodeZSCount(uint32_t iSector,
const CfFragment& fragment);
297 std::pair<uint32_t, uint32_t> TPCClusterizerDecodeZSCountUpdate(uint32_t iSector,
const CfFragment& fragment);
298 void TPCClusterizerEnsureZSOffsets(uint32_t iSector,
const CfFragment& fragment);
303 bool NeedTPCClustersOnGPU();
305 std::mutex mMutexUpdateCalib;
306 std::unique_ptr<GPUChainTrackingFinalContext> mPipelineFinalizationCtx;
308 std::function<
void()> mWaitForFinalInputs;
#define GPUCA_MAX_TRD_TRACKLETS
#define GPUCA_MAX_CLUSTERS
#define GPUCA_MAX_STREAMS
void SetMatLUT(std::unique_ptr< o2::base::MatLayerCylSet > &&lut)
~GPUChainTracking() override
void SetQAFromForeignChain(GPUChainTracking *chain)
std::unique_ptr< o2::base::MatLayerCylSet > mMatLUTU
int32_t ExtrapolationTracking(uint32_t iSector, int32_t threadId, bool synchronizeOutput=true)
const CorrectionMapsHelper * GetTPCTransformHelper() const
const GPUTPCGMMerger & GetTPCMerger() const
int32_t RunTPCCompression()
const o2::base::Propagator * GetDeviceO2Propagator()
std::unique_ptr< o2::tpc::ClusterNativeAccess > mClusterNativeAccess
void SetCalibObjects(const GPUCalibObjects &obj)
void SetTRDGeometry(std::unique_ptr< o2::trd::GeometryFlat > &&geo)
void SetCalibObjects(const GPUCalibObjectsConst &obj)
const o2::base::Propagator * GetO2Propagator() const
std::unique_ptr< TPCFastTransform > mTPCFastTransformMShapeU
void ConvertNativeToClusterDataLegacy()
void ConvertZSFilter(bool zs12bit)
GPUChainTracking * mQAFromForeignChain
void SetO2Propagator(const o2::base::Propagator *prop)
std::unique_ptr< GPUQA > mQA
void ReadSettings(const char *dir="") override
const GPUTPCTracker * GetTPCSectorTrackers() const
GPUTPCTracker * GetTPCSectorTrackers()
std::unique_ptr< CorrectionMapsHelper > mTPCFastTransformHelperU
GPUTrackingFlatObjects mFlatObjectsDevice
int32_t RunTPCClusterizer(bool synchronizeOutput=true)
void PrintMemoryStatistics() override
void SetTRDGeometry(const o2::trd::GeometryFlat *geo)
int32_t RunTPCTrackingSectors()
const GPUTRDGeometry * GetTRDGeometry() const
std::unique_ptr< TPCFastTransform > mTPCFastTransformRefU
void UpdateGPUCalibObjectsPtrs(int32_t stream)
void DumpData(const char *filename)
int32_t RunTPCTrackingMerger(bool synchronizeOutput=true)
std::unique_ptr< GPUTrackingInputProvider > mInputsHost
GPUTPCGMMerger & GetTPCMerger()
void SetMatLUT(const o2::base::MatLayerCylSet *lut)
std::unique_ptr< GPUTPCClusterStatistics > mCompressionStatistics
const o2::base::MatLayerCylSet * GetMatLUT() const
GPUTRDTrackerGPU * GetTRDTrackerGPU()
std::array< GPUOutputControl *, GPUTrackingOutputs::count()> mSubOutputControls
void PrintMemoryRelations()
std::unique_ptr< std::ofstream > mDebugFile
std::unique_ptr< GPUTriggerOutputs > mTriggerBuffer
void ConvertRun2RawToNative()
std::vector< outputQueueEntry > mOutputQueue
void SetUpdateCalibObjects(const GPUCalibObjectsConst &obj, const GPUNewCalibValues &vals)
volatile int32_t mSectorSelectorReady
bool SupportsDoublePipeline() override
bool mUpdateNewCalibObjects
void SetFinalInputCallback(std::function< void()> v)
const GPUSettingsDisplay * GetEventDisplayConfig() const
std::unique_ptr< GPUCalibObjectsConst > mNewCalibObjects
const TPCPadGainCalib * GetTPCPadGainCalib() const
std::unique_ptr< TPCPadGainCalib > mTPCPadGainCalibU
std::unique_ptr< o2::tpc::CalibdEdxContainer > mdEdxCalibContainerU
std::unique_ptr< o2::trd::GeometryFlat > mTRDGeometryU
std::unique_ptr< TPCZSLinkMapping > mTPCZSLinkMappingU
int32_t Finalize() override
int32_t DoTRDGPUTracking(T *externalInstance=nullptr)
GPUTrackingFlatObjects mFlatObjectsShadow
const GPUSettingsDisplay * mConfigDisplay
void RegisterPermanentMemoryAndProcessors() override
void RegisterGPUProcessors() override
const GPUSettingsQA * GetQAConfig() const
void ClearErrorCodes(bool cpuOnly=false)
const GPUQA * GetQA() const
void ConvertZSEncoder(int32_t version)
void MemorySize(size_t &gpuMem, size_t &pageLockedHostMem) override
std::unique_ptr< GPUTPCCFChainContext > mCFContext
void SetTPCFastTransform(std::unique_ptr< TPCFastTransform > &&tpcFastTransform, std::unique_ptr< CorrectionMapsHelper > &&tpcTransformHelper)
void WriteOutput(int32_t iSector, int32_t threadId)
void SetSubOutputControl(int32_t i, GPUOutputControl *v)
int32_t RunTPCDecompression()
int32_t DoQueuedUpdates(int32_t stream, bool updateSlave=true)
std::unique_ptr< GPUNewCalibValues > mNewCalibValues
int32_t CheckErrorCodes(bool cpuOnly=false, bool forceShowErrors=false, std::vector< std::array< uint32_t, 4 > > *fillErrors=nullptr) override
uint32_t mMaxTRDTracklets
std::unique_ptr< TPCFastTransform > mTPCFastTransformU
GPUDisplayInterface * GetEventDisplay()
bool mFractionalQAEnabled
int32_t PrepareEvent() override
int32_t RunChain() override
void PrepareDebugOutput()
void UpdateGPUCalibObjects(int32_t stream, const GPUCalibObjectsConst *ptrMask=nullptr)
int32_t ConvertNativeToClusterData()
int32_t ReadEvent(uint32_t iSector, int32_t threadId)
GPUTrackingInOutPointers & mIOPtrs
struct o2::gpu::GPUChainTracking::InOutMemory mIOMem
int32_t ReadData(const char *filename)
const o2::tpc::CalibdEdxContainer * GetdEdxCalibContainer() const
std::array< int8_t, NSECTORS > mWriteOutputDone
std::unique_ptr< GPUTrackingInputProvider > mInputsShadow
const GPUSettingsQA * mConfigQA
int32_t FinalizePipelinedProcessing() override
bool mTPCSectorScratchOnStack
std::unique_ptr< GPUDisplayInterface > mEventDisplay
const TPCZSLinkMapping * GetTPCZSLinkMapping() const
int32_t ForwardTPCDigits()
void DumpSettings(const char *dir="") override
GPUReconstruction::RecoStep RecoStep
uint32_t DumpData(FILE *fp, const T *const *entries, const S *num, InOutPointerType type)
GPUConstantMem * processors()
GPUReconstructionCPU * mRec
static constexpr int32_t NSECTORS
size_t ReadData(FILE *fp, const T **entries, S *num, std::unique_ptr< T[]> *mem, InOutPointerType type, T **nonConstPtrs=nullptr)
GPUReconstruction * rec()
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
Global TPC definitions and constants.
S< o2::trd::GeometryFlat >::type * trdGeometry
S< o2::tpc::CalibdEdxContainer >::type * dEdxCalibContainer
S< TPCZSLinkMapping >::type * tpcZSLinkMapping
S< TPCPadGainCalib >::type * tpcPadGain
S< o2::base::PropagatorImpl< float > >::type * o2Propagator
S< o2::base::MatLayerCylSet >::type * matLUT
S< CorrectionMapsHelper >::type * fastTransformHelper
char * mTpcTransformMShapeBuffer
char * mTpcTransformBuffer
char * mTpcTransformRefBuffer
void * SetPointersFlatObjects(void *mem)
GPUCalibObjects mCalibObjects
char * mdEdxSplinesBuffer
GPUChainTracking * mChainTracking
std::unique_ptr< o2::tpc::Digit[]> tpcDigits[NSECTORS]
std::unique_ptr< char[]> clusterNativeMC
std::unique_ptr< char[]> tpcCompressedClusters
std::unique_ptr< GPUTPCMCInfo[]> mcInfosTPC
std::unique_ptr< char[]> tpcDigitsMC[NSECTORS]
std::unique_ptr< GPUTRDTrackletWord[]> trdTracklets
std::unique_ptr< o2::dataformats::ConstMCTruthContainerView< o2::MCCompLabel >[]> tpcDigitMCView
std::unique_ptr< GPUTPCMCInfoCol[]> mcInfosTPCCol
std::unique_ptr< GPUTPCGMMergedTrackHit[]> mergedTrackHits
std::unique_ptr< int32_t[]> trdTrackletIdxFirst
std::unique_ptr< GPUTPCGMMergedTrack[]> mergedTracks
std::unique_ptr< AliHLTTPCClusterMCLabel[]> mcLabelsTPC
std::unique_ptr< GPUTPCGMMergedTrackHitXYZ[]> mergedTrackHitsXYZ
InOutMemory(InOutMemory &&)
std::unique_ptr< o2::dataformats::ConstMCTruthContainerView< o2::MCCompLabel > > clusterNativeMCView
std::unique_ptr< GPUTrackingInOutDigits > digitMap
std::unique_ptr< GPUTPCClusterData[]> clusterData[NSECTORS]
std::unique_ptr< o2::tpc::ClusterNative[]> clustersNative
std::unique_ptr< GPUTPCDigitsMCInput > tpcDigitMCMap
InOutMemory & operator=(InOutMemory &&)
std::unique_ptr< float[]> trdTriggerTimes
std::unique_ptr< uint64_t[]> tpcZSpages
std::unique_ptr< GPUTPCTrack[]> sectorTracks[NSECTORS]
std::unique_ptr< GPUTRDSpacePoint[]> trdSpacePoints
std::unique_ptr< GPUTrackingInOutZS > tpcZSmeta
std::unique_ptr< o2::dataformats::ConstMCTruthContainer< o2::MCCompLabel > > clusterNativeMCBuffer
std::unique_ptr< uint8_t[]> trdTrigRecMask
std::unique_ptr< o2::tpc::ClusterNativeAccess > clusterNativeAccess
std::unique_ptr< AliHLTTPCRawCluster[]> rawClusters[NSECTORS]
std::unique_ptr< GPUTPCHitId[]> sectorClusters[NSECTORS]
std::unique_ptr< GPUSettingsTF[]> settingsTF
std::unique_ptr< char[]> tpcZSpagesChar
std::unique_ptr< GPUTRDTrackGPU[]> trdTracks
std::unique_ptr< GPUTrackingInOutZS::GPUTrackingInOutZSMeta > tpcZSmeta2
deviceEvent sector[NSECTORS]
GPUTRDTrackerGPU trdTrackerGPU
GPUTPCTracker tpcTrackers[GPUCA_NSECTORS]
GPUCalibObjectsConst calibObjects
static constexpr size_t count()
std::vector< Cluster > clusters