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
21void 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);
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);
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);
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);
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}
void system_cpuid(char *name, size_t len)
Definition cpuid.c:21
#define MAXLEN
Definition cpuid.c:16
__global__ void dirichlet_apply_scalar_kernel(const int *__restrict__ msk, T *__restrict__ x, const T g, const int m)
real * buf
Definition pipecg_aux.cu:42