The ROme OpTimistic Simulator  3.0.0
A General-Purpose Multithreaded Parallel/Distributed Simulation Platform
timer.h
Go to the documentation of this file.
1 
12 #pragma once
13 
14 #include <arch/platform.h>
15 
16 #include <stdint.h>
17 #include <time.h>
18 
20 typedef uint_fast64_t timer_uint;
21 
22 #ifdef __POSIX
23 #include <sys/time.h>
24 
25 inline timer_uint timer_new(void)
26 {
27  struct timeval tmptv;
28  gettimeofday(&tmptv, NULL);
29  return (timer_uint) tmptv.tv_sec * 1000000U + tmptv.tv_usec;
30 }
31 
32 inline timer_uint timer_value(timer_uint start)
33 {
34  return timer_new() - start;
35 }
36 
37 #endif
38 
39 #ifdef __WINDOWS
40 #include <windows.h>
41 
42 extern timer_uint timer_perf_freq;
43 
44 inline timer_uint timer_new(void)
45 {
46  LARGE_INTEGER __start_time;
47  QueryPerformanceCounter(&__start_time);
48  return (timer_uint)__start_time.QuadPart;
49 }
50 
51 
52 inline timer_uint timer_value(timer_uint start)
53 {
54  if (unlikely(timer_perf_freq == 0)) {
55  LARGE_INTEGER __perf;
56  QueryPerformanceFrequency(&__perf);
57  timer_perf_freq = __perf.QuadPart;
58  }
59  return (timer_new() - start) / timer_perf_freq;
60 }
61 
62 #endif
63 
timer_uint
uint_fast64_t timer_uint
Definition: timer.h:20
platform.h
Determine on what OS we are compiling.
unlikely
#define unlikely(exp)
Optimize the branch as likely not taken.
Definition: core.h:59
timer_value
timer_uint timer_value(timer_uint start)
Computes a time interval measure using a previous timer_uint value.
timer_new
timer_uint timer_new(void)
Gets a new starting point for an time interval measure.