PAPI 7.1.0.0
Loading...
Searching...
No Matches
cpu_utils.c File Reference

Returns information about CPUs. More...

Include dependency graph for cpu_utils.c:

Go to the source code of this file.

Functions

int cpu_get_vendor (char *vendor)
 
int cpu_get_name (char *name)
 
int cpu_get_attribute (CPU_attr_e attr, int *value)
 
int cpu_get_attribute_at (CPU_attr_e attr, int loc, int *value)
 
static int get_cache_level (_sysdetect_cache_level_info_t *clevel_ptr, int type)
 
int cpu_get_cache_info (CPU_attr_e attr, int level, _sysdetect_cache_level_info_t *clevel_ptr, int *value)
 

Detailed Description

Author
Giuseppe Congiu gcong.nosp@m.iu@i.nosp@m.cl.ut.nosp@m.k.ed.nosp@m.u

Definition in file cpu_utils.c.

Function Documentation

◆ cpu_get_attribute()

int cpu_get_attribute ( CPU_attr_e  attr,
int value 
)

Definition at line 55 of file cpu_utils.c.

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}
int arm_cpu_get_attribute(CPU_attr_e attr, int *value)
int os_cpu_get_attribute(CPU_attr_e attr, int *value)
Definition: os_cpu_utils.c:30
int powerpc_cpu_get_attribute(CPU_attr_e attr, int *value)
int x86_cpu_get_attribute(CPU_attr_e attr, int *value)
Definition: x86_cpu_utils.c:94
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cpu_get_attribute_at()

int cpu_get_attribute_at ( CPU_attr_e  attr,
int  loc,
int value 
)

Definition at line 68 of file cpu_utils.c.

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}
int arm_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
int os_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
Definition: os_cpu_utils.c:42
int powerpc_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
int x86_cpu_get_attribute_at(CPU_attr_e attr, int loc, int *value)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cpu_get_cache_info()

int cpu_get_cache_info ( CPU_attr_e  attr,
int  level,
_sysdetect_cache_level_info_t clevel_ptr,
int value 
)

Definition at line 94 of file cpu_utils.c.

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
static int get_cache_level(_sysdetect_cache_level_info_t *clevel_ptr, int type)
Definition: cpu_utils.c:81
#define CPU_ERROR
Definition: cpu_utils.h:5
#define CPU_SUCCESS
Definition: cpu_utils.h:4
@ 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
#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
PAPI_mh_cache_info_t cache[PAPI_MH_MAX_LEVELS]
Definition: sysdetect.h:57
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cpu_get_name()

int cpu_get_name ( char *  name)

Definition at line 42 of file cpu_utils.c.

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}
int arm_cpu_get_name(char *name)
int os_cpu_get_name(char *name)
Definition: os_cpu_utils.c:18
int powerpc_cpu_get_name(char *name)
const char * name
Definition: rocs.c:225
int x86_cpu_get_name(char *name)
Definition: x86_cpu_utils.c:88
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cpu_get_vendor()

int cpu_get_vendor ( char *  vendor)

Definition at line 29 of file cpu_utils.c.

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}
int arm_cpu_get_vendor(char *vendor)
Definition: arm_cpu_utils.c:72
int os_cpu_get_vendor(char *vendor)
Definition: os_cpu_utils.c:6
int powerpc_cpu_get_vendor(char *vendor)
int x86_cpu_get_vendor(char *vendor)
Definition: x86_cpu_utils.c:82
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_cache_level()

static int get_cache_level ( _sysdetect_cache_level_info_t clevel_ptr,
int  type 
)
static

Definition at line 81 of file cpu_utils.c.

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}
uint16_t type
Here is the caller graph for this function: