|
14 #ifndef HWLOC_OPENCL_H
15 #define HWLOC_OPENCL_H
18 #include "hwloc/autogen/config.h"
19 #include "hwloc/helper.h"
20 #ifdef HWLOC_LINUX_SYS
21 #include "hwloc/linux.h"
25 #include <OpenCL/cl.h>
45 #define HWLOC_CL_DEVICE_TOPOLOGY_AMD 0x4037
47 struct { cl_uint type; cl_uint data[5]; } raw;
48 struct { cl_uint type; cl_char unused[17]; cl_char bus; cl_char device; cl_char function; } pcie;
50 #define HWLOC_CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD 1
53 #define HWLOC_CL_DEVICE_PCI_BUS_ID_NV 0x4008
54 #define HWLOC_CL_DEVICE_PCI_SLOT_ID_NV 0x4009
55 #define HWLOC_CL_DEVICE_PCI_DOMAIN_ID_NV 0x400A
73 static __hwloc_inline int
75 unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)
78 cl_uint nvbus, nvslot, nvdomain;
81 clret = clGetDeviceInfo(device, HWLOC_CL_DEVICE_TOPOLOGY_AMD, sizeof(amdtopo), &amdtopo, NULL);
82 if (CL_SUCCESS == clret
83 && HWLOC_CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD == amdtopo. raw. type) {
85 *bus = (unsigned) amdtopo. pcie. bus;
91 clret = clGetDeviceInfo(device, HWLOC_CL_DEVICE_PCI_BUS_ID_NV, sizeof(nvbus), &nvbus, NULL);
92 if (CL_SUCCESS == clret) {
93 clret = clGetDeviceInfo(device, HWLOC_CL_DEVICE_PCI_SLOT_ID_NV, sizeof(nvslot), &nvslot, NULL);
94 if (CL_SUCCESS == clret) {
95 clret = clGetDeviceInfo(device, HWLOC_CL_DEVICE_PCI_DOMAIN_ID_NV, sizeof(nvdomain), &nvdomain, NULL);
96 if (CL_SUCCESS == clret) {
104 *func = nvslot & 0x7;
129 static __hwloc_inline int
131 cl_device_id device __hwloc_attribute_unused,
134 #if (defined HWLOC_LINUX_SYS)
136 #define HWLOC_OPENCL_DEVICE_SYSFS_PATH_MAX 128
137 char path[HWLOC_OPENCL_DEVICE_SYSFS_PATH_MAX];
138 unsigned pcidomain, pcibus, pcidev, pcifunc;
150 sprintf(path, "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/local_cpus", pcidomain, pcibus, pcidev, pcifunc);
178 unsigned platform_index, unsigned device_index)
180 unsigned x = (unsigned) -1, y = ( unsigned) -1;
185 && sscanf(osdev-> name, "opencl%ud%u", &x, &y) == 2
186 && platform_index == x && device_index == y)
214 cl_device_id device __hwloc_attribute_unused)
217 unsigned pcidomain, pcibus, pcidevice, pcifunc;
227 if (strncmp(osdev-> name, "opencl", 6))
static int hwloc_opencl_get_device_cpuset(hwloc_topology_t topology, cl_device_id device, hwloc_cpuset_t set) Get the CPU set of logical processors that are physically close to OpenCL device device. Definition: opencl.h:130
cl_char bus Definition: opencl.h:48
static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev) Get the next OS device in the system. Definition: helper.h:1151
hwloc_obj_type_t type Type of object. Definition: hwloc.h:386
struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev
static hwloc_obj_t hwloc_opencl_get_device_osdev(hwloc_topology_t topology, cl_device_id device) Get the hwloc OS device object corresponding to OpenCL device deviceX. Definition: opencl.h:213
struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev
cl_char device Definition: opencl.h:48
struct hwloc_topology * hwloc_topology_t Topology context. Definition: hwloc.h:678
cl_char function Definition: opencl.h:48
static int hwloc_opencl_get_device_pci_busid(cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func) Return the domain, bus and device IDs of the OpenCL device device. Definition: opencl.h:74
@ HWLOC_OBJ_OSDEV_COPROC Operating system co-processor device. For instance "mic0" for a Xeon Phi (MIC) on Linux,... Definition: hwloc.h:340
unsigned char bus Definition: hwloc.h:625
union hwloc_obj_attr_u * attr Object type-specific Attributes, may be NULL if no attribute value was found. Definition: hwloc.h:403
hwloc_bitmap_t hwloc_cpuset_t A CPU set is a bitmap whose bits are set according to CPU physical OS indexes. Definition: hwloc.h:140
cl_uint type Definition: opencl.h:47
int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src) Copy the contents of bitmap src into the already allocated bitmap dst.
int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set) Convert a linux kernel cpumask file path into a hwloc bitmap set.
Structure of a topology object. Definition: hwloc.h:384
struct hwloc_cl_device_topology_amd::@4 pcie
int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap) Test whether bitmap bitmap is empty.
unsigned char dev Definition: hwloc.h:625
static hwloc_obj_t hwloc_opencl_get_device_osdev_by_index(hwloc_topology_t topology, unsigned platform_index, unsigned device_index) Get the hwloc OS device object corresponding to the OpenCL device for the given indexes. Definition: opencl.h:177
int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology) Does the topology context come from this system?
@ HWLOC_OBJ_PCI_DEVICE PCI device (filtered out by default). They are not added to the topology unless I/O discovery is enab... Definition: hwloc.h:266
char * name Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str... Definition: hwloc.h:396
hwloc_obj_osdev_type_t type Definition: hwloc.h:652
struct hwloc_cl_device_topology_amd::@3 raw
unsigned char func Definition: hwloc.h:625
unsigned short domain Definition: hwloc.h:621
struct hwloc_obj * parent Parent, NULL if root (Machine object) Definition: hwloc.h:434
hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology) Get complete CPU set.
|
|
|