File indexing completed on 2024-04-06 12:28:33
0001 #ifndef RecoTracker_PixelSeeding_plugins_CAHitNtupletGeneratorOnGPU_h
0002 #define RecoTracker_PixelSeeding_plugins_CAHitNtupletGeneratorOnGPU_h
0003
0004 #include <cuda_runtime.h>
0005
0006 #include "CUDADataFormats/Track/interface/TrackSoAHeterogeneousDevice.h"
0007 #include "CUDADataFormats/Track/interface/TrackSoAHeterogeneousHost.h"
0008
0009 #include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHitSoADevice.h"
0010 #include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHitSoAHost.h"
0011 #include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHitsUtilities.h"
0012 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "FWCore/Utilities/interface/EDGetToken.h"
0015 #include "HeterogeneousCore/CUDAUtilities/interface/SimpleVector.h"
0016
0017 #include "CAHitNtupletGeneratorKernels.h"
0018 #include "GPUCACell.h"
0019 #include "HelixFitOnGPU.h"
0020
0021 namespace edm {
0022 class Event;
0023 class EventSetup;
0024 class ParameterSetDescription;
0025 }
0026
0027 template <typename TrackerTraits>
0028 class CAHitNtupletGeneratorOnGPU {
0029 public:
0030 using HitsView = TrackingRecHitSoAView<TrackerTraits>;
0031 using HitsConstView = TrackingRecHitSoAConstView<TrackerTraits>;
0032 using HitsOnDevice = TrackingRecHitSoADevice<TrackerTraits>;
0033 using HitsOnHost = TrackingRecHitSoAHost<TrackerTraits>;
0034 using hindex_type = typename TrackingRecHitSoA<TrackerTraits>::hindex_type;
0035
0036 using HitToTuple = caStructures::HitToTupleT<TrackerTraits>;
0037 using TupleMultiplicity = caStructures::TupleMultiplicityT<TrackerTraits>;
0038 using OuterHitOfCell = caStructures::OuterHitOfCellT<TrackerTraits>;
0039
0040 using GPUCACell = GPUCACellT<TrackerTraits>;
0041 using TrackSoAHost = TrackSoAHeterogeneousHost<TrackerTraits>;
0042 using TrackSoADevice = TrackSoAHeterogeneousDevice<TrackerTraits>;
0043 using HitContainer = typename TrackSoA<TrackerTraits>::HitContainer;
0044 using Tuple = HitContainer;
0045
0046 using CellNeighborsVector = caStructures::CellNeighborsVectorT<TrackerTraits>;
0047 using CellTracksVector = caStructures::CellTracksVectorT<TrackerTraits>;
0048
0049 using Quality = pixelTrack::Quality;
0050
0051 using QualityCuts = pixelTrack::QualityCutsT<TrackerTraits>;
0052 using Params = caHitNtupletGenerator::ParamsT<TrackerTraits>;
0053 using Counters = caHitNtupletGenerator::Counters;
0054
0055 public:
0056 CAHitNtupletGeneratorOnGPU(const edm::ParameterSet& cfg, edm::ConsumesCollector&& iC)
0057 : CAHitNtupletGeneratorOnGPU(cfg, iC) {}
0058 CAHitNtupletGeneratorOnGPU(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC);
0059
0060 static void fillDescriptions(edm::ParameterSetDescription& desc);
0061 static void fillDescriptionsCommon(edm::ParameterSetDescription& desc);
0062
0063 void beginJob();
0064 void endJob();
0065
0066 TrackSoADevice makeTuplesAsync(HitsOnDevice const& hits_d, float bfield, cudaStream_t stream) const;
0067
0068 TrackSoAHost makeTuples(HitsOnHost const& hits_d, float bfield) const;
0069
0070 private:
0071 void buildDoublets(const HitsConstView& hh, cudaStream_t stream) const;
0072
0073 void hitNtuplets(const HitsConstView& hh, const edm::EventSetup& es, bool useRiemannFit, cudaStream_t cudaStream);
0074
0075 void launchKernels(const HitsConstView& hh, bool useRiemannFit, cudaStream_t cudaStream) const;
0076
0077 Params m_params;
0078
0079 Counters* m_counters = nullptr;
0080 };
0081
0082 #endif