gpu_info_oneapi.h 6.08 KB
Newer Older
mashun1's avatar
v1  
mashun1 committed
1
2
3
4
5
6
7
8
9
10
11
#ifndef __APPLE__
#ifndef __GPU_INFO_ONEAPI_H__
#define __GPU_INFO_ONEAPI_H__
#include "gpu_info.h"

#define ZE_MAX_DEVICE_NAME 256
#define ZE_MAX_DEVICE_UUID_SIZE 16
#define ZES_STRING_PROPERTY_SIZE 64
#define ZE_BIT(_i) (1 << _i)

// Just enough typedef's to dlopen/dlsym for memory information
xuxzh1's avatar
init  
xuxzh1 committed
12
typedef enum ze_result_t {
mashun1's avatar
v1  
mashun1 committed
13
14
15
16
17
18
19
20
21
  ZE_RESULT_SUCCESS = 0,
  // Other values omitted for now...
} ze_result_t;

typedef uint8_t ze_bool_t;
typedef struct _zes_driver_handle_t *zes_driver_handle_t;
typedef struct _zes_device_handle_t *zes_device_handle_t;
typedef struct _zes_mem_handle_t *zes_mem_handle_t;

xuxzh1's avatar
init  
xuxzh1 committed
22
typedef enum _ze_structure_type_t {
mashun1's avatar
v1  
mashun1 committed
23
24
25
  ZE_STRUCTURE_TYPE_FORCE_UINT32 = 0x7fffffff
} ze_structure_type_t;

xuxzh1's avatar
init  
xuxzh1 committed
26
typedef enum _zes_structure_type_t {
mashun1's avatar
v1  
mashun1 committed
27
28
29
30
31
32
33
  ZES_STRUCTURE_TYPE_DEVICE_PROPERTIES = 0x1,
  ZES_STRUCTURE_TYPE_MEM_PROPERTIES = 0xb,
  ZES_STRUCTURE_TYPE_MEM_STATE = 0x1e,
  ZES_STRUCTURE_TYPE_DEVICE_EXT_PROPERTIES = 0x2d,
  ZES_STRUCTURE_TYPE_FORCE_UINT32 = 0x7fffffff
} zes_structure_type_t;

xuxzh1's avatar
init  
xuxzh1 committed
34
typedef enum _zes_mem_type_t {
mashun1's avatar
v1  
mashun1 committed
35
36
37
  ZES_MEM_TYPE_FORCE_UINT32 = 0x7fffffff
} zes_mem_type_t;

xuxzh1's avatar
init  
xuxzh1 committed
38
typedef enum _zes_mem_loc_t {
mashun1's avatar
v1  
mashun1 committed
39
40
41
42
43
  ZES_MEM_LOC_SYSTEM = 0,
  ZES_MEM_LOC_DEVICE = 1,
  ZES_MEM_LOC_FORCE_UINT32 = 0x7fffffff
} zes_mem_loc_t;

xuxzh1's avatar
init  
xuxzh1 committed
44
typedef enum _zes_mem_health_t {
mashun1's avatar
v1  
mashun1 committed
45
46
47
  ZES_MEM_HEALTH_FORCE_UINT32 = 0x7fffffff
} zes_mem_health_t;

xuxzh1's avatar
init  
xuxzh1 committed
48
typedef struct _ze_device_uuid_t {
mashun1's avatar
v1  
mashun1 committed
49
50
51
  uint8_t id[ZE_MAX_DEVICE_UUID_SIZE];
} ze_device_uuid_t;

xuxzh1's avatar
init  
xuxzh1 committed
52
typedef struct _zes_uuid_t {
mashun1's avatar
v1  
mashun1 committed
53
54
55
  uint8_t id[ZE_MAX_DEVICE_UUID_SIZE];
} zes_uuid_t;

xuxzh1's avatar
init  
xuxzh1 committed
56
typedef enum _ze_device_type_t {
mashun1's avatar
v1  
mashun1 committed
57
58
59
60
61
62
63
64
  ZE_DEVICE_TYPE_GPU = 1,
  ZE_DEVICE_TYPE_CPU = 2,
  ZE_DEVICE_TYPE_FPGA = 3,
  ZE_DEVICE_TYPE_MCA = 4,
  ZE_DEVICE_TYPE_VPU = 5,
  ZE_DEVICE_TYPE_FORCE_UINT32 = 0x7fffffff
} ze_device_type_t;

