[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,
> +¶m_value_size);
> + std::vector<char> param_value(param_value_size);
> + OCL_CALL(clGetDeviceInfo, device, CL_DEVICE_EXTENSIONS,
> param_value_size,
> + param_value.empty() ? NULL : ¶m_value.front(),
> +¶m_value_size);
> + if (!param_value.empty())
> + extStr = std::string(¶m_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