013fd07139
Fix an ordering glitch of dlerr/dlclose and add more logging to help root cause some crashes users are hitting. This also refines the function pointer names to use the underlying function names instead of simplified names for readability.
56 lines
No EOL
2 KiB
C
56 lines
No EOL
2 KiB
C
#ifndef __APPLE__
|
|
#ifndef __GPU_INFO_CUDA_H__
|
|
#define __GPU_INFO_CUDA_H__
|
|
#include "gpu_info.h"
|
|
|
|
// Just enough typedef's to dlopen/dlsym for memory information
|
|
typedef enum nvmlReturn_enum {
|
|
NVML_SUCCESS = 0,
|
|
// Other values omitted for now...
|
|
} nvmlReturn_t;
|
|
typedef void *nvmlDevice_t; // Opaque is sufficient
|
|
typedef struct nvmlMemory_st {
|
|
unsigned long long total;
|
|
unsigned long long free;
|
|
unsigned long long used;
|
|
} nvmlMemory_t;
|
|
|
|
typedef enum nvmlBrandType_enum
|
|
{
|
|
NVML_BRAND_UNKNOWN = 0,
|
|
} nvmlBrandType_t;
|
|
|
|
typedef struct cuda_handle {
|
|
void *handle;
|
|
uint16_t verbose;
|
|
nvmlReturn_t (*nvmlInit_v2)(void);
|
|
nvmlReturn_t (*nvmlShutdown)(void);
|
|
nvmlReturn_t (*nvmlDeviceGetHandleByIndex)(unsigned int, nvmlDevice_t *);
|
|
nvmlReturn_t (*nvmlDeviceGetMemoryInfo)(nvmlDevice_t, nvmlMemory_t *);
|
|
nvmlReturn_t (*nvmlDeviceGetCount_v2)(unsigned int *);
|
|
nvmlReturn_t (*nvmlDeviceGetCudaComputeCapability)(nvmlDevice_t, int* major, int* minor);
|
|
nvmlReturn_t (*nvmlSystemGetDriverVersion) (char* version, unsigned int length);
|
|
nvmlReturn_t (*nvmlDeviceGetName) (nvmlDevice_t device, char* name, unsigned int length);
|
|
nvmlReturn_t (*nvmlDeviceGetSerial) (nvmlDevice_t device, char* serial, unsigned int length);
|
|
nvmlReturn_t (*nvmlDeviceGetVbiosVersion) (nvmlDevice_t device, char* version, unsigned int length);
|
|
nvmlReturn_t (*nvmlDeviceGetBoardPartNumber) (nvmlDevice_t device, char* partNumber, unsigned int length);
|
|
nvmlReturn_t (*nvmlDeviceGetBrand) (nvmlDevice_t device, nvmlBrandType_t* type);
|
|
} cuda_handle_t;
|
|
|
|
typedef struct cuda_init_resp {
|
|
char *err; // If err is non-null handle is invalid
|
|
cuda_handle_t ch;
|
|
} cuda_init_resp_t;
|
|
|
|
typedef struct cuda_compute_capability {
|
|
char *err;
|
|
int major;
|
|
int minor;
|
|
} cuda_compute_capability_t;
|
|
|
|
void cuda_init(char *cuda_lib_path, cuda_init_resp_t *resp);
|
|
void cuda_check_vram(cuda_handle_t ch, mem_info_t *resp);
|
|
void cuda_compute_capability(cuda_handle_t ch, cuda_compute_capability_t *cc);
|
|
|
|
#endif // __GPU_INFO_CUDA_H__
|
|
#endif // __APPLE__
|