xuxzh1's avatar
init  
xuxzh1 committed
65
typedef enum _zes_device_type_t {
mashun1's avatar
v1  
mashun1 committed
66
67
68
69
70
71
72
73
74
  ZES_DEVICE_TYPE_GPU = 1,
  ZES_DEVICE_TYPE_CPU = 2,
  ZES_DEVICE_TYPE_FPGA = 3,
  ZES_DEVICE_TYPE_MCA = 4,
  ZES_DEVICE_TYPE_VPU = 5,
  ZES_DEVICE_TYPE_FORCE_UINT32 = 0x7fffffff
} zes_device_type_t;

typedef uint32_t ze_device_property_flags_t;
xuxzh1's avatar
init  
xuxzh1 committed
75
typedef enum _ze_device_property_flag_t {
mashun1's avatar
v1  
mashun1 committed
76
77
78
79
80
81
82
83
  ZE_DEVICE_PROPERTY_FLAG_INTEGRATED = ZE_BIT(0),
  ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE = ZE_BIT(1),
  ZE_DEVICE_PROPERTY_FLAG_ECC = ZE_BIT(2),
  ZE_DEVICE_PROPERTY_FLAG_ONDEMANDPAGING = ZE_BIT(3),
  ZE_DEVICE_PROPERTY_FLAG_FORCE_UINT32 = 0x7fffffff
} ze_device_property_flag_t;

typedef uint32_t zes_device_property_flags_t;
xuxzh1's avatar
init  
xuxzh1 committed
84
typedef enum _zes_device_property_flag_t {
mashun1's avatar
v1  
mashun1 committed
85
86
87
88
89
90
91
  ZES_DEVICE_PROPERTY_FLAG_INTEGRATED = ZE_BIT(0),
  ZES_DEVICE_PROPERTY_FLAG_SUBDEVICE = ZE_BIT(1),
  ZES_DEVICE_PROPERTY_FLAG_ECC = ZE_BIT(2),
  ZES_DEVICE_PROPERTY_FLAG_ONDEMANDPAGING = ZE_BIT(3),
  ZES_DEVICE_PROPERTY_FLAG_FORCE_UINT32 = 0x7fffffff
} zes_device_property_flag_t;

xuxzh1's avatar
init  
xuxzh1 committed
92
typedef struct _ze_device_properties_t {
mashun1's avatar
v1  
mashun1 committed
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  ze_structure_type_t stype;
  void *pNext;
  ze_device_type_t type;
  uint32_t vendorId;
  uint32_t deviceId;
  ze_device_property_flags_t flags;
  uint32_t subdeviceId;
  uint32_t coreClockRate;
  uint64_t maxMemAllocSize;
  uint32_t maxHardwareContexts;
  uint32_t maxCommandQueuePriority;
  uint32_t numThreadsPerEU;
  uint32_t physicalEUSimdWidth;
  uint32_t numEUsPerSubslice;
  uint32_t numSubslicesPerSlice;
  uint32_t numSlices;
  uint64_t timerResolution;
  uint32_t timestampValidBits;
  uint32_t kernelTimestampValidBits;
  ze_device_uuid_t uuid;
  char name[ZE_MAX_DEVICE_NAME];
} ze_device_properties_t;

xuxzh1's avatar
init  
xuxzh1 committed
116
typedef struct _zes_device_properties_t {
mashun1's avatar
v1  
mashun1 committed
117
118
119
120
121
122
123
124
125
126
127
128
  zes_structure_type_t stype;
  void *pNext;
  ze_device_properties_t core;
  uint32_t numSubdevices;
  char serialNumber[ZES_STRING_PROPERTY_SIZE];
  char boardNumber[ZES_STRING_PROPERTY_SIZE];
  char brandName[ZES_STRING_PROPERTY_SIZE];
  char modelName[ZES_STRING_PROPERTY_SIZE];
  char vendorName[ZES_STRING_PROPERTY_SIZE];
  char driverVersion[ZES_STRING_PROPERTY_SIZE];
} zes_device_properties_t;

