<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jun 19, 2013 at 9:09 AM, Xing, Homer <span dir="ltr"><<a href="mailto:homer.xing@intel.com" target="_blank">homer.xing@intel.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Why do you "#define FLOAT double"? Why not directly use "double"?<br></blockquote><div style> I already give the reason in my cover letter. You can just change the macro to verify the same logic with float or double.</div>
<div style> As it always fails with double, I need to verify the test case's correctness with float type. Any other question?  </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div class="h5"><br>
-----Original Message-----<br>
From: Zhigang Gong [mailto:<a href="mailto:zhigang.gong@linux.intel.com">zhigang.gong@linux.intel.com</a>]<br>
Sent: Tuesday, June 18, 2013 5:29 PM<br>
To: Xing, Homer<br>
Cc: <a href="mailto:beignet@lists.freedesktop.org">beignet@lists.freedesktop.org</a><br>
Subject: Re: [Beignet] [PATCH 2/2] test case for 64-bit float<br>
<br>
On Tue, Jun 18, 2013 at 05:10:46PM +0800, Zhigang Gong wrote:<br>
> From: Homer Hsing <<a href="mailto:homer.xing@intel.com">homer.xing@intel.com</a>><br>
><br>
> Signed-off-by: Homer Hsing <<a href="mailto:homer.xing@intel.com">homer.xing@intel.com</a>><br>
> Signed-off-by: Zhigang Gong <<a href="mailto:zhigang.gong@linux.intel.com">zhigang.gong@linux.intel.com</a>><br>
> ---<br>
>  kernels/<a href="http://compiler_double.cl" target="_blank">compiler_double.cl</a>   | 10 +++++++++<br>
>  kernels/<a href="http://compiler_double_2.cl" target="_blank">compiler_double_2.cl</a> |  6 ++++++<br>
>  utests/CMakeLists.txt        |  2 ++<br>
>  utests/compiler_double.cpp   | 51 ++++++++++++++++++++++++++++++++++++++++++++<br>
>  utests/compiler_double_2.cpp | 47<br>
> ++++++++++++++++++++++++++++++++++++++++<br>
>  5 files changed, 116 insertions(+)<br>
>  create mode 100644 kernels/<a href="http://compiler_double.cl" target="_blank">compiler_double.cl</a>  create mode 100644<br>
> kernels/<a href="http://compiler_double_2.cl" target="_blank">compiler_double_2.cl</a>  create mode 100644<br>
> utests/compiler_double.cpp  create mode 100644<br>
> utests/compiler_double_2.cpp<br>
><br>
> diff --git a/kernels/<a href="http://compiler_double.cl" target="_blank">compiler_double.cl</a> b/kernels/<a href="http://compiler_double.cl" target="_blank">compiler_double.cl</a><br>
> new file mode 100644 index 0000000..6d00d8a<br>
> --- /dev/null<br>
> +++ b/kernels/<a href="http://compiler_double.cl" target="_blank">compiler_double.cl</a><br>
> @@ -0,0 +1,10 @@<br>
</div></div>> +#pragma OPENCL EXTENSION cl_khr_fp64 : enable #define FLOAT double<br>
<div class="im">> +kernel void compiler_double(global FLOAT *src, global FLOAT *dst) {<br>
> +  int i = get_global_id(0);<br>
> +  FLOAT d = 1.234567890123456789;<br>
> +  if (i % 2 == 0)<br>
> +    dst[i] = d * (src[i] + d);<br>
> +  else<br>
> +    dst[i] = d * src[i];<br>
> +}<br>
> diff --git a/kernels/<a href="http://compiler_double_2.cl" target="_blank">compiler_double_2.cl</a><br>
> b/kernels/<a href="http://compiler_double_2.cl" target="_blank">compiler_double_2.cl</a> new file mode 100644 index<br>
> 0000000..9e5c5ec<br>
> --- /dev/null<br>
> +++ b/kernels/<a href="http://compiler_double_2.cl" target="_blank">compiler_double_2.cl</a><br>
> @@ -0,0 +1,6 @@<br>
</div>> +#pragma OPENCL EXTENSION cl_khr_fp64 : enable kernel void<br>
> +compiler_double_2(global float *src, global double *dst) {<br>
<div><div class="h5">> +  int i = get_global_id(0);<br>
> +  float d = 1.234567890123456789f;<br>
> +  dst[i] = d * (d + src[i]);<br>
> +}<br>
> diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt index<br>
> 93778ed..0f740d2 100644<br>
> --- a/utests/CMakeLists.txt<br>
> +++ b/utests/CMakeLists.txt<br>
> @@ -27,6 +27,8 @@ set (utests_sources<br>
>    compiler_copy_image.cpp<br>
>    compiler_copy_image_3d.cpp<br>
>    compiler_copy_buffer_row.cpp<br>
> +  compiler_double.cpp<br>
> +  compiler_double_2.cpp<br>
>    compiler_fabs.cpp<br>
>    compiler_fill_image.cpp<br>
>    compiler_fill_image0.cpp<br>
> diff --git a/utests/compiler_double.cpp b/utests/compiler_double.cpp<br>
> new file mode 100644 index 0000000..d92f264<br>
> --- /dev/null<br>
> +++ b/utests/compiler_double.cpp<br>
> @@ -0,0 +1,51 @@<br>
> +#include <cmath><br>
> +#include "utest_helper.hpp"<br>
> +<br>
> +#define FLOAT double<br>
> +<br>
> +static void cpu(int global_id, FLOAT *src, FLOAT *dst) {<br>
> +  FLOAT f = src[global_id];<br>
> +  FLOAT d = 1.234567890123456789;<br>
> +  if (global_id % 2 == 0)<br>
> +    dst[global_id] = d * (f + d);<br>
> +  else<br>
> +    dst[global_id] = d * f;<br>
> +}<br>
> +<br>
> +void compiler_FLOAT(void)<br>
> +{<br>
> +  const size_t n = 16;<br>
> +  FLOAT cpu_dst[n], cpu_src[n];<br>
> +<br>
> +  // Setup kernel and buffers<br>
> +  OCL_CREATE_KERNEL("compiler_double");<br>
> +  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(FLOAT), NULL);<br>
> + OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(FLOAT), NULL);<br>
</div></div>> + OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);  OCL_SET_ARG(1,<br>
> + sizeof(cl_mem), &buf[1]);  globals[0] = n;  locals[0] = 16;<br>
<div><div class="h5">> +<br>
> +  // Run random tests<br>
> +  for (uint32_t pass = 0; pass < 1; ++pass) {<br>
> +    OCL_MAP_BUFFER(0);<br>
> +    for (int32_t i = 0; i < (int32_t) n; ++i)<br>
> +      cpu_src[i] = ((FLOAT*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;<br>
> +    OCL_UNMAP_BUFFER(0);<br>
> +<br>
> +    // Run the kernel on GPU<br>
> +    OCL_NDRANGE(1);<br>
> +<br>
> +    // Run on CPU<br>
> +    for (int32_t i = 0; i < (int32_t) n; ++i)<br>
> +      cpu(i, cpu_src, cpu_dst);<br>
> +<br>
> +    // Compare<br>
> +    OCL_MAP_BUFFER(1);<br>
> +    for (int32_t i = 0; i < (int32_t) n; ++i)<br>
> +      OCL_ASSERT(fabs(((FLOAT*)buf_data[1])[i] - cpu_dst[i]) < 1e-4);<br>
> +    OCL_UNMAP_BUFFER(1);<br>
> +  }<br>
> +}<br>
> +<br>
> +MAKE_UTEST_FROM_FUNCTION(compiler_FLOAT);<br>
                 sorry, one typo here, should be compiler_double rather than compiler_FLOAT.<br>
> diff --git a/utests/compiler_double_2.cpp<br>
> b/utests/compiler_double_2.cpp new file mode 100644 index<br>
> 0000000..8c30443<br>
> --- /dev/null<br>
> +++ b/utests/compiler_double_2.cpp<br>
> @@ -0,0 +1,47 @@<br>
> +#include <cmath><br>
> +#include "utest_helper.hpp"<br>
> +<br>
> +static void cpu(int global_id, float *src, double *dst) {<br>
> +  float f = src[global_id];<br>
> +  float d = 1.234567890123456789;<br>
> +  dst[global_id] = d * (d + f);<br>
> +}<br>
> +<br>
> +void compiler_double_2(void)<br>
> +{<br>
> +  const size_t n = 16;<br>
> +  float cpu_src[n];<br>
> +  double cpu_dst[n];<br>
> +<br>
> +  // Setup kernel and buffers<br>
> +  OCL_CREATE_KERNEL("compiler_double_2");<br>
> +  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);<br>
> + OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(double), NULL);<br>
</div></div>> + OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);  OCL_SET_ARG(1,<br>
> + sizeof(cl_mem), &buf[1]);  globals[0] = n;  locals[0] = 16;<br>
<div class="HOEnZb"><div class="h5">> +<br>
> +  // Run random tests<br>
> +  for (uint32_t pass = 0; pass < 1; ++pass) {<br>
> +    OCL_MAP_BUFFER(0);<br>
> +    for (int32_t i = 0; i < (int32_t) n; ++i)<br>
> +      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;<br>
> +    OCL_UNMAP_BUFFER(0);<br>
> +<br>
> +    // Run the kernel on GPU<br>
> +    OCL_NDRANGE(1);<br>
> +<br>
> +    // Run on CPU<br>
> +    for (int32_t i = 0; i < (int32_t) n; ++i)<br>
> +      cpu(i, cpu_src, cpu_dst);<br>
> +<br>
> +    // Compare<br>
> +    OCL_MAP_BUFFER(1);<br>
> +    for (int32_t i = 0; i < (int32_t) n; ++i)<br>
> +      OCL_ASSERT(fabs(((double*)buf_data[1])[i] - cpu_dst[i]) < 1e-4);<br>
> +    OCL_UNMAP_BUFFER(1);<br>
> +  }<br>
> +}<br>
> +<br>
> +MAKE_UTEST_FROM_FUNCTION(compiler_double_2);<br>
> --<br>
> 1.7.11.7<br>
><br>
> _______________________________________________<br>
> Beignet mailing list<br>
> <a href="mailto:Beignet@lists.freedesktop.org">Beignet@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/beignet" target="_blank">http://lists.freedesktop.org/mailman/listinfo/beignet</a><br>
_______________________________________________<br>
Beignet mailing list<br>
<a href="mailto:Beignet@lists.freedesktop.org">Beignet@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/beignet" target="_blank">http://lists.freedesktop.org/mailman/listinfo/beignet</a><br>
</div></div></blockquote></div><br></div></div>