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 <CL/cl_ext.h>
63 static __hwloc_inline
int
65 cl_device_id device __hwloc_attribute_unused,
68 #if (defined HWLOC_LINUX_SYS) && (defined CL_DEVICE_TOPOLOGY_AMD)
70 #define HWLOC_OPENCL_DEVICE_SYSFS_PATH_MAX 128
71 char path[HWLOC_OPENCL_DEVICE_SYSFS_PATH_MAX];
73 cl_device_topology_amd amdtopo;
81 clret = clGetDeviceInfo(device, CL_DEVICE_TOPOLOGY_AMD,
sizeof(amdtopo), &amdtopo, NULL);
82 if (CL_SUCCESS != clret) {
86 if (CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD != amdtopo.raw.type) {
91 sprintf(path,
"/sys/bus/pci/devices/0000:%02x:%02x.%01x/local_cpus", amdtopo.pcie.bus, amdtopo.pcie.device, amdtopo.pcie.function);
92 sysfile = fopen(path,
"r");
125 unsigned platform_index,
unsigned device_index)
127 unsigned x = (unsigned) -1, y = (
unsigned) -1;
132 && sscanf(osdev->
name,
"opencl%ud%u", &x, &y) == 2
133 && platform_index == x && device_index == y)
154 cl_device_id device __hwloc_attribute_unused)
156 #ifdef CL_DEVICE_TOPOLOGY_AMD
158 cl_device_topology_amd amdtopo;
161 clret = clGetDeviceInfo(device, CL_DEVICE_TOPOLOGY_AMD,
sizeof(amdtopo), &amdtopo, NULL);
162 if (CL_SUCCESS != clret) {
166 if (CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD != amdtopo.raw.type) {
174 if (strncmp(osdev->
name,
"opencl", 6))
Structure of a topology object.
Definition: hwloc.h:339
unsigned short domain
Definition: hwloc.h:509
void 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_parse_cpumap_file(FILE *file, hwloc_cpuset_t set)
Convert a linux kernel cpumap file file into hwloc CPU set.
unsigned char dev
Definition: hwloc.h:510
static hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)
Get complete CPU set.
Definition: helper.h:782
unsigned char func
Definition: hwloc.h:510
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:1231
struct hwloc_obj * parent
Parent, NULL if root (system object)
Definition: hwloc.h:370
Operating system co-processor device. For instance "mic0" for a Xeon Phi (MIC) on Linux...
Definition: hwloc.h:278
hwloc_obj_type_t type
Type of object.
Definition: hwloc.h:341
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:122
union hwloc_obj_attr_u * attr
Object type-specific Attributes, may be NULL if no attribute value was found.
Definition: hwloc.h:350
struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev
hwloc_obj_osdev_type_t type
Definition: hwloc.h:533
struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev
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:64
char * name
Object description if any.
Definition: hwloc.h:346
int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)
Does the topology context come from this system?
PCI device. These objects have neither CPU sets nor node sets. They are not added to the topology unl...
Definition: hwloc.h:228
int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)
Test whether bitmap bitmap is empty.
unsigned char bus
Definition: hwloc.h:510
struct hwloc_topology * hwloc_topology_t
Topology context.
Definition: hwloc.h:596
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:124
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 device.
Definition: opencl.h:153