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

Scan functions for NVIDIA GPU subsystems. More...

Include dependency graph for nvidia_gpu.c:

Go to the source code of this file.

Functions

void open_nvidia_gpu_dev_type (_sysdetect_dev_type_info_t *dev_type_info)
 
void close_nvidia_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 nvidia_gpu.c.

Function Documentation

◆ close_nvidia_gpu_dev_type()

void close_nvidia_gpu_dev_type ( _sysdetect_dev_type_info_t dev_type_info)

Definition at line 386 of file nvidia_gpu.c.

387{
388 papi_free(dev_type_info->dev_info_arr);
389}
#define papi_free(a)
Definition: papi_memory.h:35
_sysdetect_dev_info_u * dev_info_arr
Definition: sysdetect.h:90

◆ open_nvidia_gpu_dev_type()

void open_nvidia_gpu_dev_type ( _sysdetect_dev_type_info_t dev_type_info)

Definition at line 337 of file nvidia_gpu.c.

338{
339 memset(dev_type_info, 0, sizeof(*dev_type_info));
340 dev_type_info->id = PAPI_DEV_TYPE_ID__CUDA;
341 strcpy(dev_type_info->vendor, "NVIDIA");
342 strcpy(dev_type_info->status, "Device Initialized");
343
344#ifdef HAVE_CUDA
345 if (load_cuda_sym(dev_type_info->status)) {
346 return;
347 }
348
349 int dev, dev_count;
350 CU_CALL((*cuDeviceGetCountPtr)(&dev_count), return);
351 dev_type_info->num_devices = dev_count;
352 if (dev_count == 0) {
353 return;
354 }
355
356 _sysdetect_gpu_info_u *arr = papi_calloc(dev_count, sizeof(*arr));
357 for (dev = 0; dev < dev_count; ++dev) {
358 fill_dev_info(&arr[dev], dev);
359 }
360
361#ifdef HAVE_NVML
362 if (!load_nvml_sym(dev_type_info->status)) {
363 fill_dev_affinity_info(arr, dev_count);
364 unload_nvml_sym();
365 }
366#else
367 const char *message = "NVML not configured, no device affinity available";
368 int count = snprintf(dev_type_info->status, PAPI_MAX_STR_LEN, "%s", message);
369 if (count >= PAPI_MAX_STR_LEN) {
370 SUBDBG("Status string truncated.");
371 }
372#endif /* HAVE_NVML */
373
375 dev_type_info->dev_info_arr = (_sysdetect_dev_info_u *)arr;
376#else
377 const char *message = "CUDA not configured, no CUDA device available";
378 int count = snprintf(dev_type_info->status, PAPI_MAX_STR_LEN, "%s", message);
379 if (count >= PAPI_MAX_STR_LEN) {
380 SUBDBG("Status string truncated.");
381 }
382#endif /* HAVE_CUDA */
383}
static long count
CUresult(* cuDeviceGetCountPtr)(int *)
Definition: cupti_common.c:29
static int unload_cuda_sym(void)
Definition: cupti_common.c:85
static int load_cuda_sym(void)
Definition: cupti_common.c:52
#define PAPI_DEV_TYPE_ID__CUDA
Definition: f90papi.h:186
#define PAPI_MAX_STR_LEN
Definition: f90papi.h:77
#define SUBDBG(format, args...)
Definition: papi_debug.h:64
#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: