On Sat, 2017-01-21 at 17:39 +0000, Rebecca N. Palmer wrote: > > I have a first attempt at "enable/disable 2.0 at run time" written, > > but haven't yet tested it. > > It worked for me, and here it is; testing on other hardware (in > particular, hardware that supports 2.0: the last 15 tests of the test > suite appear to be the ones that test that) would be appreciated. > > (Upstream may not want to take this as-is, as it doesn't scale very > well to more than one 2.0-supporting hardware generation: it's > intended as a quick relatively-low-risk fix for packagers.) Thanks a lot for patch! I've applied it in Fedora: https://src.fedorapr oject.org/cgit/rpms/beignet.git/commit/?h=master&id=4280d7eeb53ca94aae0 d81b7820a347536a1866a
CC me for anything related ;) > > Signed-off-by: Rebecca N. Palmer <rebecca_pal...@zoho.com> > > --- beignet-1.3.0.orig/CMakeLists.txt > +++ beignet-1.3.0/CMakeLists.txt > @@ -231,19 +231,8 @@ IF (EXPERIMENTAL_DOUBLE) > ADD_DEFINITIONS(-DENABLE_FP64) > ENDIF(EXPERIMENTAL_DOUBLE) > > -OPTION(ENABLE_OPENCL_20 "Enable opencl 2.0 support" OFF) > +OPTION(ENABLE_OPENCL_20 "Enable opencl 2.0 support" ON) > IF (ENABLE_OPENCL_20) > - Find_Program(LSPCI lspci) > - IF (NOT LSPCI) > - MESSAGE(FATAL_ERROR "Looking for lspci - not found") > - ENDIF (NOT LSPCI) > - EXECUTE_PROCESS(COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/GetGenID.sh" > - RESULT_VARIABLE SUPPORT_OCL20_DEVICE > - OUTPUT_VARIABLE PCI_ID_NOT_USED) > - > - IF (NOT SUPPORT_OCL20_DEVICE EQUAL 1) > - MESSAGE(FATAL_ERROR "Only SKL and newer devices support OpenCL > 2.0 now, your device don't support.") > - ENDIF (NOT SUPPORT_OCL20_DEVICE EQUAL 1) > > IF (NOT HAVE_DRM_INTEL_BO_SET_SOFTPIN) > MESSAGE(FATAL_ERROR "Please update libdrm to version 2.4.66 or > later to enable OpenCL 2.0.") > --- beignet-1.3.0.orig/backend/src/backend/program.cpp > +++ beignet-1.3.0/backend/src/backend/program.cpp > @@ -31,6 +31,7 @@ > #include "ir/value.hpp" > #include "ir/unit.hpp" > #include "ir/printf.hpp" > +#include "../src/cl_device_data.h" > > #ifdef GBE_COMPILER_AVAILABLE > #include "llvm/llvm_to_gen.hpp" > @@ -855,6 +856,7 @@ namespace gbe { > size_t *errSize, > uint32_t &oclVersion) > { > + uint32_t maxoclVersion = oclVersion; > std::string pchFileName; > bool findPCH = false; > #if defined(__ANDROID__) > @@ -1023,14 +1025,18 @@ EXTEND_QUOTE: > > if (useDefaultCLCVersion) { > #ifdef ENABLE_OPENCL_20 > + if(maxoclVersion >= 200){ > +#else > + if(0){ > +#endif > clOpt.push_back("-D__OPENCL_C_VERSION__=200"); > clOpt.push_back("-cl-std=CL2.0"); > oclVersion = 200; > -#else > + }else{ > clOpt.push_back("-D__OPENCL_C_VERSION__=120"); > clOpt.push_back("-cl-std=CL1.2"); > oclVersion = 120; > -#endif > + } > } > //for clCompilerProgram usage. > if(temp_header_path){ > @@ -1061,7 +1067,12 @@ EXTEND_QUOTE: > clOpt.push_back("-include-pch"); > clOpt.push_back(pchFileName); > } > - > + if (oclVersion > maxoclVersion){ > + if (err && stringSize > 0 && errSize) { > + *errSize = snprintf(err, stringSize, "Requested OpenCL > version %lf is higher than maximum supported version %lf\n", > (float)oclVersion/100.0,(float)maxoclVersion/100.0); > + } > + return false; > + } > return true; > } > > @@ -1076,7 +1087,7 @@ EXTEND_QUOTE: > std::vector<std::string> clOpt; > std::string dumpLLVMFileName, dumpASMFileName; > std::string dumpSPIRBinaryName; > - uint32_t oclVersion = 0; > + uint32_t oclVersion = MAX_OCLVERSION(deviceID); > if (!processSourceAndOption(source, options, NULL, clOpt, > dumpLLVMFileName, dumpASMFileName, > dumpSPIRBinaryName, > optLevel, > @@ -1139,7 +1150,7 @@ EXTEND_QUOTE: > std::vector<std::string> clOpt; > std::string dumpLLVMFileName, dumpASMFileName; > std::string dumpSPIRBinaryName; > - uint32_t oclVersion = 0; > + uint32_t oclVersion = MAX_OCLVERSION(deviceID); > if (!processSourceAndOption(source, options, temp_header_path, > clOpt, > dumpLLVMFileName, dumpASMFileName, > dumpSPIRBinaryName, > optLevel, stringSize, err, errSize, > oclVersion)) > --- beignet-1.3.0.orig/src/cl_device_data.h > +++ beignet-1.3.0/src/cl_device_data.h > @@ -363,5 +363,7 @@ > > #define IS_GEN9(devid) (IS_SKYLAKE(devid) || IS_BROXTON(devid) > || IS_KABYLAKE(devid)) > > +#define MAX_OCLVERSION(devid) (IS_GEN9(devid) ? 200 : 120) > + > #endif /* __CL_DEVICE_DATA_H__ */ > > --- beignet-1.3.0.orig/src/cl_gen9_device.h > +++ beignet-1.3.0/src/cl_gen9_device.h > @@ -27,5 +27,7 @@ > .max_mem_alloc_size = 4 * 1024 * 1024 * 1024ul, > .global_mem_size = 4 * 1024 * 1024 * 1024ul, > > +#define GEN9_DEVICE 1 > #include "cl_gt_device.h" > +#undef GEN9_DEVICE > > --- beignet-1.3.0.orig/src/cl_gt_device.h > +++ beignet-1.3.0/src/cl_gt_device.h > @@ -16,7 +16,13 @@ > * > * Author: Benjamin Segovia <benjamin.sego...@intel.com> > */ > - > +#ifdef GEN9_DEVICE > +#define LIBCL_VERSION_STRING GEN9_LIBCL_VERSION_STRING > +#define LIBCL_C_VERSION_STRING GEN9_LIBCL_C_VERSION_STRING > +#else > +#define LIBCL_VERSION_STRING NONGEN9_LIBCL_VERSION_STRING > +#define LIBCL_C_VERSION_STRING NONGEN9_LIBCL_C_VERSION_STRING > +#endif > /* Common fields for both all GT devices (IVB / SNB) */ > .device_type = CL_DEVICE_TYPE_GPU, > .device_id=0,/* == device_id (set when requested) */ > @@ -39,7 +45,7 @@ > .native_vector_width_float = 4, > .native_vector_width_double = 2, > .native_vector_width_half = 8, > -#ifdef ENABLE_OPENCL_20 > +#if defined(ENABLE_OPENCL_20) && defined (GEN9_DEVICE) > .address_bits = 64, > #else > .address_bits = 32, > --- beignet-1.3.0.orig/src/cl_platform_id.c > +++ beignet-1.3.0/src/cl_platform_id.c > @@ -32,7 +32,7 @@ > > static struct _cl_platform_id intel_platform_data = { > DECL_INFO_STRING(profile, "FULL_PROFILE") > - DECL_INFO_STRING(version, LIBCL_VERSION_STRING) > + DECL_INFO_STRING(version, GEN9_LIBCL_VERSION_STRING) > DECL_INFO_STRING(name, "Intel Gen OCL Driver") > DECL_INFO_STRING(vendor, "Intel") > DECL_INFO_STRING(icd_suffix_khr, "Intel") > --- beignet-1.3.0.orig/src/cl_platform_id.h > +++ beignet-1.3.0/src/cl_platform_id.h > @@ -72,8 +72,10 @@ extern cl_int cl_get_platform_ids(cl_uin > #else > #define LIBCL_DRIVER_VERSION_STRING > _JOINT(LIBCL_DRIVER_VERSION_MAJOR, LIBCL_DRIVER_VERSION_MINOR) > #endif > -#define LIBCL_VERSION_STRING "OpenCL " _JOINT(LIBCL_C_VERSION_MAJOR, > LIBCL_C_VERSION_MINOR) " beignet " LIBCL_DRIVER_VERSION_STRING > BEIGNET_GIT_SHA1_STRING > -#define LIBCL_C_VERSION_STRING "OpenCL C " > _JOINT(LIBCL_C_VERSION_MAJOR, LIBCL_C_VERSION_MINOR) " beignet " > LIBCL_DRIVER_VERSION_STRING BEIGNET_GIT_SHA1_STRING > +#define GEN9_LIBCL_VERSION_STRING "OpenCL " > _JOINT(LIBCL_C_VERSION_MAJOR, LIBCL_C_VERSION_MINOR) " beignet " > LIBCL_DRIVER_VERSION_STRING BEIGNET_GIT_SHA1_STRING > +#define GEN9_LIBCL_C_VERSION_STRING "OpenCL C " > _JOINT(LIBCL_C_VERSION_MAJOR, LIBCL_C_VERSION_MINOR) " beignet " > LIBCL_DRIVER_VERSION_STRING BEIGNET_GIT_SHA1_STRING > +#define NONGEN9_LIBCL_VERSION_STRING "OpenCL 1.2 beignet " > LIBCL_DRIVER_VERSION_STRING BEIGNET_GIT_SHA1_STRING > +#define NONGEN9_LIBCL_C_VERSION_STRING "OpenCL C 1.2 beignet " > LIBCL_DRIVER_VERSION_STRING BEIGNET_GIT_SHA1_STRING > > #endif /* __CL_PLATFORM_ID_H__ */ > > -- -Igor Gnatenko _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet