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
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
0029
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 }
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