Project
Loading...
Searching...
No Matches
GPUTPCCFClusterizer.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15#ifndef O2_GPU_CLUSTERIZER_H
16#define O2_GPU_CLUSTERIZER_H
17
18#include "clusterFinderDefs.h"
19#include "GPUGeneralKernels.h"
20#include "GPUConstantMem.h"
21#include "GPUTPCClusterFinder.h"
22#include "Array2D.h"
23#include "PackedCharge.h"
24
25namespace o2::tpc
26{
27struct ClusterNative;
28} // namespace o2::tpc
29
30namespace o2::gpu
31{
32
33class ClusterAccumulator;
34class MCLabelAccumulator;
35
37{
38 public:
39 static constexpr size_t SCRATCH_PAD_WORK_GROUP_SIZE = GPUCA_GET_THREAD_COUNT(GPUCA_LB_GPUTPCCFClusterizer);
45
48 {
49 return processors.tpcClusterer;
50 }
51
52 GPUhdi() constexpr static GPUDataTypes::RecoStep GetRecoStep()
53 {
54 return GPUDataTypes::RecoStep::TPCClusterFinding;
55 }
56
57 template <int32_t iKernel = defaultKernel>
59
60 static GPUd() void computeClustersImpl(int32_t, int32_t, int32_t, int32_t, processorType&, const CfFragment&, GPUSharedMemory&, const Array2D<PackedCharge>&, const ChargePos*, const GPUSettingsRec&, MCLabelAccumulator*, uint32_t, uint32_t, uint32_t*, tpc::ClusterNative*, uint32_t*);
61
62 private:
63 static GPUd() void updateClusterInner(const GPUSettingsRec&, uint16_t, uint16_t, const PackedCharge*, const ChargePos&, ClusterAccumulator*, MCLabelAccumulator*, uint8_t*);
64
65 static GPUd() void updateClusterOuter(uint16_t, uint16_t, uint16_t, uint16_t, const PackedCharge*, const ChargePos&, ClusterAccumulator*, MCLabelAccumulator*);
66
67 static GPUd() void buildCluster(const GPUSettingsRec&, const Array2D<PackedCharge>&, ChargePos, ChargePos*, PackedCharge*, uint8_t*, ClusterAccumulator*, MCLabelAccumulator*);
68
69 static GPUd() uint32_t sortIntoBuckets(processorType&, const tpc::ClusterNative&, uint32_t, uint32_t, uint32_t*, tpc::ClusterNative*);
70};
71
72} // namespace o2::gpu
73
74#endif
#define GPUCA_GET_THREAD_COUNT(...)
int32_t int32_t int32_t processorType & processors
int32_t int32_t int32_t GPUSharedMemory & smem
int32_t int32_t int32_t GPUSharedMemory processorType & clusterer
GPUd() static void Thread(int32_t nBlocks
static processorType const CfFragment GPUSharedMemory const Array2D< PackedCharge > const ChargePos const GPUSettingsRec MCLabelAccumulator uint32_t
int32_t int32_t int32_t iThread
GPUhdi() const expr static GPUDataTypes
GPUhdi() static processorType *Processor(GPUConstantMem &processors)
static constexpr size_t SCRATCH_PAD_WORK_GROUP_SIZE
int32_t int32_t int32_t GPUSharedMemory processorType int8_t
#define SCRATCH_PAD_BUILD_N
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition glcorearb.h:2514
Global TPC definitions and constants.
Definition SimTraits.h:167
uint8_t innerAboveThreshold[SCRATCH_PAD_WORK_GROUP_SIZE]
ChargePos posBcast[SCRATCH_PAD_WORK_GROUP_SIZE]