File indexing completed on 2024-04-06 12:28:32
0001 #include "BrokenLineFitOnGPU.h"
0002
0003 template <typename TrackerTraits>
0004 void HelixFitOnGPU<TrackerTraits>::launchBrokenLineKernelsOnCPU(const TrackingRecHitSoAConstView<TrackerTraits> &hv,
0005 uint32_t hitsInFit,
0006 uint32_t maxNumberOfTuples) {
0007 assert(tuples_);
0008
0009 #ifdef BROKENLINE_DEBUG
0010 setlinebuf(stdout);
0011 #endif
0012
0013
0014 auto tkidGPU = std::make_unique<typename TrackerTraits::tindex_type[]>(maxNumberOfConcurrentFits_);
0015 auto hitsGPU =
0016 std::make_unique<double[]>(maxNumberOfConcurrentFits_ * sizeof(riemannFit::Matrix3xNd<6>) / sizeof(double));
0017 auto hits_geGPU =
0018 std::make_unique<float[]>(maxNumberOfConcurrentFits_ * sizeof(riemannFit::Matrix6xNf<6>) / sizeof(float));
0019 auto fast_fit_resultsGPU =
0020 std::make_unique<double[]>(maxNumberOfConcurrentFits_ * sizeof(riemannFit::Vector4d) / sizeof(double));
0021
0022 for (uint32_t offset = 0; offset < maxNumberOfTuples; offset += maxNumberOfConcurrentFits_) {
0023
0024 kernel_BLFastFit<3, TrackerTraits>(tuples_,
0025 tupleMultiplicity_,
0026 hv,
0027 tkidGPU.get(),
0028 hitsGPU.get(),
0029 hits_geGPU.get(),
0030 fast_fit_resultsGPU.get(),
0031 3,
0032 3,
0033 offset);
0034
0035 kernel_BLFit<3, TrackerTraits>(tupleMultiplicity_,
0036 bField_,
0037 outputSoa_,
0038 tkidGPU.get(),
0039 hitsGPU.get(),
0040 hits_geGPU.get(),
0041 fast_fit_resultsGPU.get());
0042 if (fitNas4_) {
0043 riemannFit::rolling_fits<4, TrackerTraits::maxHitsOnTrack, 1>(
0044 [this, &hv, &tkidGPU, &hitsGPU, &hits_geGPU, &fast_fit_resultsGPU, &offset](auto i) {
0045 kernel_BLFastFit<4, TrackerTraits>(tuples_,
0046 tupleMultiplicity_,
0047 hv,
0048 tkidGPU.get(),
0049 hitsGPU.get(),
0050 hits_geGPU.get(),
0051 fast_fit_resultsGPU.get(),
0052 4,
0053 i,
0054 offset);
0055
0056 kernel_BLFit<4, TrackerTraits>(tupleMultiplicity_,
0057 bField_,
0058 outputSoa_,
0059 tkidGPU.get(),
0060 hitsGPU.get(),
0061 hits_geGPU.get(),
0062 fast_fit_resultsGPU.get());
0063 });
0064
0065 } else {
0066
0067 riemannFit::rolling_fits<4, TrackerTraits::maxHitsOnTrackForFullFit, 1>(
0068 [this, &hv, &tkidGPU, &hitsGPU, &hits_geGPU, &fast_fit_resultsGPU, &offset](auto i) {
0069 kernel_BLFastFit<i, TrackerTraits>(tuples_,
0070 tupleMultiplicity_,
0071 hv,
0072 tkidGPU.get(),
0073 hitsGPU.get(),
0074 hits_geGPU.get(),
0075 fast_fit_resultsGPU.get(),
0076 i,
0077 i,
0078 offset);
0079
0080 kernel_BLFit<i, TrackerTraits>(tupleMultiplicity_,
0081 bField_,
0082 outputSoa_,
0083 tkidGPU.get(),
0084 hitsGPU.get(),
0085 hits_geGPU.get(),
0086 fast_fit_resultsGPU.get());
0087 });
0088
0089 static_assert(TrackerTraits::maxHitsOnTrackForFullFit < TrackerTraits::maxHitsOnTrack);
0090
0091
0092
0093 kernel_BLFastFit<TrackerTraits::maxHitsOnTrackForFullFit, TrackerTraits>(tuples_,
0094 tupleMultiplicity_,
0095 hv,
0096 tkidGPU.get(),
0097 hitsGPU.get(),
0098 hits_geGPU.get(),
0099 fast_fit_resultsGPU.get(),
0100 TrackerTraits::maxHitsOnTrackForFullFit,
0101 TrackerTraits::maxHitsOnTrack - 1,
0102 offset);
0103
0104 kernel_BLFit<TrackerTraits::maxHitsOnTrackForFullFit, TrackerTraits>(tupleMultiplicity_,
0105 bField_,
0106 outputSoa_,
0107 tkidGPU.get(),
0108 hitsGPU.get(),
0109 hits_geGPU.get(),
0110 fast_fit_resultsGPU.get());
0111 }
0112
0113 }
0114 }
0115
0116 template class HelixFitOnGPU<pixelTopology::Phase1>;
0117 template class HelixFitOnGPU<pixelTopology::Phase2>;
0118 template class HelixFitOnGPU<pixelTopology::HIonPhase1>;