1 #include <alpaka/alpaka.hpp> 17 #undef PIXVERTEX_DEBUG_PRODUCE 28 template <
typename TrackerTraits>
89 alpaka::syncBlockThreads(acc);
91 alpaka::syncBlockThreads(acc);
94 alpaka::syncBlockThreads(acc);
96 alpaka::syncBlockThreads(acc);
102 class VertexFinderKernel1 {
104 ALPAKA_FN_ACC
void operator()(
Acc1D const& acc,
113 alpaka::syncBlockThreads(acc);
118 class VertexFinderKernel2 {
122 alpaka::syncBlockThreads(acc);
128 template <
typename TrackerTraits>
134 #ifdef PIXVERTEX_DEBUG_PRODUCE 135 std::cout <<
"producing Vertices on GPU" << std::endl;
136 #endif // PIXVERTEX_DEBUG_PRODUCE 143 auto ws = workspace.view();
146 const auto initWorkDiv = cms::alpakatools::make_workdiv<Acc1D>(1, 1);
150 const uint32_t blockSize = 128;
151 const uint32_t numberOfBlocks =
153 const auto loadTracksWorkDiv = cms::alpakatools::make_workdiv<Acc1D>(numberOfBlocks, blockSize);
158 const auto finderSorterWorkDiv = cms::alpakatools::make_workdiv<Acc1D>(1, 1024 - 128);
159 const auto splitterFitterWorkDiv = cms::alpakatools::make_workdiv<Acc1D>(1024, 128);
163 #ifndef THREE_KERNELS 164 alpaka::exec<Acc1D>(
queue,
166 VertexFinderOneKernel{},
182 alpaka::exec<Acc1D>(
queue, finderSorterWorkDiv{},
data,
ws);
189 }
else if (useDBSCAN_) {
192 }
else if (useIterative_) {
204 alpaka::exec<Acc1D>(
queue, finderSorterWorkDiv, SortByPt2Kernel{},
data,
trkdata,
ws);
210 template class Producer<pixelTopology::Phase1>;
211 template class Producer<pixelTopology::Phase2>;
212 template class Producer<pixelTopology::HIonPhase1>;
constexpr float maxChi2ForFirstFit
ALPAKA_ASSERT_ACC(nvFinal<=nvIntermediate)
std::conditional_t< std::is_same_v< Device, alpaka::DevCpu >, ZVertexHost, ZVertexDevice< Device > > ZVertexSoACollection
uint32_t const *__restrict__ TkSoAView< TrackerTraits > tracks_view
auto &__restrict__ trkdata
ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE constexpr float zip(ConstView const &tracks, int32_t i)
fitVertices(pdata, pws, maxChi2ForFirstFit)
ALPAKA_ACCELERATOR_NAMESPACE::Queue Queue
ALPAKA_FN_ACC void operator()(Acc1D const &acc, reco::TrackSoAConstView< TrackerTraits > tracks_view, VtxSoAView data, TrkSoAView trkdata, WsSoAView ws, float ptMin, float ptMax) const
std::vector< Block > Blocks
splitVertices(pdata, pws, maxChi2ForSplit)
constexpr float maxChi2ForFinalFit
ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE constexpr bool isTriplet(ConstView const &tracks, int32_t i)
::vertexFinder::PixelVertexWorkSpaceSoAView WsSoAView
typename reco::TrackSoA< TrackerTraits >::template Layout<>::ConstView TrackSoAConstView
ZVertexSoACollection makeAsync(Queue &queue, TkSoAConstView const &tracks_view, int maxVertices, float ptMin, float ptMax) const
ALPAKA_FN_ACC ALPAKA_FN_INLINE void clusterTracksByDensity(Acc1D const &acc, VtxSoAView &data, TrkSoAView &trkdata, WsSoAView &ws, int minT, float eps, float errmax, float chi2max)
::reco::ZVertexSoAView VtxSoAView
ALPAKA_FN_ACC void operator()(Acc1D const &acc, VtxSoAView data, TrkSoAView trkdata, WsSoAView ws, bool doSplit, int minT, float eps, float errmax, float chi2max) const
ALPAKA_FN_ACC ALPAKA_FN_INLINE void sortByPt2(Acc1D const &acc, VtxSoAView &data, TrkSoAView &trkdata, WsSoAView &ws)
TupleMultiplicity< TrackerTraits > const *__restrict__ uint32_t nHits
ALPAKA_ACCELERATOR_NAMESPACE::Acc1D Acc1D
T1 atomicAdd(T1 *a, T2 b)
constexpr float maxChi2ForSplit