From a722b6dcec8d9b427def0ac0dc93a866ea14d3ad Mon Sep 17 00:00:00 2001 From: Valerii Kholoimov <valerii.kholoimov@cern.ch> Date: Wed, 15 Jan 2025 16:50:20 +0100 Subject: [PATCH] adding AveragingCounter --- main/include/AllenMonitoring.h | 10 +++++++++- main/src/AllenMonitoring.cpp | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/main/include/AllenMonitoring.h b/main/include/AllenMonitoring.h index b52c379aa5e..fd4b9189305 100644 --- a/main/include/AllenMonitoring.h +++ b/main/include/AllenMonitoring.h @@ -26,6 +26,9 @@ namespace Allen::Monitoring { template<typename T> struct Counter; + template<typename T> + struct AveragingCounter; + struct AccumulatorInfosAndPointers { std::size_t offset {0}; std::size_t size {0}; @@ -98,6 +101,7 @@ namespace Allen::Monitoring { void registerAccumulator(AccumulatorBase* acc); void registerCounter(Counter<unsigned>* c) { m_counters.push_back(c); } + void registerAveragingCounter(AveragingCounter<unsigned>* c) { m_av_counters.push_back(c); } void initAccumulators(unsigned number_of_streams); void mergeAndReset(bool singlethreaded = false); char* bufferForStream(unsigned stream_id) const { return m_dev_buffer_ptr[m_stream_current_buffer[stream_id]]; } @@ -124,6 +128,7 @@ namespace Allen::Monitoring { std::vector<AccumulatorBase*> m_registered_accumulators; std::vector<Counter<unsigned>*> m_counters; + std::vector<AveragingCounter<unsigned>*> m_av_counters; std::map<std::string, AccumulatorInfosAndPointers> m_accumulators; }; @@ -251,7 +256,10 @@ namespace Allen::Monitoring { using type = T; using DeviceType = DeviceAveragingCounter<T>; - AveragingCounter(const Allen::Algorithm* owner, std::string name) : AccumulatorBase(owner, name) {} + AveragingCounter(const Allen::Algorithm* owner, std::string name) : AccumulatorBase(owner, name) + { + if constexpr (std::is_same<T, unsigned>::value) AccumulatorManager::get()->registerAveragingCounter(this); + } std::size_t size() const override { return 2; } std::size_t elementSize() const override { return sizeof(T); } DeviceType data(const Allen::Context& ctx) const { return reinterpret_cast<T*>(currentDevicePtr(ctx.stream_id)); } diff --git a/main/src/AllenMonitoring.cpp b/main/src/AllenMonitoring.cpp index 80b01e67208..34dde5382a4 100644 --- a/main/src/AllenMonitoring.cpp +++ b/main/src/AllenMonitoring.cpp @@ -30,6 +30,10 @@ namespace Allen::Monitoring { m_counters_histogram.addCounter(counter->uniqueName()); } + for (auto counter : m_av_counters) { + m_counters_histogram.addCounter(counter->uniqueName()); + } + m_counters_histogram.registerHistogram(); // Algorithms have finished their initializations for all streams @@ -109,5 +113,10 @@ namespace Allen::Monitoring { m_counters_histogram.updateBin(counter_index, counter->m_entries); counter_index++; } + + for (auto counter : m_av_counters) { + m_counters_histogram.updateBin(counter_index, static_cast<unsigned>(counter->m_sum / counter->m_entries)); + counter_index++; + } } } // namespace Allen::Monitoring -- GitLab