Alsvinn  0.5.3
The fast FVM simulator with UQ support
Timer.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <chrono>
5 #include "alsutils/config.hpp"
6 namespace alsutils {
7 namespace timer {
8 
9 class Timer {
10 public:
11  template<class ...T> Timer(T... names)
12  : start(std::chrono::high_resolution_clock::now()),
13  data(TimerDatabase::getInstance().getTimerData(names...)) {
14 
15  }
16 
17  ~Timer();
18 
19 private:
20  const std::chrono::high_resolution_clock::time_point start;
21  TimerData& data;
22 };
23 } // namespace timer
24 } // namespace alsutils
25 
26 
27 
28 #define ALSVINN_MAKE_TIMER_VARIABLE_NAME1(X) timer##X
29 #define ALSVINN_MAKE_TIMER_VARIABLE_NAME2(X, Y) timer##X##Y
30 #define ALSVINN_MAKE_TIMER_VARIABLE_NAME3(X,Y, Z) timer##X##Y##Z
31 #define ALSVINN_MAKE_TIMER_VARIABLE_NAME4(X,Y, Z,V) timer##X##Y##Z##V
32 #define ALSVINN_MAKE_TIMER_VARIABLE_NAME5(X,Y, Z,V,W) timer##X##Y##Z##V##W
33 #define ALSVINN_MAKE_TIMER_VARIABLE_NAME6(X,Y, Z,V,W,Q) timer##X##Y##Z##V##W##Q
34 
35 #define ALSVINN_MAKE_TIMER_STRINGS1(X) #X
36 #define ALSVINN_MAKE_TIMER_STRINGS2(X, Y) #X,#Y
37 #define ALSVINN_MAKE_TIMER_STRINGS3(X,Y, Z) #X,#Y,#Z
38 #define ALSVINN_MAKE_TIMER_STRINGS4(X,Y, Z,V) #X, #Y, #Z,#V
39 #define ALSVINN_MAKE_TIMER_STRINGS5(X,Y, Z,V,W) #X, #Y, #Z, #V, #W
40 #define ALSVINN_MAKE_TIMER_STRINGS6(X,Y, Z,V,W, Q) #X, #Y, #Z, #V, #W, #Q
41 
42 // see https://stackoverflow.com/a/11763277 for explanation of GET_MACRO
43 #define GET_MACRO(_1,_2,_3, _4, _5, _6, NAME,...) NAME
44 #define ALSVINN_MAKE_TIMER_VARIABLE_NAME(...) GET_MACRO(__VA_ARGS__, ALSVINN_MAKE_TIMER_VARIABLE_NAME6, ALSVINN_MAKE_TIMER_VARIABLE_NAME5, ALSVINN_MAKE_TIMER_VARIABLE_NAME4, ALSVINN_MAKE_TIMER_VARIABLE_NAME3, ALSVINN_MAKE_TIMER_VARIABLE_NAME2, ALSVINN_MAKE_TIMER_VARIABLE_NAME1)(__VA_ARGS__)
45 #define ALSVINN_MAKE_TIMER_STRINGS(...) GET_MACRO(__VA_ARGS__, ALSVINN_MAKE_TIMER_VARIABLE_NAME6, ALSVINN_MAKE_TIMER_STRINGS5, ALSVINN_MAKE_TIMER_STRINGS4,ALSVINN_MAKE_TIMER_STRINGS3, ALSVINN_MAKE_TIMER_STRINGS2, ALSVINN_MAKE_TIMER_STRINGS1)(__VA_ARGS__)
46 
47 #ifdef ALSVINN_USE_TIMERS
48  #define ALSVINN_TIME_BLOCK(...) ::alsutils::timer::Timer ALSVINN_MAKE_TIMER_VARIABLE_NAME(__VA_ARGS__) (ALSVINN_MAKE_TIMER_STRINGS(__VA_ARGS__))
49 #else
50  #define ALSVINN_TIME_BLOCK(...)
51 #endif
Timer(T... names)
Definition: Timer.hpp:11
Various utilities for mpi and cuda.
Definition: Factory.hpp:3
~Timer()
Definition: Timer.cpp:6
Definition: TimerData.hpp:10
Definition: TimerDatabase.hpp:7
Definition: Timer.hpp:9