timers.hpp
Go to the documentation of this file.
1 
14 #ifndef MLPACK_CORE_UTILITIES_TIMERS_HPP
15 #define MLPACK_CORE_UTILITIES_TIMERS_HPP
16 
17 #include <atomic>
18 #include <chrono> // chrono library for cross platform timer calculation.
19 #include <iomanip>
20 #include <list>
21 #include <map>
22 #include <mutex>
23 #include <string>
24 #include <thread> // std::thread is used for thread safety.
25 
26 #if defined(_WIN32)
27  // uint64_t isn't defined on every windows.
28  #if !defined(HAVE_UINT64_T)
29  #if SIZEOF_UNSIGNED_LONG == 8
30  typedef unsigned long uint64_t;
31  #else
32  typedef unsigned long long uint64_t;
33  #endif // SIZEOF_UNSIGNED_LONG
34  #endif // HAVE_UINT64_T
35 #endif
36 
37 namespace mlpack {
38 
46 class Timer
47 {
48  public:
60  static void Start(const std::string& name);
61 
70  static void Stop(const std::string& name);
71 
77  static std::chrono::microseconds Get(const std::string& name);
78 
83  static void EnableTiming();
84 
89  static void DisableTiming();
90 
95  static void ResetAll();
96 };
97 
98 class Timers
99 {
100  public:
102  Timers() : enabled(false) { }
103 
107  std::map<std::string, std::chrono::microseconds> GetAllTimers();
108 
113  void Reset();
114 
121  std::chrono::microseconds GetTimer(const std::string& timerName);
122 
129  void PrintTimer(const std::string& timerName);
130 
140  void StartTimer(const std::string& timerName,
141  const std::thread::id& threadId = std::thread::id());
142 
149  void StopTimer(const std::string& timerName,
150  const std::thread::id& threadId = std::thread::id());
151 
158  bool GetState(const std::string& timerName,
159  const std::thread::id& threadId = std::thread::id());
160 
164  void StopAllTimers();
165 
167  std::atomic<bool>& Enabled() { return enabled; }
169  bool Enabled() const { return enabled; }
170 
171  private:
173  std::map<std::string, std::chrono::microseconds> timers;
175  std::mutex timersMutex;
177  std::map<std::thread::id, std::map<std::string,
178  std::chrono::high_resolution_clock::time_point>> timerStartTime;
179 
181  std::atomic<bool> enabled;
182 };
183 
184 } // namespace mlpack
185 
186 #endif // MLPACK_CORE_UTILITIES_TIMERS_HPP
std::atomic< bool > & Enabled()
Modify whether or not timing is enabled.
Definition: timers.hpp:167
static std::chrono::microseconds Get(const std::string &name)
Get the value of the given timer.
Linear algebra utility functions, generally performed on matrices or vectors.
static void Stop(const std::string &name)
Stop the given timer.
static void EnableTiming()
Enable timing of mlpack programs.
The timer class provides a way for mlpack methods to be timed.
Definition: timers.hpp:46
static void ResetAll()
Stop and reset all running timers.
bool Enabled() const
Get whether or not timing is enabled.
Definition: timers.hpp:169
Timers()
Default to disabled.
Definition: timers.hpp:102
static void DisableTiming()
Disable timing of mlpack programs.
static void Start(const std::string &name)
Start the given timer.