FARGOS/VISTA Object Management Environment Core
..
FARGOS/VISTA Object Management Environment Core Table of Contents
IAPerf.h
Go to the documentation of this file.
1
//
2
// IAPERF.H
3
//
4
5
#include <stdio.h>
6
7
// RDTSC functions
8
9
10
#ifdef __linux__
11
12
# ifdef __ia64__
13
14
# ifdef __INTEL_COMPILER
15
16
# ifdef __cplusplus
17
extern
"C"
{
18
unsigned
__int64 __getReg(
int
whichReg);
19
}
20
# else
21
unsigned
__int64 __getReg(
int
whichReg);
22
# endif
23
24
# pragma intrinsic(__getReg)
25
# define INL_REGID_APITC 3116
26
27
unsigned
__int64
rdtsc
()
28
{
29
volatile
unsigned
__int64 temp;
30
31
temp = __getReg(INL_REGID_APITC);
32
33
return
temp;
34
}
35
36
# else // __INTEL_COMPILER
37
38
// Assume 64-bit gcc
39
unsigned
long
rdtsc
()
40
{
41
volatile
unsigned
long
temp;
42
43
__asm__ __volatile__(
"mov %0=ar.itc"
44
:
"=r"
(temp)
":: memory"
);
45
46
return
temp;
47
}
48
49
# endif // __INTEL_COMPILER
50
51
# else // __ia64__
52
53
// Assume IA32, gcc or Intel Compiler
54
unsigned
long
long
rdtsc
()
55
{
56
unsigned
long
long
temp;
57
58
__asm__ __volatile__(
59
"cpuid\n\t"
60
"rdtsc\n\t"
61
"leal %0, %%ecx\n\t"
62
"movl %%eax, (%%ecx)\n\t"
63
"movl %%edx, 4(%%ecx)\n\t"
64
:
65
:
"m"
(temp)
66
:
"%eax"
,
"%ebx"
,
"%ecx"
,
"%edx"
);
67
68
return
temp;
69
}
70
71
# endif // __ia64__
72
73
#else // __linux__
74
75
# ifdef WIN64
76
77
// Assume Microsoft or Intel Compiler
78
# ifdef __cplusplus
79
extern
"C"
{
80
unsigned
__int64 __getReg(
int
whichReg);
81
}
82
# else
83
unsigned
__int64 __getReg(
int
whichReg);
84
# endif
85
86
# pragma intrinsic(__getReg)
87
# define INL_REGID_APITC 3116
88
89
unsigned
__int64
rdtsc
()
90
{
91
volatile
unsigned
__int64 temp;
92
93
temp = __getReg(INL_REGID_APITC);
94
95
return
temp;
96
}
97
98
# else // WIN64
99
100
// Assume WIN32 with Microsoft or Intel Compiler
101
unsigned
__int64
rdtsc
()
102
{
103
volatile
unsigned
__int64 temp;
104
105
_asm cpuid _asm
rdtsc
106
107
_asm lea ecx,
108
temp _asm mov[ecx], eax _asm mov[ecx + 4], edx
109
110
return
temp;
111
}
112
113
# endif // WIN64
114
115
#endif // __linux__
116
117
118
// The IAperf Macros
119
120
#ifdef __linux__
121
122
# define PERFINITMHZ(clkspd) \
123
unsigned long long clocks; \
124
double clockspeed = (unsigned long long) clkspd * 1000000;
125
126
# define PERFREPORT printf("time elapsed = %f sec\n", ((double) clocks) / clockspeed);
127
128
#else
129
130
# define PERFINITMHZ(clkspd) \
131
unsigned __int64 clocks; \
132
double clockspeed = (double) 1000000 * clkspd;
133
134
# define PERFREPORT printf("time elapsed = %f sec\n", ((double) clocks) / clockspeed);
135
136
#endif
137
138
139
#define PERFSTART clocks = rdtsc();
140
141
#define PERFSTOP clocks = rdtsc() - clocks;
142
143
/* vim: set expandtab shiftwidth=4 tabstop=4: */
rdtsc
unsigned __int64 rdtsc()
Definition:
IAPerf.h:101
vista
types
IAPerf.h
Generated by
1.8.17
Generated: Fri Jul 31 2020 18:19:14
Support Information