Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:03:46

0001 #ifndef CUDADataFormats_RecHits_TrackingRecHitsHost_h
0002 #define CUDADataFormats_RecHits_TrackingRecHitsHost_h
0003 
0004 #include <cstdint>
0005 
0006 #include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHitsUtilities.h"
0007 #include "CUDADataFormats/Common/interface/PortableHostCollection.h"
0008 #include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h"
0009 #include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h"
0010 
0011 template <typename TrackerTraits>
0012 class TrackingRecHitSoAHost : public cms::cuda::PortableHostCollection<TrackingRecHitLayout<TrackerTraits>> {
0013 public:
0014   using hitSoA = TrackingRecHitSoA<TrackerTraits>;
0015   //Need to decorate the class with the inherited portable accessors being now a template
0016   using cms::cuda::PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::view;
0017   using cms::cuda::PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::const_view;
0018   using cms::cuda::PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::buffer;
0019   using cms::cuda::PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::bufferSize;
0020 
0021   TrackingRecHitSoAHost() = default;
0022 
0023   using AverageGeometry = typename hitSoA::AverageGeometry;
0024   using ParamsOnGPU = typename hitSoA::ParamsOnGPU;
0025   using PhiBinnerStorageType = typename hitSoA::PhiBinnerStorageType;
0026   using PhiBinner = typename hitSoA::PhiBinner;
0027 
0028   // This SoA Host is used basically only for DQM
0029   // so we  just need a slim constructor
0030   explicit TrackingRecHitSoAHost(uint32_t nHits)
0031       : cms::cuda::PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>(nHits) {}
0032 
0033   explicit TrackingRecHitSoAHost(uint32_t nHits, cudaStream_t stream)
0034       : cms::cuda::PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>(nHits, stream) {}
0035 
0036   explicit TrackingRecHitSoAHost(uint32_t nHits,
0037                                  int32_t offsetBPIX2,
0038                                  ParamsOnGPU const* cpeParams,
0039                                  uint32_t const* hitsModuleStart)
0040       : cms::cuda::PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>(nHits), offsetBPIX2_(offsetBPIX2) {
0041     view().nHits() = nHits;
0042     std::copy(hitsModuleStart, hitsModuleStart + TrackerTraits::numberOfModules + 1, view().hitsModuleStart().begin());
0043     memcpy(&(view().cpeParams()), cpeParams, sizeof(ParamsOnGPU));
0044     view().offsetBPIX2() = offsetBPIX2;
0045   }
0046 
0047   explicit TrackingRecHitSoAHost(uint32_t nHits,
0048                                  int32_t offsetBPIX2,
0049                                  ParamsOnGPU const* cpeParams,
0050                                  uint32_t const* hitsModuleStart,
0051                                  cudaStream_t stream)
0052       : cms::cuda::PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>(nHits, stream),
0053         offsetBPIX2_(offsetBPIX2) {
0054     view().nHits() = nHits;
0055     std::copy(hitsModuleStart, hitsModuleStart + TrackerTraits::numberOfModules + 1, view().hitsModuleStart().begin());
0056     memcpy(&(view().cpeParams()), cpeParams, sizeof(ParamsOnGPU));
0057     view().offsetBPIX2() = offsetBPIX2;
0058   }
0059 
0060   uint32_t nHits() const { return view().metadata().size(); }
0061   uint32_t offsetBPIX2() const {
0062     return offsetBPIX2_;
0063   }  //offsetBPIX2 is used on host functions so is useful to have it also stored in the class and not only in the layout
0064 private:
0065   uint32_t offsetBPIX2_ = 0;
0066 };
0067 
0068 using TrackingRecHitSoAHostPhase1 = TrackingRecHitSoAHost<pixelTopology::Phase1>;
0069 using TrackingRecHitSoAHostPhase2 = TrackingRecHitSoAHost<pixelTopology::Phase2>;
0070 using TrackingRecHitSoAHostHIonPhase1 = TrackingRecHitSoAHost<pixelTopology::HIonPhase1>;
0071 
0072 #endif  // CUDADataFormats_Track_TrackHeterogeneousT_H