PAPI 7.1.0.0
Loading...
Searching...
No Matches
cpu_utils.c
Go to the documentation of this file.
1
10#include <stdio.h>
11#include <string.h>
12#include <stdarg.h>
13#include <ctype.h>
14
15#include "sysdetect.h"
16#include "cpu_utils.h"
17
18#if defined(__x86_64__) || defined(__amd64__)
19#include "x86_cpu_utils.h"
20#elif defined(__powerpc__)
21#include "powerpc_cpu_utils.h"
22#elif defined(__arm__) || defined(__aarch64__)
23#include "arm_cpu_utils.h"
24#endif
25
26#include "os_cpu_utils.h"
27
28int
29cpu_get_vendor( char *vendor )
30{
31#if defined(__x86_64__) || defined(__amd64__)
32 return x86_cpu_get_vendor(vendor);
33#elif defined(__powerpc__)
34 return powerpc_cpu_get_vendor(vendor);
35#elif defined(__arm__) || defined(__aarch64__)
36 return arm_cpu_get_vendor(vendor);
37#endif
38 return os_cpu_get_vendor(vendor);
39}
40
41int
43{
44#if defined(__x86_64__) || defined(__amd64__)
45 return x86_cpu_get_name(name);
46#elif defined(__powerpc__)
48#elif defined(__arm__) || defined(__aarch64__)
49 return arm_cpu_get_name(name);
50#endif
51 return os_cpu_get_name(name);
52}
53
54int
55cpu_get_attribute( CPU_attr_e attr, int *value )
56{
57#if defined(__x86_64__) || defined(__amd64__)
58 return x86_cpu_get_attribute(attr, value);
59#elif defined(__powerpc__)
60 return powerpc_cpu_get_attribute(attr, value);
61#elif defined(__arm__) || defined(__aarch64__)
62 return arm_cpu_get_attribute(attr, value);
63#endif
64 return os_cpu_get_attribute(attr, value);
65}
66
67int
68cpu_get_attribute_at( CPU_attr_e attr, int loc, int *value )
69{
70#if defined(__x86_64__) || defined(__amd64__)
71 return x86_cpu_get_attribute_at(attr, loc, value);
72#elif defined(__powerpc__)
73 return powerpc_cpu_get_attribute_at(attr, loc, value);
74#elif defined(__arm__) || defined(__aarch64__)
75 return arm_cpu_get_attribute_at(attr, loc, value);
76#endif
77 return os_cpu_get_attribute_at(attr, loc, value);
78}
79
80static int
82{
83 int i;
84
85 for (i = 0; i < clevel_ptr->num_caches; ++i) {
86 if (clevel_ptr->cache[i].type == type)
87 return i + 1;
88 }
89
90 return 0;
91}
92
93int
94cpu_get_cache_info( CPU_attr_e attr, int level, _sysdetect_cache_level_info_t *clevel_ptr, int *value )
95{
96 int status = CPU_SUCCESS;
97 int i;
98
99 *value = 0;
100
102 return CPU_ERROR;
103
104 switch(attr) {
106 if (get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_INST)) {
107 *value = 1;
108 }
109 break;
111 if (get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_DATA)) {
112 *value = 1;
113 }
114 break;
116 if (get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_UNIFIED)) {
117 *value = 1;
118 }
119 break;
121 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_INST))) {
122 *value = clevel_ptr[level-1].cache[i-1].size;
123 }
124 break;
126 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_INST))) {
127 *value = clevel_ptr[level-1].cache[i-1].line_size;
128 }
129 break;
131 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_INST))) {
132 *value = clevel_ptr[level-1].cache[i-1].num_lines;
133 }
134 break;
136 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_INST))) {
137 *value = clevel_ptr[level-1].cache[i-1].associativity;
138 }
139 break;
141 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_DATA))) {
142 *value = clevel_ptr[level-1].cache[i-1].size;
143 }
144 break;
146 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_DATA))) {
147 *value = clevel_ptr[level-1].cache[i-1].line_size;
148 }
149 break;
151 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_DATA))) {
152 *value = clevel_ptr[level-1].cache[i-1].num_lines;
153 }
154 break;
156 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_DATA))) {
157 *value = clevel_ptr[level-1].cache[i-1].associativity;
158 }
159 break;
161 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_UNIFIED))) {
162 *value = clevel_ptr[level-1].cache[i-1].size;
163 }
164 break;
166 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_UNIFIED))) {
167 *value = clevel_ptr[level-1].cache[i-1].line_size;
168 }
169 break;
171 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_UNIFIED))) {
172 *value = clevel_ptr[level-1].cache[i-1].num_lines;
173 }
174 break;
176 if ((i = get_cache_level(&clevel_ptr[level-1], PAPI_MH_TYPE_UNIFIED))) {
177 *value = clevel_ptr[level-1].cache[i-1].associativity;
178 }
179 break;
180 default:
181 status = CPU_ERROR;
182 }
183
184 return status;
185}
int i
int arm_cpu_get_attribute(CPU_attr_e attr, int *value)
int arm_cpu_get_name(char *name)
int arm_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
int arm_cpu_get_vendor(char *vendor)
Definition: arm_cpu_utils.c:72
int cpu_get_attribute(CPU_attr_e attr, int *value)
Definition: cpu_utils.c:55
int cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
Definition: cpu_utils.c:68
int cpu_get_cache_info(CPU_attr_e attr, int level, _sysdetect_cache_level_info_t *clevel_ptr, int *value)
Definition: cpu_utils.c:94
int cpu_get_name(char *name)
Definition: cpu_utils.c:42
static int get_cache_level(_sysdetect_cache_level_info_t *clevel_ptr, int type)
Definition: cpu_utils.c:81
int cpu_get_vendor(char *vendor)
Definition: cpu_utils.c:29
#define CPU_ERROR
Definition: cpu_utils.h:5
#define CPU_SUCCESS
Definition: cpu_utils.h:4
CPU_attr_e
Definition: cpu_utils.h:7
@ CPU_ATTR__CACHE_INST_TOT_SIZE
Definition: cpu_utils.h:21
@ CPU_ATTR__CACHE_UNIF_TOT_SIZE
Definition: cpu_utils.h:29
@ CPU_ATTR__CACHE_DATA_ASSOCIATIVITY
Definition: cpu_utils.h:28
@ CPU_ATTR__CACHE_INST_LINE_SIZE
Definition: cpu_utils.h:22
@ CPU_ATTR__CACHE_UNIF_LINE_SIZE
Definition: cpu_utils.h:30
@ CPU_ATTR__CACHE_DATA_NUM_LINES
Definition: cpu_utils.h:27
@ CPU_ATTR__CACHE_UNIF_ASSOCIATIVITY
Definition: cpu_utils.h:32
@ CPU_ATTR__CACHE_INST_PRESENT
Definition: cpu_utils.h:18
@ CPU_ATTR__CACHE_DATA_PRESENT
Definition: cpu_utils.h:19
@ CPU_ATTR__CACHE_DATA_LINE_SIZE
Definition: cpu_utils.h:26
@ CPU_ATTR__CACHE_INST_ASSOCIATIVITY
Definition: cpu_utils.h:24
@ CPU_ATTR__CACHE_INST_NUM_LINES
Definition: cpu_utils.h:23
@ CPU_ATTR__CACHE_UNIF_NUM_LINES
Definition: cpu_utils.h:31
@ CPU_ATTR__CACHE_DATA_TOT_SIZE
Definition: cpu_utils.h:25
@ CPU_ATTR__CACHE_UNIF_PRESENT
Definition: cpu_utils.h:20
#define PAPI_MAX_MEM_HIERARCHY_LEVELS
Definition: f90papi.h:103
uint16_t type
int os_cpu_get_attribute(CPU_attr_e attr, int *value)
Definition: os_cpu_utils.c:30
int os_cpu_get_vendor(char *vendor)
Definition: os_cpu_utils.c:6
int os_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
Definition: os_cpu_utils.c:42
int os_cpu_get_name(char *name)
Definition: os_cpu_utils.c:18
#define PAPI_MH_TYPE_DATA
Definition: papi.h:720
#define PAPI_MH_TYPE_INST
Definition: papi.h:719
#define PAPI_MH_TYPE_UNIFIED
Definition: papi.h:723
int powerpc_cpu_get_name(char *name)
int powerpc_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
int powerpc_cpu_get_attribute(CPU_attr_e attr, int *value)
int powerpc_cpu_get_vendor(char *vendor)
const char * name
Definition: rocs.c:225
PAPI_mh_cache_info_t cache[PAPI_MH_MAX_LEVELS]
Definition: sysdetect.h:57
int x86_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
int x86_cpu_get_vendor(char *vendor)
Definition: x86_cpu_utils.c:82
int x86_cpu_get_attribute(CPU_attr_e attr, int *value)
Definition: x86_cpu_utils.c:94
int x86_cpu_get_name(char *name)
Definition: x86_cpu_utils.c:88