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

Scan functions for AMD GPU subsystems. More...

Include dependency graph for amd_gpu.c:

Go to the source code of this file.

Functions

void open_amd_gpu_dev_type (_sysdetect_dev_type_info_t *dev_type_info)
 
void close_amd_gpu_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 amd_gpu.c.

Function Documentation

◆ close_amd_gpu_dev_type()

void close_amd_gpu_dev_type ( _sysdetect_dev_type_info_t dev_type_info)

Definition at line 421 of file amd_gpu.c.

422{
423 papi_free(dev_type_info->dev_info_arr);
424}
#define papi_free(a)
Definition: papi_memory.h:35
_sysdetect_dev_info_u * dev_info_arr
Definition: sysdetect.h:90

◆ open_amd_gpu_dev_type()

void open_amd_gpu_dev_type ( _sysdetect_dev_type_info_t dev_type_info)

Definition at line 369 of file amd_gpu.c.

370{
371 memset(dev_type_info, 0, sizeof(*dev_type_info));
372 dev_type_info->id = PAPI_DEV_TYPE_ID__ROCM;
373 strcpy(dev_type_info->vendor, "AMD/ATI");
374 strcpy(dev_type_info->status, "Device Initialized");
375
376#ifdef HAVE_ROCM
377 if (load_hsa_sym(dev_type_info->status)) {
378 return;
379 }
380
381 int dev_count = 0;
382 hsa_status_t status = get_device_count(&dev_count);
383 if (status != HSA_STATUS_SUCCESS) {
384 if (status != HSA_STATUS_ERROR_NOT_INITIALIZED) {
385 const char *string;
386 (*hsa_status_stringPtr)(status, &string);
387 printf( "error: %s\n", string );
388 }
389 return;
390 }
391 dev_type_info->num_devices = dev_count;
392
393 _sysdetect_gpu_info_u *arr = papi_calloc(dev_count, sizeof(*arr));
394 fill_dev_info(arr);
395
396#ifdef HAVE_ROCM_SMI
397 if (!load_rsmi_sym(dev_type_info->status)) {
398 fill_dev_affinity_info(arr, dev_count);
400 }
401#else
402 const char *message = "RSMI not configured, no device affinity available";
403 int count = snprintf(dev_type_info->status, PAPI_MAX_STR_LEN, "%s", message);
404 if (count >= PAPI_MAX_STR_LEN) {
405 SUBDBG("Error message truncated.");
406 }
407#endif /* HAVE_ROCM_SMI */
408
410 dev_type_info->dev_info_arr = (_sysdetect_dev_info_u *)arr;
411#else
412 const char *message = "ROCm not configured, no ROCm device available";
413 int count = snprintf(dev_type_info->status, PAPI_MAX_STR_LEN, "%s", message);
414 if (count >= PAPI_MAX_STR_LEN) {
415 SUBDBG("Error message truncated.");
416 }
417#endif /* HAVE_ROCM */
418}
static long count
#define PAPI_MAX_STR_LEN
Definition: f90papi.h:77
#define PAPI_DEV_TYPE_ID__ROCM
Definition: f90papi.h:194
#define SUBDBG(format, args...)
Definition: papi_debug.h:64
#define papi_calloc(a, b)
Definition: papi_memory.h:37
static int unload_hsa_sym(void)
Definition: roc_common.c:248
static int load_hsa_sym(void)
Definition: roc_common.c:200
static int load_rsmi_sym(void)
Definition: rocs.c:665
static int unload_rsmi_sym(void)
Definition: rocs.c:829
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: