Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }  // namespace edm
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  // RecoTracker_PixelSeeding_plugins_CAHitNtupletGeneratorOnGPU_h