PAPI 7.1.0.0
Loading...
Searching...
No Matches
cpu.c
Go to the documentation of this file.
1
12#include <stdio.h>
13#include <string.h>
14#include <stdlib.h>
15
16#include "sysdetect.h"
17#include "cpu.h"
18#include "cpu_utils.h"
19
20#define CPU_CALL(call, err_handle) do { \
21 int _status = (call); \
22 if (_status != CPU_SUCCESS) { \
23 SUBDBG("error: function %s failed with error %d\n", #call, _status); \
24 err_handle; \
25 } \
26} while(0)
27
28static void
30{
32 strcpy(info->name, "UNKNOWN"));
34 info->cpuid_family = -1);
36 info->cpuid_model = -1);
38 info->cpuid_stepping = -1);
40 info->sockets = -1);
42 info->numas = -1);
44 info->cores = -1);
46 info->threads = -1);
47
48 int cache_levels;
50 cache_levels = 0);
51
52 int level, a, b, c;
53 for (level = 1; level <= cache_levels; ++level) {
57
58 if (!(a || b || c)) {
59 /* No caches at this level */
60 break;
61 }
62
63 int *num_caches = &info->clevel[level-1].num_caches;
64 if (a) {
65 info->clevel[level-1].cache[*num_caches].type = PAPI_MH_TYPE_INST;
67 &info->clevel[level-1].cache[*num_caches].size),
68 info->clevel[level-1].cache[*num_caches].size = 0);
70 &info->clevel[level-1].cache[*num_caches].line_size),
71 info->clevel[level-1].cache[*num_caches].line_size = 0);
73 &info->clevel[level-1].cache[*num_caches].num_lines),
74 info->clevel[level-1].cache[*num_caches].num_lines = 0);
76 &info->clevel[level-1].cache[*num_caches].associativity),
77 info->clevel[level-1].cache[*num_caches].associativity = 0);
78 ++(*num_caches);
79 }
80
81 if (b) {
82 info->clevel[level-1].cache[*num_caches].type = PAPI_MH_TYPE_DATA;
84 &info->clevel[level-1].cache[*num_caches].size),
85 info->clevel[level-1].cache[*num_caches].size = 0);
87 &info->clevel[level-1].cache[*num_caches].line_size),
88 info->clevel[level-1].cache[*num_caches].line_size = 0);
90 &info->clevel[level-1].cache[*num_caches].num_lines),
91 info->clevel[level-1].cache[*num_caches].num_lines = 0);
93 &info->clevel[level-1].cache[*num_caches].associativity),
94 info->clevel[level-1].cache[*num_caches].associativity = 0);
95 ++(*num_caches);
96 }
97
98 if (c) {
99 info->clevel[level-1].cache[*num_caches].type = PAPI_MH_TYPE_UNIFIED;
101 &info->clevel[level-1].cache[*num_caches].size),
102 info->clevel[level-1].cache[*num_caches].size = 0);
104 &info->clevel[level-1].cache[*num_caches].line_size),
105 info->clevel[level-1].cache[*num_caches].line_size = 0);
107 &info->clevel[level-1].cache[*num_caches].num_lines),
108 info->clevel[level-1].cache[*num_caches].num_lines= 0);
110 &info->clevel[level-1].cache[*num_caches].associativity),
111 info->clevel[level-1].cache[*num_caches].associativity = 0);
112 ++(*num_caches);
113 }
114 }
115
116 for (a = 0; a < info->numas; ++a) {
118 info->numa_memory[a] = 0);
119 }
120
121 for (a = 0; a < info->threads * info->cores * info->sockets; ++a) {
123 info->numa_affinity[a] = 0);
124 }
125
126 info->cache_levels = level;
127}
128
129void
131{
132 memset(dev_type_info, 0, sizeof(*dev_type_info));
133 dev_type_info->id = PAPI_DEV_TYPE_ID__CPU;
134
135 CPU_CALL(cpu_get_vendor(dev_type_info->vendor),
136 strcpy(dev_type_info->vendor, "UNKNOWN"));
137
139 dev_type_info->vendor_id = -1);
140
141 strcpy(dev_type_info->status, "Device Initialized");
142 dev_type_info->num_devices = 1;
143
144 _sysdetect_cpu_info_t *arr = papi_calloc(1, sizeof(*arr));
145 fill_cpu_info(arr);
146 dev_type_info->dev_info_arr = (_sysdetect_dev_info_u *)arr;
147}
148
149void
151{
152 papi_free(dev_type_info->dev_info_arr);
153}
void open_cpu_dev_type(_sysdetect_dev_type_info_t *dev_type_info)
Definition: cpu.c:130
void close_cpu_dev_type(_sysdetect_dev_type_info_t *dev_type_info)
Definition: cpu.c:150
static void fill_cpu_info(_sysdetect_cpu_info_t *info)
Definition: cpu.c:29
#define CPU_CALL(call, err_handle)
Definition: cpu.c:20
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_name(char *name)
Definition: cpu_utils.c:42
int cpu_get_vendor(char *vendor)
Definition: cpu_utils.c:29
@ CPU_ATTR__CPUID_MODEL
Definition: cpu_utils.h:14
@ CPU_ATTR__CACHE_MAX_NUM_LEVELS
Definition: cpu_utils.h:17
@ CPU_ATTR__NUM_THREADS
Definition: cpu_utils.h:11
@ CPU_ATTR__CPUID_FAMILY
Definition: cpu_utils.h:13
@ CPU_ATTR__CACHE_INST_TOT_SIZE
Definition: cpu_utils.h:21
@ CPU_ATTR__HWTHREAD_NUMA_AFFINITY
Definition: cpu_utils.h:34
@ 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__NUMA_MEM_SIZE
Definition: cpu_utils.h:36
@ CPU_ATTR__NUM_NODES
Definition: cpu_utils.h:9
@ 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__CPUID_STEPPING
Definition: cpu_utils.h:15
@ CPU_ATTR__CACHE_INST_PRESENT
Definition: cpu_utils.h:18
@ CPU_ATTR__NUM_CORES
Definition: cpu_utils.h:10
@ 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__NUM_SOCKETS
Definition: cpu_utils.h:8
@ CPU_ATTR__VENDOR_ID
Definition: cpu_utils.h:12
@ CPU_ATTR__CACHE_UNIF_PRESENT
Definition: cpu_utils.h:20
#define PAPI_DEV_TYPE_ID__CPU
Definition: f90papi.h:93
static double a[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:38
static double b[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:39
static double c[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:40
#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
#define papi_calloc(a, b)
Definition: papi_memory.h:37
#define papi_free(a)
Definition: papi_memory.h:35
PAPI_mh_cache_info_t cache[PAPI_MH_MAX_LEVELS]
Definition: sysdetect.h:57
_sysdetect_cache_level_info_t clevel[PAPI_MAX_MEM_HIERARCHY_LEVELS]
Definition: sysdetect.h:70
int numa_affinity[PAPI_MAX_NUM_THREADS]
Definition: sysdetect.h:74
char name[PAPI_MAX_STR_LEN]
Definition: sysdetect.h:61
int numa_memory[PAPI_MAX_NUM_NODES]
Definition: sysdetect.h:72
char status[PAPI_MAX_STR_LEN]
Definition: sysdetect.h:88
char vendor[PAPI_MAX_STR_LEN]
Definition: sysdetect.h:86
PAPI_dev_type_id_e id
Definition: sysdetect.h:85
_sysdetect_dev_info_u * dev_info_arr
Definition: sysdetect.h:90