[Beignet] [V4 PATCH 12/13] Utests: Add double check and refine compiler_double case.

Yang, Rong R rong.r.yang at intel.com
Tue Oct 27 00:38:11 PDT 2015


The patchset LGTM, pushed, thanks.

> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> junyan.he at inbox.com
> Sent: Thursday, October 22, 2015 14:30
> To: beignet at lists.freedesktop.org
> Subject: [Beignet] [V4 PATCH 12/13] Utests: Add double check and refine
> compiler_double case.
> 
> From: Junyan He <junyan.he at linux.intel.com>
> 
> Signed-off-by: Junyan He <junyan.he at linux.intel.com>
> ---
>  utests/CMakeLists.txt                |  2 ++
>  utests/compiler_double.cpp           |  5 ++++-
>  utests/compiler_double_precision.cpp |  3 +++
>  utests/utest_helper.cpp              | 19 +++++++++++++++++++
>  utests/utest_helper.hpp              |  3 +++
>  5 files changed, 31 insertions(+), 1 deletion(-)
> 
> diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt index
> 2f1e10f..3f30933 100644
> --- a/utests/CMakeLists.txt
> +++ b/utests/CMakeLists.txt
> @@ -193,6 +193,8 @@ set (utests_sources
>    compiler_sub_group_any.cpp
>    compiler_sub_group_all.cpp
>    compiler_time_stamp.cpp
> +  compiler_double_precision.cpp
> +  compiler_double.cpp
>    load_program_from_gen_bin.cpp
>    load_program_from_spir.cpp
>    get_arg_info.cpp
> diff --git a/utests/compiler_double.cpp b/utests/compiler_double.cpp index
> 7c54ddf..fc89a0f 100644
> --- a/utests/compiler_double.cpp
> +++ b/utests/compiler_double.cpp
> @@ -12,6 +12,9 @@ void compiler_double(void)
>    const size_t n = 16;
>    double cpu_dst[n], cpu_src[n];
> 
> +  if (!cl_check_double())
> +    return;
> +
>    // Setup kernel and buffers
>    OCL_CREATE_KERNEL("compiler_double");
>    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(double), NULL); @@ -38,7 +41,7
> @@ void compiler_double(void)
>      // Compare
>      OCL_MAP_BUFFER(1);
>      for (int32_t i = 0; i < (int32_t) n; ++i)
> -      OCL_ASSERT(fabs(((double*)buf_data[1])[i] - cpu_dst[i]) < 1e-4);
> +      OCL_ASSERT(fabs(((double*)buf_data[1])[i] - cpu_dst[i]) < 1e-32);
>      OCL_UNMAP_BUFFER(1);
>    }
>  }
> diff --git a/utests/compiler_double_precision.cpp
> b/utests/compiler_double_precision.cpp
> index 217fd18..f77a059 100644
> --- a/utests/compiler_double_precision.cpp
> +++ b/utests/compiler_double_precision.cpp
> @@ -9,6 +9,9 @@ static void double_precision_check(void)
>    double d1 = 0.12355678922345678;
>    float cpu_result = d1 - d0;
> 
> +  if (!cl_check_double())
> +    return;
> +
>    // Setup kernel and buffers
>    OCL_CREATE_KERNEL("double_precision_check");
>    //OCL_CREATE_KERNEL("compiler_array");
> diff --git a/utests/utest_helper.cpp b/utests/utest_helper.cpp index
> 664046c..46ba71f 100644
> --- a/utests/utest_helper.cpp
> +++ b/utests/utest_helper.cpp
> @@ -823,3 +823,22 @@ float select_ulpsize(float ULPSIZE_FAST_MATH, float
> ULPSIZE_NO_FAST_MATH)
> 
>    return ULPSIZE_FACTOR;
>  }
> +
> +int cl_check_double(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_khr_fp64") == NULL) {
> +    printf("No cl_khr_fp64, Skip!");
> +    return 0;
> +  }
> +
> +  return 1;
> +}
> diff --git a/utests/utest_helper.hpp b/utests/utest_helper.hpp index
> e6c8515..c1c761e 100644
> --- a/utests/utest_helper.hpp
> +++ b/utests/utest_helper.hpp
> @@ -241,5 +241,8 @@ double time_subtract(struct timeval *y, struct timeval
> *x, struct timeval *resul
>  /* check ulpsize */
>  float select_ulpsize(float ULPSIZE_FAST_MATH, float
> ULPSIZE_NO_FAST_MATH);
> 
> +/* Check is FP64 enabled. */
> +extern int cl_check_double(void);
> +
>  #endif /* __UTEST_HELPER_HPP__ */
> 
> --
> 1.9.1
> 
> 
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list