[v4] Utests: Allow testing cl_intel_accelerator via ICD

Submitted by Chuanbo Weng on Oct. 13, 2016, 9:22 a.m.

Details

Message ID 5A0E318D73C83C40A09BDBBE131796D738CACDF3@shsmsx102.ccr.corp.intel.com
State New
Headers show
Series "Utests: Allow testing cl_intel_accelerator via ICD" ( rev: 7 ) in Beignet

Not browsing as part of any series.

Commit Message

Chuanbo Weng Oct. 13, 2016, 9:22 a.m.
This version LGTM. Thanks for your patch, Rebecca.
Rong, I've also sent out a patchset to fix the problem I mentioned in previous e-mail:

> There is a bug in Beignet: cl_intel_motion_estimation is supported by 

> IVB only, but all devices show string cl_intel_motion_estimation in their CL_DEVICE_EXTENSIONS. I'll work out a patch to fix this problem.


Patchset here:
	https://lists.freedesktop.org/archives/beignet/2016-October/008123.html
	https://lists.freedesktop.org/archives/beignet/2016-October/008124.html

Please push my patchset at first and then push Rebecca's patch. Otherwise there will be FAIL on non-IVB platform.

Thanks,
Chuanbo Weng
	

-----Original Message-----
From: Rebecca N. Palmer [mailto:rebecca_palmer@zoho.com] 

Sent: Thursday, October 13, 2016 6:38 AM
To: Weng, Chuanbo <chuanbo.weng@intel.com>; beignet@lists.freedesktop.org
Subject: Re: [Beignet] [PATCH v4] Utests: Allow testing cl_intel_accelerator via ICD

v3: Use extension check, not beignet check.  Treat claiming to have the extension but not having the kernel as a failure.
v4: Make extension check a function, use stderr.
---
> There is a bug in Beignet: cl_intel_motion_estimation is supported by 

> IVB only, but all devices show string cl_intel_motion_estimation in their CL_DEVICE_EXTENSIONS. I'll work out a patch to fix this problem.

src/cl_extensions.c:72 - all Intel extensions are always "available", whether or not they work on the current device.

Patch hide | download patch | download mbox

--- a/utests/builtin_kernel_block_motion_estimate_intel.cpp
+++ b/utests/builtin_kernel_block_motion_estimate_intel.cpp
@@ -8,6 +8,9 @@  OCLRELEASEACCELERATORINTEL * oclReleaseA
 
 void builtin_kernel_block_motion_estimate_intel(void)
 {
+  if (!cl_check_motion_estimation()) {
+    return;
+  }
   char* built_in_kernel_names;
   size_t built_in_kernels_size;
   cl_int err = CL_SUCCESS;
@@ -21,7 +24,8 @@  void builtin_kernel_block_motion_estimat
   if (strstr(built_in_kernel_names, "block_motion_estimate_intel") == NULL)
   {
         free(built_in_kernel_names);
-        return;
+        fprintf(stderr, "Can't find block_motion_estimate_intel built-in kernel");
+        OCL_ASSERT(0);
   }
 
   cl_program built_in_prog = clCreateProgramWithBuiltInKernels(ctx, 1, &device, built_in_kernel_names, &err);
--- a/utests/CMakeLists.txt
+++ b/utests/CMakeLists.txt
@@ -287,7 +287,8 @@  set (utests_sources
   multi_queue_events.cpp
   compiler_mix.cpp
   compiler_math_3op.cpp
-  compiler_bsort.cpp)
+  compiler_bsort.cpp
+  builtin_kernel_block_motion_estimate_intel.cpp)
 
 if (LLVM_VERSION_NODOT VERSION_GREATER 34)
   SET(utests_sources
@@ -328,7 +329,6 @@  else(GEN_PCI_ID)
 endif(GEN_PCI_ID)
 
 if (NOT_BUILD_STAND_ALONE_UTEST)
-  SET(utests_sources ${utests_sources} builtin_kernel_block_motion_estimate_intel.cpp)
   ADD_CUSTOM_TARGET(kernel_bin.bin DEPENDS ${kernel_bin}.bin)  endif (NOT_BUILD_STAND_ALONE_UTEST)
 
--- a/utests/utest_helper.cpp
+++ b/utests/utest_helper.cpp
@@ -875,6 +875,24 @@  int cl_check_beignet(void)
   return 1;
 }
 
+int cl_check_motion_estimation(void)
+{
+  std::string extStr;
+  size_t param_value_size;
+  OCL_CALL(clGetDeviceInfo, device, CL_DEVICE_EXTENSIONS, 0, 0, 
+&param_value_size);
+  std::vector<char> param_value(param_value_size);
+  OCL_CALL(clGetDeviceInfo, device, CL_DEVICE_EXTENSIONS, param_value_size,
+           param_value.empty() ? NULL : &param_value.front(), 
+&param_value_size);
+  if (!param_value.empty())
+    extStr = std::string(&param_value.front(), param_value_size-1);
+
+  if (std::strstr(extStr.c_str(), "cl_intel_motion_estimation") == NULL) {
+    printf("No cl_intel_motion_estimation, Skip!");
+    return 0;
+  }
+  return 1;
+}
+
 int cl_check_subgroups(void)
 {
   std::string extStr;
--- a/utests/utest_helper.hpp
+++ b/utests/utest_helper.hpp
@@ -307,6 +307,9 @@  typedef cl_int(clGetKernelSubGroupInfoKH
                                               size_t *);  extern clGetKernelSubGroupInfoKHR_cb* utestclGetKernelSubGroupInfoKHR;
 
+/* Check if cl_intel_motion_estimation enabled. */ extern int 
+cl_check_motion_estimation(void);
+
 /* Check is cl version 2.0. */
 extern int cl_check_ocl20(void);
 


Comments

OK, Your patchset also LGTM, will push them later, thanks.

> -----Original Message-----

> From: Weng, Chuanbo

> Sent: Thursday, October 13, 2016 17:22

> To: Rebecca N. Palmer <rebecca_palmer@zoho.com>;

> beignet@lists.freedesktop.org; Yang, Rong R <rong.r.yang@intel.com>

> Subject: RE: [Beignet] [PATCH v4] Utests: Allow testing cl_intel_accelerator

> via ICD

> 

> This version LGTM. Thanks for your patch, Rebecca.

> Rong, I've also sent out a patchset to fix the problem I mentioned in previous

> e-mail:

> 

> > There is a bug in Beignet: cl_intel_motion_estimation is supported by

> > IVB only, but all devices show string cl_intel_motion_estimation in their

> CL_DEVICE_EXTENSIONS. I'll work out a patch to fix this problem.

> 

> Patchset here:

> 	https://lists.freedesktop.org/archives/beignet/2016-

> October/008123.html

> 	https://lists.freedesktop.org/archives/beignet/2016-

> October/008124.html

> 

> Please push my patchset at first and then push Rebecca's patch. Otherwise

> there will be FAIL on non-IVB platform.

> 

> Thanks,

> Chuanbo Weng

> 

> 

> -----Original Message-----

> From: Rebecca N. Palmer [mailto:rebecca_palmer@zoho.com]

> Sent: Thursday, October 13, 2016 6:38 AM

> To: Weng, Chuanbo <chuanbo.weng@intel.com>;

> beignet@lists.freedesktop.org

> Subject: Re: [Beignet] [PATCH v4] Utests: Allow testing cl_intel_accelerator

> via ICD

> 

> v3: Use extension check, not beignet check.  Treat claiming to have the

> extension but not having the kernel as a failure.

> v4: Make extension check a function, use stderr.

> ---

> > There is a bug in Beignet: cl_intel_motion_estimation is supported by

> > IVB only, but all devices show string cl_intel_motion_estimation in their

> CL_DEVICE_EXTENSIONS. I'll work out a patch to fix this problem.

> src/cl_extensions.c:72 - all Intel extensions are always "available", whether

> or not they work on the current device.

> 

> --- a/utests/builtin_kernel_block_motion_estimate_intel.cpp

> +++ b/utests/builtin_kernel_block_motion_estimate_intel.cpp

> @@ -8,6 +8,9 @@ OCLRELEASEACCELERATORINTEL * oclReleaseA

> 

>  void builtin_kernel_block_motion_estimate_intel(void)

>  {

> +  if (!cl_check_motion_estimation()) {

> +    return;

> +  }

>    char* built_in_kernel_names;

>    size_t built_in_kernels_size;

>    cl_int err = CL_SUCCESS;

> @@ -21,7 +24,8 @@ void builtin_kernel_block_motion_estimat

>    if (strstr(built_in_kernel_names, "block_motion_estimate_intel") == NULL)

>    {

>          free(built_in_kernel_names);

> -        return;

> +        fprintf(stderr, "Can't find block_motion_estimate_intel built-in kernel");

> +        OCL_ASSERT(0);

>    }

> 

>    cl_program built_in_prog = clCreateProgramWithBuiltInKernels(ctx, 1,

> &device, built_in_kernel_names, &err);

> --- a/utests/CMakeLists.txt

> +++ b/utests/CMakeLists.txt

> @@ -287,7 +287,8 @@ set (utests_sources

>    multi_queue_events.cpp

>    compiler_mix.cpp

>    compiler_math_3op.cpp

> -  compiler_bsort.cpp)

> +  compiler_bsort.cpp

> +  builtin_kernel_block_motion_estimate_intel.cpp)

> 

>  if (LLVM_VERSION_NODOT VERSION_GREATER 34)

>    SET(utests_sources

> @@ -328,7 +329,6 @@ else(GEN_PCI_ID)

>  endif(GEN_PCI_ID)

> 

>  if (NOT_BUILD_STAND_ALONE_UTEST)

> -  SET(utests_sources ${utests_sources}

> builtin_kernel_block_motion_estimate_intel.cpp)

>    ADD_CUSTOM_TARGET(kernel_bin.bin DEPENDS ${kernel_bin}.bin)  endif

> (NOT_BUILD_STAND_ALONE_UTEST)

> 

> --- a/utests/utest_helper.cpp

> +++ b/utests/utest_helper.cpp

> @@ -875,6 +875,24 @@ int cl_check_beignet(void)

>    return 1;

>  }

> 

> +int cl_check_motion_estimation(void)

> +{

> +  std::string extStr;

> +  size_t param_value_size;

> +  OCL_CALL(clGetDeviceInfo, device, CL_DEVICE_EXTENSIONS, 0, 0,

> +&param_value_size);

> +  std::vector<char> param_value(param_value_size);

> +  OCL_CALL(clGetDeviceInfo, device, CL_DEVICE_EXTENSIONS,

> param_value_size,

> +           param_value.empty() ? NULL : &param_value.front(),

> +&param_value_size);

> +  if (!param_value.empty())

> +    extStr = std::string(&param_value.front(), param_value_size-1);

> +

> +  if (std::strstr(extStr.c_str(), "cl_intel_motion_estimation") == NULL) {

> +    printf("No cl_intel_motion_estimation, Skip!");

> +    return 0;

> +  }

> +  return 1;

> +}

> +

>  int cl_check_subgroups(void)

>  {

>    std::string extStr;

> --- a/utests/utest_helper.hpp

> +++ b/utests/utest_helper.hpp

> @@ -307,6 +307,9 @@ typedef cl_int(clGetKernelSubGroupInfoKH

>                                                size_t *);  extern clGetKernelSubGroupInfoKHR_cb*

> utestclGetKernelSubGroupInfoKHR;

> 

> +/* Check if cl_intel_motion_estimation enabled. */ extern int

> +cl_check_motion_estimation(void);

> +

>  /* Check is cl version 2.0. */

>  extern int cl_check_ocl20(void);

>