Neko
1.99.1
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
cpuid.c
Go to the documentation of this file.
1
#if defined(__APPLE__)
2
#include <sys/ioctl.h>
3
#include <sys/sysctl.h>
4
#include <sys/types.h>
5
#include <unistd.h>
6
#elif defined(__x86_64__)
7
#if defined(HAVE_CPUID_H)
8
#include <cpuid.h>
9
#endif
10
#endif
11
12
#include <stdio.h>
13
#include <string.h>
14
#include <stdint.h>
15
16
#define MAXLEN 2048
17
21
void
system_cpuid
(
char
*name,
size_t
len) {
22
#if defined(__APPLE__)
23
sysctlbyname
(
"machdep.cpu.brand_string"
, name, &len,
NULL
, 0);
24
#elif defined(__x86_64__) && defined(HAVE_CPUID_H)
25
uint32_t
brand
[12];
26
__get_cpuid
(0x80000002,
brand
+0x0,
brand
+0x1,
brand
+0x2,
brand
+0x3);
27
__get_cpuid
(0x80000003,
brand
+0x4,
brand
+0x5,
brand
+0x6,
brand
+0x7);
28
__get_cpuid
(0x80000004,
brand
+0x8,
brand
+0x9,
brand
+0xa,
brand
+0xb);
29
strncpy
(name, (
char
*)
brand
, len);
30
#elif defined(_ARCH_PPC64) || defined(__aarch64__)
31
FILE
*
fp
=
fopen
(
"/proc/cpuinfo"
,
"r"
);
32
char
buf
[
MAXLEN
];
33
const
char
*
delim
=
":\n"
;
34
#if defined(__aarch64__)
35
/* Generic ARM unless we found something known */
36
strncpy
(name,
"ARM"
, len);
37
int
cpufj
= 0;
38
int
cpuarm
= 0;
39
#endif
40
while
(
fgets
(
buf
,
MAXLEN
,
fp
)) {
41
#if defined(_ARCH_PPC64)
42
if
(
strstr
(
buf
,
"cpu"
)) {
43
char
*
token
=
strtok
(
buf
,
delim
);
44
token
=
strtok
(
NULL
,
delim
);
45
strncpy
(name,
token
+1, len);
46
break
;
47
}
48
#elif defined(__aarch64__)
49
if
(
strstr
(
buf
,
"CPU implementer"
)) {
50
char
*
token
=
strtok
(
buf
,
delim
);
51
token
=
strtok
(
NULL
,
delim
);
52
if
(
strstr
(
token
,
"0x46"
)) {
53
cpufj
= 1;
54
continue
;
55
}
56
else
if
(
strstr
(
token
,
"0x41"
)) {
57
cpuarm
= 1;
58
continue
;
59
}
60
}
61
62
if
(
strstr
(
buf
,
"CPU part"
) &&
cpufj
) {
63
char
*
token
=
strtok
(
buf
,
delim
);
64
token
=
strtok
(
NULL
,
delim
);
65
if
(
strstr
(
token
,
"0x001"
)) {
66
strncpy
(name,
"Fujitsu A64FX"
, len);
67
break
;
68
}
69
}
70
71
if
(
strstr
(
buf
,
"CPU part"
) &&
cpuarm
) {
72
char
*
token
=
strtok
(
buf
,
delim
);
73
token
=
strtok
(
NULL
,
delim
);
74
if
(
strstr
(
token
,
"0xd03"
)) {
75
strncpy
(name,
"ARM Cortex A53"
, len);
76
break
;
77
}
78
else
if
(
strstr
(
token
,
"0xd04"
)) {
79
strncpy
(name,
"ARM Cortex A35"
, len);
80
break
;
81
}
82
else
if
(
strstr
(
token
,
"0xd05"
)) {
83
strncpy
(name,
"ARM Cortex A55"
, len);
84
break
;
85
}
86
else
if
(
strstr
(
token
,
"0xd07"
)) {
87
strncpy
(name,
"ARM Cortex A57"
, len);
88
break
;
89
}
90
else
if
(
strstr
(
token
,
"0xd08"
)) {
91
strncpy
(name,
"ARM Cortex A72"
, len);
92
break
;
93
}
94
else
if
(
strstr
(
token
,
"0xd09"
)) {
95
strncpy
(name,
"ARM Cortex A73"
, len);
96
break
;
97
}
98
else
if
(
strstr
(
token
,
"0xd0a"
)) {
99
strncpy
(name,
"ARM Cortex A75"
, len);
100
break
;
101
}
102
else
if
(
strstr
(
token
,
"0xd0b"
)) {
103
strncpy
(name,
"ARM Cortex A76"
, len);
104
break
;
105
}
106
else
if
(
strstr
(
token
,
"0xd0c"
)) {
107
strncpy
(name,
"ARM Neoverse N1"
, len);
108
break
;
109
}
110
else
if
(
strstr
(
token
,
"0xd0d"
)) {
111
strncpy
(name,
"ARM Cortex A77"
, len);
112
break
;
113
}
114
else
if
(
strstr
(
token
,
"0xd0e"
)) {
115
strncpy
(name,
"ARM Cortex A76AE"
, len);
116
break
;
117
}
118
else
if
(
strstr
(
token
,
"0xd40"
)) {
119
strncpy
(name,
"ARM Neoverse V1"
, len);
120
break
;
121
}
122
else
if
(
strstr
(
token
,
"0xd41"
)) {
123
strncpy
(name,
"ARM Cortex A78"
, len);
124
break
;
125
}
126
else
if
(
strstr
(
token
,
"0xd42"
)) {
127
strncpy
(name,
"ARM Cortex A78AE"
, len);
128
break
;
129
}
130
else
if
(
strstr
(
token
,
"0xd44"
)) {
131
strncpy
(name,
"ARM Cortex X1"
, len);
132
break
;
133
}
134
else
if
(
strstr
(
token
,
"0xd46"
)) {
135
strncpy
(name,
"ARM Cortex A510"
, len);
136
break
;
137
}
138
else
if
(
strstr
(
token
,
"0xd4c"
)) {
139
strncpy
(name,
"ARM Cortex X1C"
, len);
140
break
;
141
}
142
else
if
(
strstr
(
token
,
"0xd80"
)) {
143
strncpy
(name,
"ARM Cortex A520"
, len);
144
break
;
145
}
146
else
if
(
strstr
(
token
,
"0xd47"
)) {
147
strncpy
(name,
"ARM Cortex A520"
, len);
148
break
;
149
}
150
else
if
(
strstr
(
token
,
"0xd4d"
)) {
151
strncpy
(name,
"ARM Cortex A715"
, len);
152
break
;
153
}
154
else
if
(
strstr
(
token
,
"0xd48"
)) {
155
strncpy
(name,
"ARM Cortex X2"
, len);
156
break
;
157
}
158
else
if
(
strstr
(
token
,
"0xd49"
)) {
159
strncpy
(name,
"ARM Neoverse N2"
, len);
160
break
;
161
}
162
else
if
(
strstr
(
token
,
"0xd4b"
)) {
163
strncpy
(name,
"ARM Cortex A78C"
, len);
164
break
;
165
}
166
else
if
(
strstr
(
token
,
"0xd4c"
)) {
167
strncpy
(name,
"ARM Cortex X1C"
, len);
168
break
;
169
}
170
else
if
(
strstr
(
token
,
"0xd4e"
)) {
171
strncpy
(name,
"ARM Cortex X3"
, len);
172
break
;
173
}
174
else
if
(
strstr
(
token
,
"0xd4f"
)) {
175
strncpy
(name,
"ARM Neoverse V2"
, len);
176
break
;
177
}
178
else
if
(
strstr
(
token
,
"0xd81"
)) {
179
strncpy
(name,
"ARM Cortex A720"
, len);
180
break
;
181
}
182
else
if
(
strstr
(
token
,
"0xd82"
)) {
183
strncpy
(name,
"ARM Cortex X4"
, len);
184
break
;
185
}
186
else
if
(
strstr
(
token
,
"0xd84"
)) {
187
strncpy
(name,
"ARM Neoverse V3"
, len);
188
break
;
189
}
190
else
if
(
strstr
(
token
,
"0xd85"
)) {
191
strncpy
(name,
"ARM Cortex X925"
, len);
192
break
;
193
}
194
else
if
(
strstr
(
token
,
"0xd87"
)) {
195
strncpy
(name,
"ARM Cortex A725"
, len);
196
break
;
197
}
198
else
if
(
strstr
(
token
,
"0xd8e"
)) {
199
strncpy
(name,
"ARM Neoverse N3"
, len);
200
break
;
201
}
202
}
203
#endif
204
}
205
fclose
(
fp
);
206
#else
207
strncpy
(name,
"Unknown CPU"
, len);
208
#endif
209
}
system_cpuid
void system_cpuid(char *name, size_t len)
Definition
cpuid.c:21
MAXLEN
#define MAXLEN
Definition
cpuid.c:16
dirichlet_apply_scalar_kernel
__global__ void dirichlet_apply_scalar_kernel(const int *__restrict__ msk, T *__restrict__ x, const T g, const int m)
Definition
dirichlet_kernel.h:42
buf
real * buf
Definition
pipecg_aux.cu:42
src
common
cpuid.c
Generated on Mon Sep 1 2025 03:49:14 for Neko by
1.9.8