xuxzh1's avatar
init  
xuxzh1 committed
129
typedef struct _zes_device_ext_properties_t {
mashun1's avatar
v1  
mashun1 committed
130
131
132
133
134
135
136
  zes_structure_type_t stype;
  void *pNext;
  zes_uuid_t uuid;
  zes_device_type_t type;
  zes_device_property_flags_t flags;
} zes_device_ext_properties_t;

xuxzh1's avatar
init  
xuxzh1 committed
137
typedef struct _zes_mem_properties_t {
mashun1's avatar
v1  
mashun1 committed
138
139
140
141
142
143
144
145
146
147
148
  zes_structure_type_t stype;
  void *pNext;
  zes_mem_type_t type;
  ze_bool_t onSubdevice;
  uint32_t subdeviceId;
  zes_mem_loc_t location;
  uint64_t physicalSize;
  int32_t busWidth;
  int32_t numChannels;
} zes_mem_properties_t;

xuxzh1's avatar
init  
xuxzh1 committed
149
typedef struct _zes_mem_state_t {
mashun1's avatar
v1  
mashun1 committed
150
151
152
153
154
155
156
  zes_structure_type_t stype;
  const void *pNext;
  zes_mem_health_t health;
  uint64_t free;
  uint64_t size;
} zes_mem_state_t;

xuxzh1's avatar
init  
xuxzh1 committed
157
typedef struct oneapi_handle {
mashun1's avatar
v1  
mashun1 committed
158
159
  void *handle;
  uint16_t verbose;
xuxzh1's avatar
init  
xuxzh1 committed
160
161
162
163
164
165
166
167
168
169

  uint32_t num_drivers;
  zes_driver_handle_t *drivers;
  uint32_t *num_devices;
  zes_device_handle_t **devices;

  // TODO Driver major, minor information
  // int driver_major;
  // int driver_minor;

mashun1's avatar
v1  
mashun1 committed
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
  ze_result_t (*zesInit)(int);
  ze_result_t (*zesDriverGet)(uint32_t *pCount, zes_driver_handle_t *phDrivers);
  ze_result_t (*zesDeviceGet)(zes_driver_handle_t hDriver, uint32_t *pCount,
                              zes_device_handle_t *phDevices);
  ze_result_t (*zesDeviceGetProperties)(zes_device_handle_t hDevice,
                                        zes_device_properties_t *pProperties);
  ze_result_t (*zesDeviceEnumMemoryModules)(zes_device_handle_t hDevice,
                                            uint32_t *pCount,
                                            zes_mem_handle_t *phMemory);
  ze_result_t (*zesMemoryGetProperties)(zes_mem_handle_t hMemory,
                                        zes_mem_properties_t *pProperties);
  ze_result_t (*zesMemoryGetState)(zes_mem_handle_t hMemory,
                                   zes_mem_state_t *pState);

} oneapi_handle_t;

xuxzh1's avatar
init  
xuxzh1 committed
186
typedef struct oneapi_init_resp {
mashun1's avatar
v1  
mashun1 committed
187
188
189
190
  char *err; // If err is non-null handle is invalid
  oneapi_handle_t oh;
} oneapi_init_resp_t;

xuxzh1's avatar
init  
xuxzh1 committed
191
typedef struct oneapi_version_resp {
mashun1's avatar
v1  
mashun1 committed
192
193
194
195
196
  ze_result_t status;
  char *str; // Contains version or error string if status != 0
} oneapi_version_resp_t;

void oneapi_init(char *oneapi_lib_path, oneapi_init_resp_t *resp);
xuxzh1's avatar
init  
xuxzh1 committed
197
198
199
200
void oneapi_check_vram(oneapi_handle_t h, int driver, int device,
                       mem_info_t *resp);
void oneapi_release(oneapi_handle_t h);
int oneapi_get_device_count(oneapi_handle_t h, int driver);
mashun1's avatar
v1  
mashun1 committed
201
202
203

#endif // __GPU_INFO_INTEL_H__
#endif // __APPLE__