[Beignet] [PATCH] add [opencl-1.2] API clCreateSubDevice.
Yang, Rong R
rong.r.yang at intel.com
Mon May 19 00:42:03 PDT 2014
Return CL_SUCCESS? Should this function return CL_INVALID_DEVICE_PARTITION_COUNT?
-----Original Message-----
From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of xionghu.luo at intel.com
Sent: Tuesday, May 13, 2014 4:26 AM
To: beignet at lists.freedesktop.org
Cc: Luo, Xionghu
Subject: [Beignet] [PATCH] add [opencl-1.2] API clCreateSubDevice.
From: Luo <xionghu.luo at intel.com>
creates an array of sub-devices that each reference a non-intersecting set of compute units within in_device, according to a partition scheme given by properties.
---
src/cl_api.c | 10 ++++++++--
src/cl_device_id.c | 6 ++++++
src/cl_device_id.h | 7 +++++++
src/cl_gt_device.h | 7 ++++++-
4 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/src/cl_api.c b/src/cl_api.c index 9c22819..2077d02 100644
--- a/src/cl_api.c
+++ b/src/cl_api.c
@@ -242,8 +242,14 @@ clCreateSubDevices(cl_device_id in_device,
cl_device_id * out_devices,
cl_uint * num_devices_ret)
{
- NOT_IMPLEMENTED;
- return 0;
+ /* Check parameter consistency */
+ if (UNLIKELY(out_devices == NULL && num_devices_ret == NULL))
+ return CL_INVALID_VALUE;
+ if (UNLIKELY(in_device == NULL && properties == NULL))
+ return CL_INVALID_VALUE;
+
+ *num_devices_ret = 0;
+ return CL_SUCCESS;
}
cl_int
diff --git a/src/cl_device_id.c b/src/cl_device_id.c index 2b443c6..37f49be 100644
--- a/src/cl_device_id.c
+++ b/src/cl_device_id.c
@@ -346,6 +346,12 @@ cl_get_device_info(cl_device_id device,
DECL_STRING_FIELD(OPENCL_C_VERSION, opencl_c_version)
DECL_STRING_FIELD(EXTENSIONS, extensions);
DECL_STRING_FIELD(BUILT_IN_KERNELS, built_in_kernels)
+ DECL_FIELD(PARENT_DEVICE, parent_device)
+ DECL_FIELD(PARTITION_MAX_SUB_DEVICES, partition_max_sub_device)
+ DECL_FIELD(PARTITION_PROPERTIES, partition_property)
+ DECL_FIELD(PARTITION_AFFINITY_DOMAIN, affinity_domain)
+ DECL_FIELD(PARTITION_TYPE, partition_type)
+ DECL_FIELD(REFERENCE_COUNT, device_reference_count)
case CL_DRIVER_VERSION:
if (param_value_size_ret) {
diff --git a/src/cl_device_id.h b/src/cl_device_id.h index 5f7c9fe..6f8d25f 100644
--- a/src/cl_device_id.h
+++ b/src/cl_device_id.h
@@ -97,6 +97,13 @@ struct _cl_device_id {
/* Kernel specific info that we're assigning statically */
size_t wg_sz;
size_t preferred_wg_sz_mul;
+ /* SubDevice specific info */
+ cl_device_id parent_device;
+ cl_uint partition_max_sub_device;
+ cl_device_partition_property partition_property[3];
+ cl_device_affinity_domain affinity_domain;
+ cl_device_partition_property partition_type[3];
+ cl_uint device_reference_count;
};
/* Get a device from the given platform */ diff --git a/src/cl_gt_device.h b/src/cl_gt_device.h index 110988a..88decd7 100644
--- a/src/cl_gt_device.h
+++ b/src/cl_gt_device.h
@@ -78,5 +78,10 @@ DECL_INFO_STRING(extensions, "") DECL_INFO_STRING(built_in_kernels, "") DECL_INFO_STRING(driver_version, LIBCL_DRIVER_VERSION_STRING) #undef DECL_INFO_STRING
-
+.parent_device = NULL,
+.partition_max_sub_device = 1,
+.partition_property = {0},
+.affinity_domain = 0,
+.partition_type = {0},
+.device_reference_count = 1,
--
1.8.1.2
_______________________________________________
Beignet mailing list
Beignet at lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list