diff --git a/algo/detectors/trd/Hitfind.cxx b/algo/detectors/trd/Hitfind.cxx index a72229d1eb062ebd6f0bc5f56f8a50ec42071321..4367147765f471d1ef4ce5e8a1269e064d4b5c44 100644 --- a/algo/detectors/trd/Hitfind.cxx +++ b/algo/detectors/trd/Hitfind.cxx @@ -108,12 +108,14 @@ namespace cbm::algo::trd auto& hitsOut = std::get<0>(result); auto& monitor = std::get<1>(result); + xpu::scoped_timer t_{"TRDHitfind", &monitor.timeTotal}; + // Intermediate storage variables (digi, index) per module std::unordered_map<int, std::vector<std::pair<CbmTrdDigi, int32_t>>> digiBuffer; //[modAddress] // Loop over the digis array and store the digis in separate vectors for // each modules - xpu::push_timer("TrdHitfindModuleSort"); + xpu::push_timer("DigiModuleSort"); for (size_t idigi = 0; idigi < digiIn.size(); idigi++) { const CbmTrdDigi* digi = &digiIn[idigi]; auto addrModule = digi->GetAddressModule(); @@ -134,7 +136,7 @@ namespace cbm::algo::trd digiBuffer[addrModule].emplace_back(*digi, idigi); } - monitor.fSortTime = xpu::pop_timer(); + monitor.sortTime = xpu::pop_timer(); PODVector<Hit> hitsFlat; // hit storage std::vector<size_t> modSizes(fModList.size()); // nHits per modules @@ -143,7 +145,7 @@ namespace cbm::algo::trd // Prefix array for parallelization std::vector<size_t> hitsPrefix; - xpu::push_timer("TrdHitfind"); + xpu::push_timer("FindHits"); xpu::t_add_bytes(digiIn.size_bytes()); CBM_PARALLEL() @@ -192,9 +194,9 @@ namespace cbm::algo::trd std::move(local_hits.begin(), local_hits.end(), hitsFlat.begin() + hitsPrefix[ithread]); } // Monitoring - monitor.fTime = xpu::pop_timer(); - monitor.fNumDigis = digiIn.size(); - monitor.fNumHits = hitsFlat.size(); + monitor.timeHitfind = xpu::pop_timer(); + monitor.numDigis = digiIn.size(); + monitor.numHits = hitsFlat.size(); // Create ouput vector hitsOut = PartitionedVector(std::move(hitsFlat), modSizes, modAddresses); diff --git a/algo/detectors/trd/Hitfind.h b/algo/detectors/trd/Hitfind.h index 90ea01cc561c714d96758244f790b00cefaf6d5f..07f64557ba52d18769b6d25ddc2a4818fbc93c3c 100644 --- a/algo/detectors/trd/Hitfind.h +++ b/algo/detectors/trd/Hitfind.h @@ -31,16 +31,18 @@ namespace cbm::algo::trd ** @brief Monitoring data for hitfinding **/ struct HitfindMonitorData { - xpu::timings fTime; - xpu::timings fSortTime; - size_t fNumDigis = 0; - size_t fNumHits = 0; + xpu::timings timeTotal; + xpu::timings timeHitfind; + xpu::timings sortTime; + size_t numDigis = 0; + size_t numHits = 0; std::string print() const { std::stringstream ss; - ss << "Hitfind stats: num digis " << fNumDigis << ", time " << fTime.wall() << " ms ( " << fTime.throughput() - << " GB/s ), sort time " << fSortTime.wall() << " ms, num hits " << fNumHits << std::endl; + ss << "Hitfind stats: num digis " << numDigis << ", time " << timeTotal.wall() << " ms ( " + << timeTotal.throughput() << " GB/s ), sort time " << sortTime.wall() << " ms, num hits " << numHits + << std::endl; return ss.str(); } }; diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx index 9f7c0350c1142e5284b3d7569c4138307a7703a8..10c2635d93a67b65c487c45ecdc076ead46e370e 100644 --- a/algo/global/Reco.cxx +++ b/algo/global/Reco.cxx @@ -300,6 +300,7 @@ RecoResults Reco::Run(const fles::Timeslice& ts) std::copy(digis2d.begin(), digis2d.end(), std::back_inserter(allDigis)); auto trdResults = (*fTrdHitfind)(allDigis); trdHits = std::move(std::get<0>(trdResults)); + QueueTrdRecoMetrics(std::get<1>(trdResults)); L_(info) << "TS has " << trdHits.NElements() << " TRD hits."; } @@ -442,6 +443,21 @@ void Reco::QueueTofRecoMetrics(const tof::HitfindMonitorData& mon) }); } +void Reco::QueueTrdRecoMetrics(const trd::HitfindMonitorData& mon) +{ + if (!HasMonitor()) { + return; + } + + GetMonitor().QueueMetric("cbmreco", {{"hostname", fles::system::current_hostname()}, {"child", Opts().ChildId()}}, + { + {"trdRecoTimeTotal", mon.timeTotal.wall()}, + {"trdRecoThroughput", mon.timeTotal.throughput()}, + {"trdRecoNumDigisIn", mon.numDigis}, + {"trdRecoNumHits", mon.numHits}, + }); +} + void Reco::QueueTofCalibMetrics(const tof::CalibrateMonitorData& mon) { if (!HasMonitor()) return; diff --git a/algo/global/Reco.h b/algo/global/Reco.h index 18be6d475e5106a2930522d776306303607b6cb1..7f104732a002ae68fe44c6785ee71829b86c324a 100644 --- a/algo/global/Reco.h +++ b/algo/global/Reco.h @@ -60,6 +60,7 @@ namespace cbm::algo { class Unpack; class Hitfind; + struct HitfindMonitorData; } namespace trd2d @@ -154,6 +155,7 @@ namespace cbm::algo void QueueUnpackerMetricsDet(const UnpackMonitor<MSMonitor>&); void QueueStsRecoMetrics(const sts::HitfinderMon&); void QueueTofRecoMetrics(const tof::HitfindMonitorData&); + void QueueTrdRecoMetrics(const trd::HitfindMonitorData&); void QueueTofCalibMetrics(const tof::CalibrateMonitorData&); void QueueEvbuildMetrics(const evbuild::EventbuildChainMonitorData&); void QueueTrackingMetrics(const ca::TrackingMonitorData&);