PAPI 7.1.0.0
Loading...
Searching...
No Matches
sysdetect.c
Go to the documentation of this file.
1
14#include <stdio.h>
15#include <string.h>
16#include <stdlib.h>
17#include <inttypes.h>
18
19#include "sysdetect.h"
20#include "nvidia_gpu.h"
21#include "amd_gpu.h"
22#include "cpu.h"
23
25
26typedef struct {
27 void (*open) ( _sysdetect_dev_type_info_t *dev_type_info );
28 void (*close)( _sysdetect_dev_type_info_t *dev_type_info );
30
32 {
35 },
36 {
39 },
40 {
43 },
44};
45
47
48static int _sysdetect_enum_dev_type( int enum_modifier, void **handle );
49static int _sysdetect_get_dev_type_attr( void *handle,
50 PAPI_dev_type_attr_e attr, void *val );
51static int _sysdetect_get_dev_attr( void *handle, int id, PAPI_dev_attr_e attr,
52 void *val );
53static void get_num_threads_per_numa( _sysdetect_cpu_info_t *cpu_info );
54
55static void
57{
58 int id;
59
60 for (id = 0; id < PAPI_DEV_TYPE_ID__MAX_NUM; ++id) {
62 }
63}
64
65static void
67{
68 int id;
69
70 for (id = 0; id < PAPI_DEV_TYPE_ID__MAX_NUM; ++id) {
72 }
73}
74
79static int
81{
82
83 SUBDBG( "_sysdetect_init_component..." );
84
85 /* Export the component id */
87
88 return PAPI_OK;
89}
90
91static int
93{
94 return PAPI_OK;
95}
96
98static int
100{
101
102 SUBDBG( "_sysdetect_shutdown_component..." );
103
105
106 return PAPI_OK;
107}
108
109static int
111{
112 return PAPI_OK;
113}
114
115static void
117{
118 static int initialized;
119
120 if (initialized) {
121 return;
122 }
123
124 init_dev_info( );
125
126 initialized = 1;
127}
128
130int
131_sysdetect_user( int unused __attribute__((unused)), void *in, void *out )
132{
133 int papi_errno = PAPI_OK;
134
136
138 int modifier;
139 void *handle;
140 int id;
141 PAPI_dev_type_attr_e dev_type_attr;
142 PAPI_dev_attr_e dev_attr;
143
144 switch (args->query_type) {
146 modifier = args->query.enumerate.modifier;
147 papi_errno = _sysdetect_enum_dev_type(modifier, out);
148 break;
150 handle = args->query.dev_type.handle;
151 dev_type_attr = args->query.dev_type.attr;
152 papi_errno = _sysdetect_get_dev_type_attr(handle, dev_type_attr,
153 out);
154 break;
156 handle = args->query.dev.handle;
157 id = args->query.dev.id;
158 dev_attr = args->query.dev.attr;
159 papi_errno = _sysdetect_get_dev_attr(handle, id, dev_attr, out);
160 break;
161 default:
162 papi_errno = PAPI_EMISC;
163 }
164
165 return papi_errno;
166}
167
168int
169_sysdetect_enum_dev_type( int enum_modifier, void **handle )
170{
171 static int dev_type_id;
172
173 if (PAPI_DEV_TYPE_ENUM__FIRST == enum_modifier) {
174 dev_type_id = 0;
175 *(void **) handle = &dev_type_info_arr[dev_type_id];
176 return PAPI_OK;
177 }
178
179 int not_found = 1;
180 while (not_found && dev_type_id < PAPI_DEV_TYPE_ID__MAX_NUM) {
181 if ((1 << dev_type_info_arr[dev_type_id].id) & enum_modifier) {
182 *handle = &dev_type_info_arr[dev_type_id];
183 not_found = 0;
184 }
185 ++dev_type_id;
186 }
187
188 if (not_found) {
189 *handle = NULL;
190 dev_type_id = 0;
191 return PAPI_EINVAL;
192 }
193
194 return PAPI_OK;
195}
196
197int
199{
200 int papi_errno = PAPI_OK;
201
202 _sysdetect_dev_type_info_t *dev_type_info =
204
205 switch(attr) {
207 *(int *) val = dev_type_info->id;
208 break;
210 *(int *) val = dev_type_info->vendor_id;
211 break;
213 *(const char **) val = dev_type_info->vendor;
214 break;
216 *(int *) val = dev_type_info->num_devices;
217 break;
219 *(const char **) val = dev_type_info->status;
220 break;
221 default:
222 papi_errno = PAPI_ENOSUPP;
223 }
224
225 return papi_errno;
226}
227
228int
229_sysdetect_get_dev_attr( void *handle, int id, PAPI_dev_attr_e attr, void *val )
230{
231 int papi_errno = PAPI_OK;
232
233 _sysdetect_dev_type_info_t *dev_type_info =
235 /* there is only one cpu vendor/model per system, hence id = 0 */
236 _sysdetect_cpu_info_t *cpu_info =
237 (_sysdetect_cpu_info_t *) &dev_type_info->dev_info_arr[0];
238 _sysdetect_gpu_info_u *gpu_info =
239 (_sysdetect_gpu_info_u *) (dev_type_info->dev_info_arr) + id;
240
241 switch(attr) {
242 /* CPU attributes */
244 *(unsigned int *) val = cpu_info->clevel[0].cache[0].size;
245 break;
247 *(unsigned int *) val = cpu_info->clevel[0].cache[1].size;
248 break;
250 *(unsigned int *) val = cpu_info->clevel[1].cache[0].size;
251 break;
253 *(unsigned int *) val = cpu_info->clevel[2].cache[0].size;
254 break;
256 *(unsigned int *) val = cpu_info->clevel[0].cache[0].line_size;
257 break;
259 *(unsigned int *) val = cpu_info->clevel[0].cache[1].line_size;
260 break;
262 *(unsigned int *) val = cpu_info->clevel[1].cache[0].line_size;
263 break;
265 *(unsigned int *) val = cpu_info->clevel[2].cache[0].line_size;
266 break;
268 *(unsigned int *) val = cpu_info->clevel[0].cache[0].num_lines;
269 break;
271 *(unsigned int *) val = cpu_info->clevel[0].cache[1].num_lines;
272 break;
274 *(unsigned int *) val = cpu_info->clevel[1].cache[0].num_lines;
275 break;
277 *(unsigned int *) val = cpu_info->clevel[2].cache[0].num_lines;
278 break;
280 *(unsigned int *) val = cpu_info->clevel[0].cache[0].associativity;
281 break;
283 *(unsigned int *) val = cpu_info->clevel[0].cache[1].associativity;
284 break;
286 *(unsigned int *) val = cpu_info->clevel[1].cache[0].associativity;
287 break;
289 *(unsigned int *) val = cpu_info->clevel[2].cache[0].associativity;
290 break;
292 *(const char **) val = cpu_info->name;
293 break;
295 *(unsigned int *) val = cpu_info->cpuid_family;
296 break;
298 *(unsigned int *) val = cpu_info->cpuid_model;
299 break;
301 *(unsigned int *) val = cpu_info->cpuid_stepping;
302 break;
304 *(unsigned int *) val = cpu_info->sockets;
305 break;
307 *(unsigned int *) val = cpu_info->numas;
308 break;
310 *(int *) val = cpu_info->cores;
311 break;
313 *(int *) val = cpu_info->threads * cpu_info->cores * cpu_info->sockets;
314 break;
316 *(int *) val = cpu_info->numa_affinity[id];
317 break;
319 get_num_threads_per_numa(cpu_info);
320 *(int *) val = cpu_info->num_threads_per_numa[id];
321 break;
323 *(unsigned int *) val = (cpu_info->numa_memory[id] >> 10);
324 break;
325 /* NVIDIA GPU attributes */
327 *(unsigned long *) val = gpu_info->nvidia.uid;
328 break;
330 *(const char **) val = gpu_info->nvidia.name;
331 break;
333 *(unsigned int *) val = gpu_info->nvidia.warp_size;
334 break;
336 *(unsigned int *) val = gpu_info->nvidia.max_threads_per_block;
337 break;
339 *(unsigned int *) val = gpu_info->nvidia.max_blocks_per_multi_proc;
340 break;
342 *(unsigned int *) val = gpu_info->nvidia.max_shmmem_per_block;
343 break;
345 *(unsigned int *) val = gpu_info->nvidia.max_shmmem_per_multi_proc;
346 break;
348 *(unsigned int *) val = gpu_info->nvidia.max_block_dim_x;
349 break;
351 *(unsigned int *) val = gpu_info->nvidia.max_block_dim_y;
352 break;
354 *(unsigned int *) val = gpu_info->nvidia.max_block_dim_z;
355 break;
357 *(unsigned int *) val = gpu_info->nvidia.max_grid_dim_x;
358 break;
360 *(unsigned int *) val = gpu_info->nvidia.max_grid_dim_y;
361 break;
363 *(unsigned int *) val = gpu_info->nvidia.max_grid_dim_z;
364 break;
366 *(unsigned int *) val = gpu_info->nvidia.multi_processor_count;
367 break;
369 *(unsigned int *) val = gpu_info->nvidia.multi_kernel_per_ctx;
370 break;
372 *(unsigned int *) val = gpu_info->nvidia.can_map_host_mem;
373 break;
375 *(unsigned int *) val = gpu_info->nvidia.can_overlap_comp_and_data_xfer;
376 break;
378 *(unsigned int *) val = gpu_info->nvidia.unified_addressing;
379 break;
381 *(unsigned int *) val = gpu_info->nvidia.managed_memory;
382 break;
384 *(unsigned int *) val = gpu_info->nvidia.major;
385 break;
387 *(unsigned int *) val = gpu_info->nvidia.minor;
388 break;
389 /* AMD GPU attributes */
391 *(unsigned long *) val = gpu_info->amd.uid;
392 break;
394 *(const char **) val = gpu_info->amd.name;
395 break;
397 *(unsigned int *) val = gpu_info->amd.simd_per_compute_unit;
398 break;
400 *(unsigned int *) val = gpu_info->amd.max_threads_per_workgroup;
401 break;
403 *(unsigned int *) val = gpu_info->amd.wavefront_size;
404 break;
406 *(unsigned int *) val = gpu_info->amd.max_waves_per_compute_unit;
407 break;
409 *(unsigned int *) val = gpu_info->amd.max_shmmem_per_workgroup;
410 break;
412 *(unsigned int *) val = gpu_info->amd.max_workgroup_dim_x;
413 break;
415 *(unsigned int *) val = gpu_info->amd.max_workgroup_dim_y;
416 break;
418 *(unsigned int *) val = gpu_info->amd.max_workgroup_dim_z;
419 break;
421 *(unsigned int *) val = gpu_info->amd.max_grid_dim_x;
422 break;
424 *(unsigned int *) val = gpu_info->amd.max_grid_dim_y;
425 break;
427 *(unsigned int *) val = gpu_info->amd.max_grid_dim_z;
428 break;
430 *(unsigned int *) val = gpu_info->amd.compute_unit_count;
431 break;
433 *(unsigned int *) val = gpu_info->amd.major;
434 break;
436 *(unsigned int *) val = gpu_info->amd.minor;
437 break;
438 default:
439 papi_errno = PAPI_ENOSUPP;
440 }
441
442 return papi_errno;
443}
444
445void
447{
448 static int initialized;
449 int k;
450
451 if (initialized) {
452 return;
453 }
454
455 int threads = cpu_info->threads * cpu_info->cores * cpu_info->sockets;
456 for (k = 0; k < threads; ++k) {
457 cpu_info->num_threads_per_numa[cpu_info->numa_affinity[k]]++;
458 }
459
460 initialized = 1;
461}
462
465 .cmp_info = {
466 .name = "sysdetect",
467 .short_name = "sysdetect",
468 .description = "System info detection component",
469 .version = "1.0",
470 .support_version = "n/a",
471 .kernel_version = "n/a",
472 },
473
474 /* Used for general PAPI interactions */
475 .init_component = _sysdetect_init_component,
476 .init_thread = _sysdetect_init_thread,
477 .shutdown_component = _sysdetect_shutdown_component,
478 .shutdown_thread = _sysdetect_shutdown_thread,
479 .user = _sysdetect_user,
480};
static papi_handle_t handle
Definition: Gamum.c:21
void close_amd_gpu_dev_type(_sysdetect_dev_type_info_t *dev_type_info)
Definition: amd_gpu.c:421
void open_amd_gpu_dev_type(_sysdetect_dev_type_info_t *dev_type_info)
Definition: amd_gpu.c:369
int open(const char *pathname, int flags, mode_t mode)
Definition: appio.c:188
int close(int fd)
Definition: appio.c:179
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
#define PAPI_DEV_ATTR__ROCM_UINT_WG_DIM_Y
Definition: f90papi.h:169
#define PAPI_DEV_ATTR__CUDA_UINT_THR_PER_BLK
Definition: f90papi.h:226
#define PAPI_DEV_ATTR__CUDA_UINT_WARP_SIZE
Definition: f90papi.h:114
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_LINE_COUNT
Definition: f90papi.h:32
#define PAPI_DEV_ATTR__ROCM_UINT_GRD_DIM_Y
Definition: f90papi.h:258
#define PAPI_DEV_ATTR__ROCM_UINT_WAVE_PER_CU
Definition: f90papi.h:163
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_PER_SM
Definition: f90papi.h:156
#define PAPI_OK
Definition: f90papi.h:73
#define PAPI_DEV_ATTR__CUDA_ULONG_UID
Definition: f90papi.h:192
#define PAPI_DEV_ATTR__CPU_UINT_FAMILY
Definition: f90papi.h:142
#define PAPI_DEV_ATTR__CPU_UINT_SOCKET_COUNT
Definition: f90papi.h:125
#define PAPI_DEV_TYPE_ATTR__INT_PAPI_ID
Definition: f90papi.h:59
#define PAPI_DEV_ATTR__CPU_UINT_THR_PER_NUMA
Definition: f90papi.h:155
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_LINE_SIZE
Definition: f90papi.h:213
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_DIM_Z
Definition: f90papi.h:117
#define PAPI_DEV_ATTR__ROCM_UINT_WAVEFRONT_SIZE
Definition: f90papi.h:252
#define PAPI_DEV_ATTR__CUDA_UINT_UNIFIED_ADDR
Definition: f90papi.h:279
#define PAPI_DEV_ATTR__CUDA_UINT_SM_COUNT
Definition: f90papi.h:249
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_ASSOC
Definition: f90papi.h:35
#define PAPI_DEV_ATTR__CUDA_UINT_GRD_DIM_Y
Definition: f90papi.h:106
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_SIZE
Definition: f90papi.h:251
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_LINE_SIZE
Definition: f90papi.h:128
#define PAPI_DEV_ATTR__CPU_UINT_THREAD_COUNT
Definition: f90papi.h:181
#define PAPI_DEV_TYPE_ATTR__INT_COUNT
Definition: f90papi.h:140
#define PAPI_DEV_ATTR__CPU_UINT_NUMA_COUNT
Definition: f90papi.h:18
#define PAPI_DEV_TYPE_ATTR__INT_VENDOR_ID
Definition: f90papi.h:116
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_LINE_COUNT
Definition: f90papi.h:56
#define PAPI_DEV_ATTR__CUDA_UINT_MANAGED_MEM
Definition: f90papi.h:183
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_SIZE
Definition: f90papi.h:259
#define PAPI_DEV_ATTR__ROCM_UINT_COMP_CAP_MINOR
Definition: f90papi.h:228
#define PAPI_EINVAL
Definition: f90papi.h:115
#define PAPI_ENOSUPP
Definition: f90papi.h:244
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_SIZE
Definition: f90papi.h:31
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_DIM_Y
Definition: f90papi.h:217
#define PAPI_DEV_ATTR__ROCM_CHAR_DEVICE_NAME
Definition: f90papi.h:84
#define PAPI_DEV_ATTR__CUDA_UINT_SHM_PER_BLK
Definition: f90papi.h:216
#define PAPI_DEV_ATTR__ROCM_UINT_WORKGROUP_SIZE
Definition: f90papi.h:118
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_LINE_COUNT
Definition: f90papi.h:15
#define PAPI_EMISC
Definition: f90papi.h:122
#define PAPI_DEV_ATTR__ROCM_UINT_COMP_CAP_MAJOR
Definition: f90papi.h:34
#define PAPI_DEV_ATTR__CPU_CHAR_NAME
Definition: f90papi.h:246
#define PAPI_DEV_ATTR__CUDA_UINT_GRD_DIM_X
Definition: f90papi.h:42
#define PAPI_DEV_ATTR__ROCM_ULONG_UID
Definition: f90papi.h:28
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_LINE_COUNT
Definition: f90papi.h:182
#define PAPI_DEV_TYPE_ATTR__CHAR_NAME
Definition: f90papi.h:126
#define PAPI_DEV_ATTR__CUDA_UINT_MEMCPY_OVERLAP
Definition: f90papi.h:273
#define PAPI_DEV_ATTR__ROCM_UINT_SHM_PER_WG
Definition: f90papi.h:33
#define PAPI_DEV_ATTR__CUDA_UINT_COMP_CAP_MINOR
Definition: f90papi.h:135
#define PAPI_DEV_ATTR__CUDA_UINT_MAP_HOST_MEM
Definition: f90papi.h:151
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_ASSOC
Definition: f90papi.h:23
#define PAPI_DEV_ATTR__CUDA_UINT_SHM_PER_SM
Definition: f90papi.h:218
#define PAPI_DEV_ATTR__CPU_UINT_STEPPING
Definition: f90papi.h:153
#define PAPI_DEV_ATTR__ROCM_UINT_CU_COUNT
Definition: f90papi.h:191
#define PAPI_DEV_ATTR__CPU_UINT_THR_NUMA_AFFINITY
Definition: f90papi.h:29
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_DIM_X
Definition: f90papi.h:166
#define PAPI_DEV_ATTR__CPU_UINT_NUMA_MEM_SIZE
Definition: f90papi.h:221
#define PAPI_DEV_ATTR__ROCM_UINT_SIMD_PER_CU
Definition: f90papi.h:92
#define PAPI_DEV_ATTR__ROCM_UINT_WG_DIM_X
Definition: f90papi.h:145
#define PAPI_DEV_ATTR__CUDA_UINT_MULTI_KERNEL
Definition: f90papi.h:55
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_ASSOC
Definition: f90papi.h:207
#define PAPI_DEV_ATTR__CUDA_UINT_GRD_DIM_Z
Definition: f90papi.h:267
#define PAPI_DEV_ATTR__ROCM_UINT_GRD_DIM_X
Definition: f90papi.h:49
#define PAPI_DEV_TYPE_ENUM__FIRST
Definition: f90papi.h:90
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_SIZE
Definition: f90papi.h:184
#define PAPI_DEV_ATTR__CPU_UINT_MODEL
Definition: f90papi.h:98
#define PAPI_DEV_TYPE_ID__MAX_NUM
Definition: f90papi.h:161
#define PAPI_DEV_ATTR__ROCM_UINT_WG_DIM_Z
Definition: f90papi.h:241
#define PAPI_DEV_ATTR__ROCM_UINT_GRD_DIM_Z
Definition: f90papi.h:20
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_LINE_SIZE
Definition: f90papi.h:232
#define PAPI_DEV_ATTR__CPU_UINT_CORE_COUNT
Definition: f90papi.h:41
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_ASSOC
Definition: f90papi.h:47
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_LINE_SIZE
Definition: f90papi.h:205
#define PAPI_DEV_ATTR__CUDA_CHAR_DEVICE_NAME
Definition: f90papi.h:81
#define PAPI_DEV_TYPE_ATTR__CHAR_STATUS
Definition: f90papi.h:239
#define PAPI_DEV_ATTR__CUDA_UINT_COMP_CAP_MAJOR
Definition: f90papi.h:69
PAPI_dev_type_attr_e
Definition: papi.h:1049
PAPI_dev_attr_e
Definition: papi.h:1068
unsigned long AO_t __attribute__((__aligned__(4)))
Definition: m68k.h:21
void open_nvidia_gpu_dev_type(_sysdetect_dev_type_info_t *dev_type_info)
Definition: nvidia_gpu.c:337
void close_nvidia_gpu_dev_type(_sysdetect_dev_type_info_t *dev_type_info)
Definition: nvidia_gpu.c:386
#define SUBDBG(format, args...)
Definition: papi_debug.h:64
@ PAPI_SYSDETECT_QUERY__DEV_TYPE_ENUM
@ PAPI_SYSDETECT_QUERY__DEV_ATTR
@ PAPI_SYSDETECT_QUERY__DEV_TYPE_ATTR
static int cidx
char name[PAPI_MAX_STR_LEN]
Definition: papi.h:627
struct _papi_hwi_sysdetect_t::@183::@185 dev_type
PAPI_dev_type_attr_e attr
struct _papi_hwi_sysdetect_t::@183::@186 dev
union _papi_hwi_sysdetect_t::@183 query
struct _papi_hwi_sysdetect_t::@183::@184 enumerate
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
int num_threads_per_numa[PAPI_MAX_THREADS_PER_NUMA]
Definition: sysdetect.h:76
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
void(* close)(_sysdetect_dev_type_info_t *dev_type_info)
Definition: sysdetect.c:28
void(* open)(_sysdetect_dev_type_info_t *dev_type_info)
Definition: sysdetect.c:27
PAPI_component_info_t cmp_info
Definition: papi_vector.h:20
static void _sysdetect_init_private(void)
Definition: sysdetect.c:116
static int _sysdetect_shutdown_thread(hwd_context_t *ctx __attribute__((unused)))
Definition: sysdetect.c:110
static int _sysdetect_init_component(int cidx)
Definition: sysdetect.c:80
static _sysdetect_dev_type_info_t dev_type_info_arr[PAPI_DEV_TYPE_ID__MAX_NUM]
Definition: sysdetect.c:46
dev_fn_ptr_vector dev_fn_vector[PAPI_DEV_TYPE_ID__MAX_NUM]
Definition: sysdetect.c:31
static void get_num_threads_per_numa(_sysdetect_cpu_info_t *cpu_info)
Definition: sysdetect.c:446
static int _sysdetect_init_thread(hwd_context_t *ctx __attribute__((unused)))
Definition: sysdetect.c:92
int _sysdetect_user(int unused __attribute__((unused)), void *in, void *out)
Definition: sysdetect.c:131
static int _sysdetect_enum_dev_type(int enum_modifier, void **handle)
Definition: sysdetect.c:169
static void cleanup_dev_info(void)
Definition: sysdetect.c:66
static void init_dev_info(void)
Definition: sysdetect.c:56
static int _sysdetect_shutdown_component(void)
Definition: sysdetect.c:99
static int _sysdetect_get_dev_type_attr(void *handle, PAPI_dev_type_attr_e attr, void *val)
Definition: sysdetect.c:198
static int _sysdetect_get_dev_attr(void *handle, int id, PAPI_dev_attr_e attr, void *val)
Definition: sysdetect.c:229
papi_vector_t _sysdetect_vector
Definition: sysdetect.c:24