From 99e2a465a201963cca3a09c12538d070a75dd82f Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 6 Dec 2020 17:57:31 +0100 Subject: [PATCH] make the PhiBinner the size of the hits --- .../interface/TrackingRecHit2DHeterogeneous.h | 8 +++++++- .../TrackingRecHit/interface/TrackingRecHit2DSOAView.h | 3 ++- RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHits.cu | 2 +- .../SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h b/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h index 73a6daaa4e387..f273294e0e2cb 100644 --- a/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h +++ b/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h @@ -34,6 +34,7 @@ class TrackingRecHit2DHeterogeneous { auto hitsModuleStart() const { return m_hitsModuleStart; } auto hitsLayerStart() { return m_hitsLayerStart; } auto phiBinner() { return m_hist; } + auto binnerStorage() {return m_histStorage;} auto iphi() { return m_iphi; } // only the local coord and detector index @@ -43,7 +44,7 @@ class TrackingRecHit2DHeterogeneous { private: static constexpr uint32_t n16 = 4; - static constexpr uint32_t n32 = 9; + static constexpr uint32_t n32 = 10; static_assert(sizeof(uint32_t) == sizeof(float)); // just stating the obvious unique_ptr m_store16; //! @@ -60,6 +61,7 @@ class TrackingRecHit2DHeterogeneous { // needed as kernel params... Hist* m_hist; + Hist::index_type * m_histStorage; uint32_t* m_hitsLayerStart; int16_t* m_iphi; }; @@ -101,11 +103,15 @@ TrackingRecHit2DHeterogeneous::TrackingRecHit2DHeterogeneous(uint32_t nH m_store32 = Traits::template make_device_unique(nHits * n32 + 11, stream); m_HistStore = Traits::template make_device_unique(stream); + static_assert(sizeof(TrackingRecHit2DSOAView::hindex_type)==sizeof(float)); + static_assert(sizeof(TrackingRecHit2DSOAView::hindex_type)==sizeof(TrackingRecHit2DSOAView::Hist::index_type)); + auto get16 = [&](int i) { return m_store16.get() + i * nHits; }; auto get32 = [&](int i) { return m_store32.get() + i * nHits; }; // copy all the pointers m_hist = view->m_hist = m_HistStore.get(); + m_histStorage = view->m_histStorage = reinterpret_cast(get32(9)); view->m_xl = get32(0); view->m_yl = get32(1); diff --git a/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h b/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h index 6a83a66b60fbd..460a8c1e8b7fa 100644 --- a/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h +++ b/CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h @@ -18,7 +18,7 @@ class TrackingRecHit2DSOAView { using hindex_type = uint32_t; // if above is <=2^32 using PhiBinner = - cms::cuda::HistoContainer; + cms::cuda::HistoContainer; using Hist = PhiBinner; // FIXME @@ -96,6 +96,7 @@ class TrackingRecHit2DSOAView { uint32_t* m_hitsLayerStart; PhiBinner* m_hist; // FIXME use a more descriptive name consistently + PhiBinner::index_type * m_histStorage; uint32_t m_nHits; }; diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHits.cu b/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHits.cu index 5dae8f52432d5..f6872bfa5af8c 100644 --- a/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHits.cu +++ b/RecoLocalTracker/SiPixelRecHits/plugins/PixelRecHits.cu @@ -64,7 +64,7 @@ namespace pixelgpudetails { if (nHits) { cms::cuda::fillManyFromVector( - hits_d.phiBinner(), 10, hits_d.iphi(), hits_d.hitsLayerStart(), nHits, 256, nullptr, stream); + hits_d.phiBinner(), 10, hits_d.iphi(), hits_d.hitsLayerStart(), nHits, 256, hits_d.binnerStorage(), stream); cudaCheck(cudaGetLastError()); } diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc index c7084f325d05b..69f8f74b05ae7 100644 --- a/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc +++ b/RecoLocalTracker/SiPixelRecHits/plugins/SiPixelRecHitSoAFromLegacy.cc @@ -240,7 +240,7 @@ void SiPixelRecHitSoAFromLegacy::produce(edm::StreamID streamID, edm::Event& iEv output->hitsLayerStart()[i] = hitsModuleStart[cpeView.layerGeometry().layerStart[i]]; } cms::cuda::fillManyFromVector( - output->phiBinner(), 10, output->iphi(), output->hitsLayerStart(), numberOfHits, 256, nullptr); + output->phiBinner(), 10, output->iphi(), output->hitsLayerStart(), numberOfHits, 256, output->binnerStorage()); // std::cout << "created HitSoa for " << numberOfClusters << " clusters in " << numberOfDetUnits << " Dets" << std::endl; iEvent.put(std::move(output));