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

Scan functions for all Vendor CPU systems. More...

Include dependency graph for cpu.c:

Go to the source code of this file.

Macros

#define CPU_CALL(call, err_handle)
 

Functions

static void fill_cpu_info (_sysdetect_cpu_info_t *info)
 
void open_cpu_dev_type (_sysdetect_dev_type_info_t *dev_type_info)
 
void close_cpu_dev_type (_sysdetect_dev_type_info_t *dev_type_info)
 

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.c.

Macro Definition Documentation

◆ CPU_CALL

#define CPU_CALL (   call,
  err_handle 
)
Value:
do { \
int _status = (call); \
if (_status != CPU_SUCCESS) { \
SUBDBG("error: function %s failed with error %d\n", #call, _status); \
err_handle; \
} \
} while(0)
#define CPU_SUCCESS
Definition: cpu_utils.h:4

Definition at line 20 of file cpu.c.

Function Documentation

◆ close_cpu_dev_type()

void close_cpu_dev_type ( _sysdetect_dev_type_info_t dev_type_info)

Definition at line 150 of file cpu.c.

151{
152 papi_free(dev_type_info->dev_info_arr);
153}
#define papi_free(a)
Definition: papi_memory.h:35
_sysdetect_dev_info_u * dev_info_arr
Definition: sysdetect.h:90

◆ fill_cpu_info()

static void fill_cpu_info ( _sysdetect_cpu_info_t info)
static

Definition at line 29 of file cpu.c.

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}
#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
@ 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__CACHE_UNIF_PRESENT
Definition: cpu_utils.h:20
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
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
Here is the call graph for this function:
Here is the caller graph for this function:

◆ open_cpu_dev_type()

void open_cpu_dev_type ( _sysdetect_dev_type_info_t dev_type_info)

Definition at line 130 of file cpu.c.

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}
static void fill_cpu_info(_sysdetect_cpu_info_t *info)
Definition: cpu.c:29
int cpu_get_vendor(char *vendor)
Definition: cpu_utils.c:29
@ CPU_ATTR__VENDOR_ID
Definition: cpu_utils.h:12
#define PAPI_DEV_TYPE_ID__CPU
Definition: f90papi.h:93
#define papi_calloc(a, b)
Definition: papi_memory.h:37
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
Here is the call graph for this function: