From fe71dcfdc40bc13a885571e1d6e13e16f46fb00f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Milk?= <rene.milk@wwu.de> Date: Mon, 7 May 2018 15:57:04 +0200 Subject: [PATCH] [timings] export singleton, improved string passing --- dune/xt/common/timings.cc | 16 ++++++++-------- dune/xt/common/timings.hh | 30 +++++++++++++----------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/dune/xt/common/timings.cc b/dune/xt/common/timings.cc index caa3cf79d..b42f5b563 100644 --- a/dune/xt/common/timings.cc +++ b/dune/xt/common/timings.cc @@ -59,7 +59,7 @@ namespace Dune { namespace XT { namespace Common { -TimingData::TimingData(const std::string _name) +TimingData::TimingData(std::string _name) : timer_(new boost::timer::cpu_timer) , name(_name) { @@ -79,7 +79,7 @@ TimingData::DeltaType TimingData::delta() const return {{cast(elapsed.wall * scale), cast(elapsed.user * scale), cast(elapsed.system * scale)}}; } -void Timings::reset(const std::string section_name) +void Timings::reset(std::string section_name) { try { stop(section_name); @@ -89,7 +89,7 @@ void Timings::reset(const std::string section_name) commited_deltas_[section_name] = {{0, 0, 0}}; } -void Timings::start(const std::string section_name) +void Timings::start(std::string section_name) { std::lock_guard<std::mutex> lock(mutex_); @@ -107,7 +107,7 @@ void Timings::start(const std::string section_name) DXTC_LIKWID_BEGIN_SECTION(section_name) } // StartTiming -long Timings::stop(const std::string section_name) +long Timings::stop(std::string section_name) { DXTC_LIKWID_END_SECTION(section_name) if (known_timers_map_.find(section_name) == known_timers_map_.end()) @@ -126,12 +126,12 @@ long Timings::stop(const std::string section_name) return dlt[0]; } // StopTiming -TimingData::TimeType Timings::walltime(const std::string section_name) const +TimingData::TimeType Timings::walltime(std::string section_name) const { return delta(section_name)[0]; } -TimingData::DeltaType Timings::delta(const std::string section_name) const +TimingData::DeltaType Timings::delta(std::string section_name) const { DeltaMap::const_iterator section = commited_deltas_.find(section_name); if (section == commited_deltas_.end()) { @@ -160,13 +160,13 @@ void Timings::reset() commited_deltas_.clear(); } // Reset -void Timings::set_outputdir(const std::string dir) +void Timings::set_outputdir(std::string dir) { output_dir_ = dir; test_create_directory(output_dir_); } -void Timings::output_per_rank(const std::string csv_base) const +void Timings::output_per_rank(std::string csv_base) const { const auto rank = MPIHelper::getCollectiveCommunication().rank(); boost::filesystem::path dir(output_dir_); diff --git a/dune/xt/common/timings.hh b/dune/xt/common/timings.hh index 616399841..2af4ad4ce 100644 --- a/dune/xt/common/timings.hh +++ b/dune/xt/common/timings.hh @@ -52,7 +52,7 @@ private: public: std::string name; - explicit TimingData(const std::string _name = "blank"); + explicit TimingData(std::string _name = "blank"); void stop(); @@ -81,7 +81,6 @@ class Timings private: Timings(); - ~Timings(); typedef std::map<std::string, std::pair<std::atomic<bool>, PerThreadValue<TimingData>>> KnownTimersMap; //! section name -> seconds @@ -90,26 +89,28 @@ private: const TimingData& get_timing_data(std::string section_name) const; public: + ~Timings(); + void stop(); //! set this to begin a named section - void start(const std::string section_name); + void start(std::string section_name); //! stop named section's counter - long stop(const std::string section_name); + long stop(std::string section_name); //! set elapsed time back to 0 for section_name - void reset(const std::string section_name); + void reset(std::string section_name); //! get runtime of section in milliseconds - TimingData::TimeType walltime(const std::string section_name) const; + TimingData::TimeType walltime(std::string section_name) const; //! get the full delta array - TimingData::DeltaType delta(const std::string section_name) const; + TimingData::DeltaType delta(std::string section_name) const; /** creates one file local to each MPI-rank (no global averaging) * one single rank-0 file with all combined/averaged measures ***/ - void output_per_rank(const std::string csv_base) const; + void output_per_rank(std::string csv_base) const; //! outputs walltime only w/o MPI-rank averaging void output_simple(std::ostream& out = std::cout) const; /** output all recorded measures @@ -120,7 +121,7 @@ public: /// stops and resets all timers and data void reset(); - void set_outputdir(const std::string dir); + void set_outputdir(std::string dir); private: DeltaMap commited_deltas_; @@ -130,18 +131,13 @@ private: KnownTimersMap known_timers_map_; const std::string csv_sep_; std::mutex mutex_; - - static Timings& instance() - { - static Timings pf; - return pf; - } }; //! global profiler object -inline Timings& timings() +DUNE_EXPORT inline Timings& timings() { - return Timings::instance(); + static Timings pf; + return pf; } class ScopedTiming : public boost::noncopyable -- GitLab