[Beignet] [V3 PATCH 11/13] Runtime: Refine ext enable function for platform.
junyan.he at inbox.com
junyan.he at inbox.com
Tue Oct 20 03:55:54 PDT 2015
From: Junyan He <junyan.he at linux.intel.com>
We enable fp64 extension just on BDW platform. The
platforms before Gen7 will not have fp64 support.
We will enable fp64 on gen8 later platforms after
this feature is stable.
V3:
Unify the extersion setting for FP16 and FP64.
Signed-off-by: Junyan He <junyan.he at linux.intel.com>
---
src/cl_device_id.c | 27 +++++++++++++++++++--------
src/cl_extensions.c | 44 ++++++++++++++++++++++++++++++++++----------
src/cl_extensions.h | 2 +-
3 files changed, 54 insertions(+), 19 deletions(-)
diff --git a/src/cl_device_id.c b/src/cl_device_id.c
index a3d3fc4..661ec48 100644
--- a/src/cl_device_id.c
+++ b/src/cl_device_id.c
@@ -406,7 +406,9 @@ brw_gt1_break:
intel_brw_gt1_device.device_id = device_id;
intel_brw_gt1_device.platform = cl_get_platform_default();
ret = &intel_brw_gt1_device;
- cl_intel_platform_enable_fp16_extension(ret);
+ cl_intel_platform_get_default_extension(ret);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp64_ext_id);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
break;
case PCI_CHIP_BROADWLL_M_GT2:
@@ -423,7 +425,9 @@ brw_gt2_break:
intel_brw_gt2_device.device_id = device_id;
intel_brw_gt2_device.platform = cl_get_platform_default();
ret = &intel_brw_gt2_device;
- cl_intel_platform_enable_fp16_extension(ret);
+ cl_intel_platform_get_default_extension(ret);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp64_ext_id);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
break;
case PCI_CHIP_BROADWLL_M_GT3:
@@ -442,7 +446,9 @@ brw_gt3_break:
intel_brw_gt3_device.device_id = device_id;
intel_brw_gt3_device.platform = cl_get_platform_default();
ret = &intel_brw_gt3_device;
- cl_intel_platform_enable_fp16_extension(ret);
+ cl_intel_platform_get_default_extension(ret);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp64_ext_id);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
break;
case PCI_CHIP_CHV_0:
@@ -454,7 +460,8 @@ chv_break:
intel_chv_device.device_id = device_id;
intel_chv_device.platform = cl_get_platform_default();
ret = &intel_chv_device;
- cl_intel_platform_enable_fp16_extension(ret);
+ cl_intel_platform_get_default_extension(ret);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
break;
@@ -472,7 +479,8 @@ skl_gt1_break:
intel_skl_gt1_device.device_id = device_id;
intel_skl_gt1_device.platform = cl_get_platform_default();
ret = &intel_skl_gt1_device;
- cl_intel_platform_enable_fp16_extension(ret);
+ cl_intel_platform_get_default_extension(ret);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
break;
case PCI_CHIP_SKYLAKE_ULT_GT2:
@@ -491,7 +499,8 @@ skl_gt2_break:
intel_skl_gt2_device.device_id = device_id;
intel_skl_gt2_device.platform = cl_get_platform_default();
ret = &intel_skl_gt2_device;
- cl_intel_platform_enable_fp16_extension(ret);
+ cl_intel_platform_get_default_extension(ret);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
break;
case PCI_CHIP_SKYLAKE_ULT_GT3:
@@ -504,7 +513,8 @@ skl_gt3_break:
intel_skl_gt3_device.device_id = device_id;
intel_skl_gt3_device.platform = cl_get_platform_default();
ret = &intel_skl_gt3_device;
- cl_intel_platform_enable_fp16_extension(ret);
+ cl_intel_platform_get_default_extension(ret);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
break;
case PCI_CHIP_SKYLAKE_HALO_GT4:
@@ -515,7 +525,8 @@ skl_gt4_break:
intel_skl_gt4_device.device_id = device_id;
intel_skl_gt4_device.platform = cl_get_platform_default();
ret = &intel_skl_gt4_device;
- cl_intel_platform_enable_fp16_extension(ret);
+ cl_intel_platform_get_default_extension(ret);
+ cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
break;
case PCI_CHIP_SANDYBRIDGE_BRIDGE:
diff --git a/src/cl_extensions.c b/src/cl_extensions.c
index 6cb1579..3e714ac 100644
--- a/src/cl_extensions.c
+++ b/src/cl_extensions.c
@@ -106,24 +106,48 @@ cl_intel_platform_get_default_extension(cl_device_id device)
}
LOCAL void
-cl_intel_platform_enable_fp16_extension(cl_device_id device)
+cl_intel_platform_enable_extension(cl_device_id device, uint32_t ext)
{
- cl_extensions_t new_ext;
- cl_platform_id pf = device->platform;
int id;
+ char* ext_str = NULL;
+ cl_platform_id pf = device->platform;
assert(pf);
- memcpy(&new_ext, pf->internal_extensions, sizeof(new_ext));
-
for(id = OPT1_EXT_START_ID; id <= OPT1_EXT_END_ID; id++) {
- if (id == EXT_ID(khr_fp16))
- new_ext.extensions[id].base.ext_enabled = 1;
+ if (id == ext) {
+ if (!pf->internal_extensions->extensions[id].base.ext_enabled)
+ ext_str = pf->internal_extensions->extensions[id].base.ext_name;
+
+ break;
+ }
}
- process_extension_str(&new_ext);
+ for(id = BASE_EXT_START_ID; id <= BASE_EXT_END_ID; id++) {
+ if (id == ext) {
+ if (!pf->internal_extensions->extensions[id].base.ext_enabled)
+ ext_str = pf->internal_extensions->extensions[id].base.ext_name;
- memcpy((char*)device->extensions, new_ext.ext_str, sizeof(device->extensions));
- device->extensions_sz = strlen(new_ext.ext_str) + 1;
+ break;
+ }
+ }
+
+ /* already enabled, skip. */
+ if (strstr(device->extensions, ext_str))
+ ext_str = NULL;
+
+ if (ext_str) {
+ if (device->extensions_sz <= 1) {
+ memcpy((char*)device->extensions, ext_str, strlen(ext_str));
+ device->extensions_sz = strlen(ext_str) + 1;
+ } else {
+ assert(device->extensions_sz + 1 + strlen(ext_str) < 256);
+ *(char*)(device->extensions + device->extensions_sz - 1) = ' ';
+ memcpy((char*)device->extensions + device->extensions_sz, ext_str, strlen(ext_str));
+ device->extensions_sz = device->extensions_sz + strlen(ext_str) + 1;
+ }
+
+ *(char*)(device->extensions + device->extensions_sz - 1) = 0;
+ }
}
LOCAL void
diff --git a/src/cl_extensions.h b/src/cl_extensions.h
index b4544e2..0006651 100644
--- a/src/cl_extensions.h
+++ b/src/cl_extensions.h
@@ -95,6 +95,6 @@ typedef struct cl_extensions {
extern void
cl_intel_platform_extension_init(cl_platform_id intel_platform);
extern void
-cl_intel_platform_enable_fp16_extension(cl_device_id device);
+cl_intel_platform_enable_extension(cl_device_id device, uint32_t name);
extern void
cl_intel_platform_get_default_extension(cl_device_id device);
--
1.9.1
More information about the Beignet
mailing list