blob: a0b9373c0553444236e3f044e15f88b027524b57 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#ifndef NJAKSDTHASKJERAXJGFBZJDLAGZ
#define NJAKSDTHASKJERAXJGFBZJDLAGZ
// At most one of the flags
// PM_TIMER_MSVC
// PM_TIMER_CLOCK_GETTIME
// PM_TIMER_GETRUSAGE
// PM_TIMER_EXTERNAL
// PM_TIMER_NONE
// can be defined externally. If PM_TIMER_EXTERNAL is defined,
// then there must exist a definition of function "double get_time()" elsewhere.
#if defined (PM_TIMER_MSVC) || defined (PM_TIMER_CLOCK_GETTIME) || defined (PM_TIMER_GETRUSAGE) || defined (PM_TIMER_EXTERNAL) || defined (PM_TIMER_NONE)
#else
// default option
#ifdef _MSC_VER
#define PM_TIMER_MSVC
#elif defined(__APPLE_CC__)
#define PM_TIMER_GETRUSAGE
#else
#define PM_TIMER_CLOCK_GETTIME
#endif
#endif
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
#ifdef PM_TIMER_MSVC
#include <windows.h>
inline double get_time()
{
LARGE_INTEGER t, frequency;
QueryPerformanceCounter(&t);
QueryPerformanceFrequency(&frequency);
return (double)t.QuadPart/(double)frequency.QuadPart;
}
#endif
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
#ifdef PM_TIMER_CLOCK_GETTIME
#include <time.h>
inline double get_time()
{
struct timespec t;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t);
return (double)t.tv_nsec*1.00E-9 + (double)t.tv_sec;
}
#endif
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
#ifdef PM_TIMER_GETRUSAGE
#include <sys/resource.h>
inline double get_time()
{
struct rusage t;
getrusage (RUSAGE_SELF, &t);
return (double)t.ru_utime.tv_usec*1.00E-6 + (double)t.ru_utime.tv_sec;
}
#endif
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
#ifdef PM_TIMER_EXTERNAL
extern double get_time();
#endif
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
#ifdef PM_TIMER_NONE
inline double get_time() { return 0; }
#endif
#endif
|