IAP GITLAB

Skip to content
Snippets Groups Projects
Commit acf5664c authored by Dominik Baack's avatar Dominik Baack Committed by Ralf Ulrich
Browse files

Added more functionality to ExecTime

parent 5030e6e5
No related branches found
No related tags found
No related merge requests found
...@@ -15,10 +15,50 @@ namespace corsika::process { ...@@ -15,10 +15,50 @@ namespace corsika::process {
namespace devtools { namespace devtools {
template <class T> template <class T>
void ExecTime<T>::start() {} void ExecTime<T>::start() {
fStart = std::chrono::steady_clock::now();
}
template <class T> 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 devtools
} // namespace corsika::process } // namespace corsika::process
\ No newline at end of file
...@@ -108,22 +108,30 @@ namespace corsika::process { ...@@ -108,22 +108,30 @@ namespace corsika::process {
std::is_base_of<BoundaryCrossingProcess<typename T::_TDerived>, T>::value>, std::is_base_of<BoundaryCrossingProcess<typename T::_TDerived>, T>::value>,
public ExecTime_Continuous< public ExecTime_Continuous<
T, std::is_base_of<ContinuousProcess<typename T::_TDerived>, T>::value>, T, std::is_base_of<ContinuousProcess<typename T::_TDerived>, T>::value>,
public ExecTime_Decay<T, public ExecTime_Decay<
std::is_base_of<DecayProcess<typename T::_TDerived>, T>::value>, T, std::is_base_of<DecayProcess<typename T::_TDerived>, T>::value>,
public ExecTime_Interaction< public ExecTime_Interaction<
T, std::is_base_of<InteractionProcess<typename T::_TDerived>, T>::value>, T, std::is_base_of<InteractionProcess<typename T::_TDerived>, T>::value>,
public ExecTime_Secondaries< public ExecTime_Secondaries<
T, std::is_base_of<SecondariesProcess<typename T::_TDerived>, T>::value> { T, std::is_base_of<SecondariesProcess<typename T::_TDerived>, T>::value> {
private: 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 start();
void stop(); void stop();
protected: protected:
public: public:
float mean(); double mean();
float min(); double min();
float max(); double max();
float var(); double var();
/* /*
// Stack // Stack
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment