PAPI 7.1.0.0
Loading...
Searching...
No Matches
linux-rocm-smi.c File Reference
Include dependency graph for linux-rocm-smi.c:

Go to the source code of this file.

Data Structures

struct  rocmsmi_context_t
 
struct  rocmsmi_control_t
 

Functions

static int _rocm_smi_init_private (void)
 
static int _rocm_smi_check_n_initialize (void)
 
static int _rocm_smi_init_thread (hwd_context_t *ctx)
 
static int _rocm_smi_init_component (int cidx)
 
static int evt_get_count (int *count)
 
static int _rocm_smi_init_control_state (hwd_control_state_t *ctrl __attribute__((unused)))
 
static int update_native_events (rocmsmi_control_t *, NativeInfo_t *, int)
 
static int try_open_events (rocmsmi_control_t *)
 
static int _rocm_smi_update_control_state (hwd_control_state_t *ctrl, NativeInfo_t *nativeInfo, int nativeCount, hwd_context_t *ctx)
 
int try_open_events (rocmsmi_control_t *rocmsmi_ctl __attribute__((unused)))
 
static int _rocm_smi_start (hwd_context_t *ctx, hwd_control_state_t *ctrl)
 
static int _rocm_smi_read (hwd_context_t *ctx, hwd_control_state_t *ctrl, long long **values, int flags __attribute__((unused)))
 
static int _rocm_smi_write (hwd_context_t *ctx, hwd_control_state_t *ctrl, long long *values)
 
static int _rocm_smi_stop (hwd_context_t *ctx, hwd_control_state_t *ctrl)
 
static int _rocm_smi_cleanup_eventset (hwd_control_state_t *ctrl)
 
static int _rocm_smi_shutdown_thread (hwd_context_t *ctx)
 
static int _rocm_smi_shutdown_component (void)
 
static int _rocm_smi_reset (hwd_context_t *ctx, hwd_control_state_t *ctrl)
 
static int _rocm_smi_ctrl (hwd_context_t *ctx __attribute__((unused)), int code __attribute__((unused)), _papi_int_option_t *option __attribute__((unused)))
 
static int _rocm_smi_set_domain (hwd_control_state_t *ctrl __attribute__((unused)), int domain __attribute__((unused)))
 
static int _rocm_smi_ntv_enum_events (unsigned int *EventCode, int modifier)
 
static int _rocm_smi_ntv_code_to_name (unsigned int EventCode, char *name, int len)
 
static int _rocm_smi_ntv_name_to_code (const char *name, unsigned int *EventCode)
 
static int _rocm_smi_ntv_code_to_descr (unsigned int EventCode, char *desc, int len)
 

Variables

unsigned int _rocm_smi_lock
 
papi_vector_t _rocm_smi_vector
 

Function Documentation

◆ _rocm_smi_check_n_initialize()

static int _rocm_smi_check_n_initialize ( void  )
static

Definition at line 45 of file linux-rocm-smi.c.

46{
50}
papi_vector_t _rocm_smi_vector
static int _rocm_smi_init_private(void)
PAPI_component_info_t cmp_info
Definition: papi_vector.h:20
Here is the call graph for this function:
Here is the caller graph for this function:

◆ _rocm_smi_cleanup_eventset()

static int _rocm_smi_cleanup_eventset ( hwd_control_state_t ctrl)
static

Definition at line 285 of file linux-rocm-smi.c.

286{
287 rocmsmi_control_t *rocmsmi_ctl = (rocmsmi_control_t *) ctrl;
288
289 if (rocmsmi_ctl->rocs_ctx != NULL) {
290 return PAPI_EMISC;
291 }
292
293 papi_free(rocmsmi_ctl->events_id);
294 rocmsmi_ctl->events_id = NULL;
295 rocmsmi_ctl->num_events = 0;
296
297 return PAPI_OK;
298}
#define PAPI_OK
Definition: f90papi.h:73
#define PAPI_EMISC
Definition: f90papi.h:122
#define papi_free(a)
Definition: papi_memory.h:35
rocs_ctx_t rocs_ctx
unsigned int * events_id

◆ _rocm_smi_ctrl()

static int _rocm_smi_ctrl ( hwd_context_t *ctx   __attribute__(unused),
int code   __attribute__(unused),
_papi_int_option_t *option   __attribute__(unused) 
)
static

Definition at line 339 of file linux-rocm-smi.c.

340{
341 return PAPI_OK;
342}

◆ _rocm_smi_init_component()

static int _rocm_smi_init_component ( int  cidx)
static

Definition at line 64 of file linux-rocm-smi.c.

65{
70
72 "Not initialized. Access component events to initialize it.");
74
75 return PAPI_EDELAY_INIT;
76}
#define PAPI_NUM_LOCK
Definition: f90papi.h:80
#define PAPI_EDELAY_INIT
Definition: f90papi.h:271
unsigned int _rocm_smi_lock
Definition: rocs.c:11
#define NUM_INNER_LOCK
Definition: papi_lock.h:17
static int cidx
char disabled_reason[PAPI_HUGE_STR_LEN]
Definition: papi.h:634

◆ _rocm_smi_init_control_state()

static int _rocm_smi_init_control_state ( hwd_control_state_t *ctrl   __attribute__(unused))
static

Definition at line 132 of file linux-rocm-smi.c.

133{
135}
static int _rocm_smi_check_n_initialize(void)
Here is the call graph for this function:

◆ _rocm_smi_init_private()

static int _rocm_smi_init_private ( void  )
static

Definition at line 95 of file linux-rocm-smi.c.

96{
97 int papi_errno = PAPI_OK;
98
100
103 goto fn_exit;
104 }
105
106 papi_errno = rocs_init();
107 if (papi_errno != PAPI_OK) {
109 const char *error_str;
110 rocs_err_get_last(&error_str);
111 sprintf(_rocm_smi_vector.cmp_info.disabled_reason, "%s", error_str);
112 goto fn_fail;
113 }
114
115 int count = 0;
116 papi_errno = evt_get_count(&count);
120
121 fn_exit:
125 return papi_errno;
126 fn_fail:
127 goto fn_exit;
128}
static long count
Lock one of two mutex variables defined in papi.h.
Unlock one of the mutex variables defined in papi.h.
static int evt_get_count(int *count)
#define COMPONENT_LOCK
Definition: papi_internal.h:90
int rocs_err_get_last(const char **err_string)
Definition: rocs.c:450
int rocs_init(void)
Definition: rocs.c:333
Here is the call graph for this function:
Here is the caller graph for this function:

◆ _rocm_smi_init_thread()

static int _rocm_smi_init_thread ( hwd_context_t ctx)
static

Definition at line 53 of file linux-rocm-smi.c.

54{
55 rocmsmi_context_t *rocmsmi_ctx = (rocmsmi_context_t *) ctx;
56 memset(rocmsmi_ctx, 0, sizeof(*rocmsmi_ctx));
57 rocmsmi_ctx->initialized = 1;
59 return PAPI_OK;
60}

◆ _rocm_smi_ntv_code_to_descr()

static int _rocm_smi_ntv_code_to_descr ( unsigned int  EventCode,
char *  desc,
int  len 
)
static

Definition at line 381 of file linux-rocm-smi.c.

382{
383 int papi_errno =_rocm_smi_check_n_initialize();
384 if (papi_errno != PAPI_OK) {
385 return papi_errno;
386 }
387 return rocs_evt_code_to_descr(EventCode, desc, len);
388}
int rocs_evt_code_to_descr(unsigned int event_code, char *descr, int len)
Definition: rocs.c:410
Here is the call graph for this function:

◆ _rocm_smi_ntv_code_to_name()

static int _rocm_smi_ntv_code_to_name ( unsigned int  EventCode,
char *  name,
int  len 
)
static

Definition at line 361 of file linux-rocm-smi.c.

362{
363 int papi_errno =_rocm_smi_check_n_initialize();
364 if (papi_errno != PAPI_OK) {
365 return papi_errno;
366 }
367 return rocs_evt_code_to_name(EventCode, name, len);
368}
const char * name
Definition: rocs.c:225
int rocs_evt_code_to_name(unsigned int event_code, char *name, int len)
Definition: rocs.c:440
Here is the call graph for this function:

◆ _rocm_smi_ntv_enum_events()

static int _rocm_smi_ntv_enum_events ( unsigned int EventCode,
int  modifier 
)
static

Definition at line 351 of file linux-rocm-smi.c.

352{
353 int papi_errno =_rocm_smi_check_n_initialize();
354 if (papi_errno != PAPI_OK) {
355 return papi_errno;
356 }
357 return rocs_evt_enum(EventCode, modifier);
358}
int rocs_evt_enum(unsigned int *event_code, int modifier)
Definition: rocs.c:384
Here is the call graph for this function:

◆ _rocm_smi_ntv_name_to_code()

static int _rocm_smi_ntv_name_to_code ( const char *  name,
unsigned int EventCode 
)
static

Definition at line 371 of file linux-rocm-smi.c.

372{
373 int papi_errno =_rocm_smi_check_n_initialize();
374 if (papi_errno != PAPI_OK) {
375 return papi_errno;
376 }
377 return rocs_evt_name_to_code(name, EventCode);
378}
int rocs_evt_name_to_code(const char *name, unsigned int *event_code)
Definition: rocs.c:421
Here is the call graph for this function:

◆ _rocm_smi_read()

static int _rocm_smi_read ( hwd_context_t ctx,
hwd_control_state_t ctrl,
long long **  values,
int flags   __attribute__(unused) 
)
static

Definition at line 233 of file linux-rocm-smi.c.

234{
235 rocmsmi_context_t *rocmsmi_ctx = (rocmsmi_context_t *) ctx;
236 rocmsmi_control_t *rocmsmi_ctl = (rocmsmi_control_t *) ctrl;
237
238 if (!(rocmsmi_ctx->state & ROCS_EVENTS_RUNNING)) {
239 return PAPI_EMISC;
240 }
241
242 return rocs_ctx_read(rocmsmi_ctl->rocs_ctx, values);
243}
static long long values[NUM_EVENTS]
Definition: init_fini.c:10
int rocs_ctx_read(rocs_ctx_t rocs_ctx, long long **counts)
Definition: rocs.c:605
#define ROCS_EVENTS_RUNNING
Definition: rocs.h:5
Here is the call graph for this function:

◆ _rocm_smi_reset()

static int _rocm_smi_reset ( hwd_context_t ctx,
hwd_control_state_t ctrl 
)
static

Definition at line 326 of file linux-rocm-smi.c.

327{
328 rocmsmi_context_t *rocmsmi_ctx = (rocmsmi_context_t *) ctx;
329 rocmsmi_control_t *rocmsmi_ctl = (rocmsmi_control_t *) ctrl;
330
331 if (!(rocmsmi_ctx->state & ROCS_EVENTS_RUNNING)) {
332 return PAPI_EMISC;
333 }
334
335 return rocs_ctx_reset(rocmsmi_ctl->rocs_ctx);
336}
int rocs_ctx_reset(rocs_ctx_t rocs_ctx)
Definition: rocs.c:642
Here is the call graph for this function:

◆ _rocm_smi_set_domain()

static int _rocm_smi_set_domain ( hwd_control_state_t *ctrl   __attribute__(unused),
int domain   __attribute__(unused) 
)
static

Definition at line 345 of file linux-rocm-smi.c.

346{
347 return PAPI_OK;
348}

◆ _rocm_smi_shutdown_component()

static int _rocm_smi_shutdown_component ( void  )
static

Definition at line 310 of file linux-rocm-smi.c.

311{
313 return PAPI_EMISC;
314 }
315
317 return PAPI_EMISC;
318 }
319
320 int papi_errno = rocs_shutdown();
322 return papi_errno;
323}
int rocs_shutdown(void)
Definition: rocs.c:655
Here is the call graph for this function:

◆ _rocm_smi_shutdown_thread()

static int _rocm_smi_shutdown_thread ( hwd_context_t ctx)
static

Definition at line 301 of file linux-rocm-smi.c.

302{
303 rocmsmi_context_t *rocmsmi_ctx = (rocmsmi_context_t *) ctx;
304 rocmsmi_ctx->state = 0;
305 rocmsmi_ctx->initialized = 0;
306 return PAPI_OK;
307}

◆ _rocm_smi_start()

static int _rocm_smi_start ( hwd_context_t ctx,
hwd_control_state_t ctrl 
)
static

Definition at line 198 of file linux-rocm-smi.c.

199{
200 int papi_errno = PAPI_OK;
201 rocmsmi_context_t *rocmsmi_ctx = (rocmsmi_context_t *) ctx;
202 rocmsmi_control_t *rocmsmi_ctl = (rocmsmi_control_t *) ctrl;
203
204 if (rocmsmi_ctx->state & ROCS_EVENTS_OPENED) {
205 return PAPI_EMISC;
206 }
207
208 papi_errno = rocs_ctx_open(rocmsmi_ctl->events_id, rocmsmi_ctl->num_events, &rocmsmi_ctl->rocs_ctx);
209 if (papi_errno != PAPI_OK) {
210 return papi_errno;
211 }
212
213 rocmsmi_ctx->state = ROCS_EVENTS_OPENED;
214
215 papi_errno = rocs_ctx_start(rocmsmi_ctl->rocs_ctx);
216 if (papi_errno != PAPI_OK) {
217 goto fn_fail;
218 }
219
220 rocmsmi_ctx->state |= ROCS_EVENTS_RUNNING;
221
222 fn_exit:
223 return papi_errno;
224 fn_fail:
225 if (rocmsmi_ctx->state & ROCS_EVENTS_OPENED) {
226 rocs_ctx_close(rocmsmi_ctl->rocs_ctx);
227 }
228 rocmsmi_ctx->state = 0;
229 goto fn_exit;
230}
int rocs_ctx_close(rocs_ctx_t rocs_ctx)
Definition: rocs.c:519
int rocs_ctx_start(rocs_ctx_t rocs_ctx)
Definition: rocs.c:546
int rocs_ctx_open(unsigned int *events_id, int num_events, rocs_ctx_t *rocs_ctx)
Definition: rocs.c:461
#define ROCS_EVENTS_OPENED
Definition: rocs.h:4
Here is the call graph for this function:

◆ _rocm_smi_stop()

static int _rocm_smi_stop ( hwd_context_t ctx,
hwd_control_state_t ctrl 
)
static

Definition at line 259 of file linux-rocm-smi.c.

260{
261 int papi_errno = PAPI_OK;
262 rocmsmi_context_t *rocmsmi_ctx = (rocmsmi_context_t *) ctx;
263 rocmsmi_control_t *rocmsmi_ctl = (rocmsmi_control_t *) ctrl;
264
265 if (!(rocmsmi_ctx->state & ROCS_EVENTS_RUNNING)) {
266 return PAPI_EMISC;
267 }
268
269 papi_errno = rocs_ctx_stop(rocmsmi_ctl->rocs_ctx);
270 if (papi_errno != PAPI_OK) {
271 return papi_errno;
272 }
273
274 rocmsmi_ctx->state &= ~ROCS_EVENTS_RUNNING;
275
276 papi_errno = rocs_ctx_close(rocmsmi_ctl->rocs_ctx);
277
278 rocmsmi_ctx->state = 0;
279 rocmsmi_ctl->rocs_ctx = NULL;
280
281 return papi_errno;
282}
int rocs_ctx_stop(rocs_ctx_t rocs_ctx)
Definition: rocs.c:580
Here is the call graph for this function:

◆ _rocm_smi_update_control_state()

static int _rocm_smi_update_control_state ( hwd_control_state_t ctrl,
NativeInfo_t nativeInfo,
int  nativeCount,
hwd_context_t ctx 
)
static

Definition at line 141 of file linux-rocm-smi.c.

142{
143 int papi_errno =_rocm_smi_check_n_initialize();
144 if (papi_errno != PAPI_OK) {
145 return papi_errno;
146 }
147
148 rocmsmi_control_t *rocmsmi_ctl = (rocmsmi_control_t *) ctrl;
149 rocmsmi_context_t *rocmsmi_ctx = (rocmsmi_context_t *) ctx;
150
151 if (rocmsmi_ctx->state & ROCS_EVENTS_RUNNING) {
152 return PAPI_EMISC;
153 }
154
155 papi_errno = update_native_events(rocmsmi_ctl, nativeInfo, nativeCount);
156 if (papi_errno != PAPI_OK) {
157 return papi_errno;
158 }
159
160 return try_open_events(rocmsmi_ctl);
161}
static int update_native_events(rocmsmi_control_t *, NativeInfo_t *, int)
static int try_open_events(rocmsmi_control_t *)
Here is the call graph for this function:

◆ _rocm_smi_write()

static int _rocm_smi_write ( hwd_context_t ctx,
hwd_control_state_t ctrl,
long long values 
)
static

Definition at line 246 of file linux-rocm-smi.c.

247{
248 rocmsmi_context_t *rocmsmi_ctx = (rocmsmi_context_t *) ctx;
249 rocmsmi_control_t *rocmsmi_ctl = (rocmsmi_control_t *) ctrl;
250
251 if (!(rocmsmi_ctx->state & ROCS_EVENTS_RUNNING)) {
252 return PAPI_EMISC;
253 }
254
255 return rocs_ctx_write(rocmsmi_ctl->rocs_ctx, values);
256}
int rocs_ctx_write(rocs_ctx_t rocs_ctx, long long *counts)
Definition: rocs.c:624
Here is the call graph for this function:

◆ evt_get_count()

static int evt_get_count ( int count)
static

Definition at line 79 of file linux-rocm-smi.c.

80{
81 unsigned int event_code = 0;
82
83 if (rocs_evt_enum(&event_code, PAPI_ENUM_FIRST) == PAPI_OK) {
84 ++(*count);
85 }
86
87 while (rocs_evt_enum(&event_code, PAPI_ENUM_EVENTS) == PAPI_OK) {
88 ++(*count);
89 }
90
91 return PAPI_OK;
92}
#define PAPI_ENUM_EVENTS
Definition: f90papi.h:224
#define PAPI_ENUM_FIRST
Definition: f90papi.h:85
Here is the call graph for this function:
Here is the caller graph for this function:

◆ try_open_events() [1/2]

static int try_open_events ( rocmsmi_control_t )
static
Here is the caller graph for this function:

◆ try_open_events() [2/2]

int try_open_events ( rocmsmi_control_t *rocmsmi_ctl   __attribute__(unused))

Definition at line 192 of file linux-rocm-smi.c.

193{
194 return PAPI_OK;
195}

◆ update_native_events()

int update_native_events ( rocmsmi_control_t ctl,
NativeInfo_t ntv_info,
int  ntv_count 
)
static

Definition at line 164 of file linux-rocm-smi.c.

165{
166 int papi_errno = PAPI_OK;
167
168 unsigned int *events = papi_calloc(ntv_count, sizeof(*events));
169 if (events == NULL) {
170 papi_errno = PAPI_ENOMEM;
171 goto fn_fail;
172 }
173
174 int i;
175 for (i = 0; i < ntv_count; ++i) {
176 events[i] = ntv_info[i].ni_event;
177 ntv_info[i].ni_position = i;
178 }
179
180 papi_free(ctl->events_id);
181 ctl->events_id = events;
182 ctl->num_events = ntv_count;
183
184 fn_exit:
185 return papi_errno;
186 fn_fail:
187 ctl->num_events = 0;
188 goto fn_exit;
189}
int i
#define PAPI_ENOMEM
Definition: f90papi.h:16
char events[MAX_EVENTS][BUFSIZ]
#define papi_calloc(a, b)
Definition: papi_memory.h:37
Here is the caller graph for this function:

Variable Documentation

◆ _rocm_smi_lock

unsigned int _rocm_smi_lock
extern

Definition at line 11 of file rocs.c.

◆ _rocm_smi_vector

papi_vector_t _rocm_smi_vector

Definition at line 40 of file linux-rocm-smi.c.