From acf5664cbd981f203b61277e9e2375903dea1046 Mon Sep 17 00:00:00 2001 From: Dominik Baack <dominik.baack@tu-dortmund.de> Date: Thu, 17 Sep 2020 17:09:14 +0200 Subject: [PATCH] Added more functionality to ExecTime --- Processes/DevTools/Analytics/ExecTime.cc | 44 ++++++++++++++++++++++-- Processes/DevTools/Analytics/ExecTime.h | 20 +++++++---- 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/Processes/DevTools/Analytics/ExecTime.cc b/Processes/DevTools/Analytics/ExecTime.cc index 792e69ebc..18c31b5a1 100644 --- a/Processes/DevTools/Analytics/ExecTime.cc +++ b/Processes/DevTools/Analytics/ExecTime.cc @@ -15,10 +15,50 @@ namespace corsika::process { namespace devtools { template <class T> - void ExecTime<T>::start() {} + void ExecTime<T>::start() { + fStart = std::chrono::steady_clock::now(); + } template <class T> - void ExecTime<T>::stop() {} + void ExecTime<T>::stop() { + auto end = std::chrono::steady_clock::now(); + std::chrono::microseconds timeDiv = + std::chrono::duration_cast<std::chrono::microseconds>(end - start); + + fElapsedSum += timeDiv; + fN++; + + if (fMax < timeDiv) fMax = timeDiv; + + if (timeDiv < fMin) fMin = timeDiv; + + auto delta = timeDiv - fMean; + fMean += delta / fN; + + auto delta2 = timeDiv - fMean; + + fMean2 += delta * delta2; + } + + template <typename T> + double ExecTime<T>::mean() { + return fMean; + } + + template <typename T> + double ExecTime<T>::var() { + return fMean2 / count; + } + + template <typename T> + double ExecTime<T>::min() { + return fMin; + } + + template <typename T> + double ExecTime<T>::max() { + return fMax; + } } // namespace devtools } // namespace corsika::process \ No newline at end of file diff --git a/Processes/DevTools/Analytics/ExecTime.h b/Processes/DevTools/Analytics/ExecTime.h index 033e7cc82..aef2c588d 100644 --- a/Processes/DevTools/Analytics/ExecTime.h +++ b/Processes/DevTools/Analytics/ExecTime.h @@ -108,22 +108,30 @@ namespace corsika::process { std::is_base_of<BoundaryCrossingProcess<typename T::_TDerived>, T>::value>, public ExecTime_Continuous< T, std::is_base_of<ContinuousProcess<typename T::_TDerived>, T>::value>, - public ExecTime_Decay<T, - std::is_base_of<DecayProcess<typename T::_TDerived>, T>::value>, + public ExecTime_Decay< + T, std::is_base_of<DecayProcess<typename T::_TDerived>, T>::value>, public ExecTime_Interaction< T, std::is_base_of<InteractionProcess<typename T::_TDerived>, T>::value>, public ExecTime_Secondaries< T, std::is_base_of<SecondariesProcess<typename T::_TDerived>, T>::value> { private: + std::chrono::microseconds fStart; + std::chrono::microseconds fElapsedSum; + std::chrono::microseconds fMean; + std::chrono::microseconds fMean2; + std::chrono::microseconds fMin; + std::chrono::microseconds fMax; + long long fN; + void start(); void stop(); protected: public: - float mean(); - float min(); - float max(); - float var(); + double mean(); + double min(); + double max(); + double var(); /* // Stack -- GitLab