2 #ifndef HOBBES_UTIL_PERF_HPP_INCLUDED 3 #define HOBBES_UTIL_PERF_HPP_INCLUDED 15 if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
16 return ts.tv_sec * 1000000000L + ts.tv_nsec;
25 if (clock_gettime(CLOCK_REALTIME, &ts) == 0) {
26 return ts.tv_sec * 1000000000L + ts.tv_nsec;
33 static const double micros = 1000;
34 static const double millis = 1000*micros;
35 static const double seconds = 1000*millis;
36 static const double minutes = 60*seconds;
39 std::ostringstream ss;
41 if ((t / minutes) >= 1) {
42 ss << (t / minutes) <<
"m";
43 }
else if ((t / seconds) >= 1) {
44 ss << (t / seconds) <<
"s";
45 }
else if ((t / millis) >= 1) {
46 ss << (t / millis) <<
"ms";
47 }
else if ((t / micros) >= 1) {
48 ss << (t / micros) <<
"us";
59 probe(
const std::string& msg) : msg(msg) {
64 long dt =
tick() - this->
t0;
65 static const double micros = 1000;
66 static const double millis = 1000*micros;
67 static const double seconds = 1000*millis;
69 if (dt > (1*seconds)) {
70 std::cout << msg <<
": " << std::flush;
76 template <
long* globalTC>
81 return (*globalTC % 2) == 1;
86 if ((*globalTC % 2) == 0) { *globalTC += 1; }
88 if ((*globalTC % 2) == 1) { *globalTC += 1; }
93 if (activelyTiming()) {
104 activelyTiming(
false);
109 #if defined(__i386__) 110 inline unsigned long long rdtsc(
void) {
111 unsigned long long int x;
112 __asm__
volatile (
".byte 0x0f, 0x31" :
"=A" (x));
115 #elif defined(__x86_64__) 116 inline unsigned long long rdtsc(
void) {
118 __asm__ __volatile__ (
"rdtsc" :
"=a"(lo),
"=d"(hi));
119 return ( (
unsigned long long)lo)|( ((
unsigned long long)hi)<<32 );
static bool activelyTiming()
Definition: perf.H:80
timed_region()
Definition: perf.H:92
long t0
Definition: perf.H:78
static void activelyTiming(bool f)
Definition: perf.H:84
long tick()
Definition: perf.H:13
~timed_region()
Definition: perf.H:101
long time()
Definition: perf.H:23
probe(const std::string &msg)
Definition: perf.H:59
std::string describeNanoTime(long x)
Definition: perf.H:32
void report() const
Definition: perf.H:63
long t0
Definition: perf.H:58
std::string msg
Definition: perf.H:57