Signed-off-by: rander.wang <rander.w...@intel.com>
---
 kernels/compiler_sqrtDiv.cl |  8 ++++++
 utests/CMakeLists.txt       |  3 ++-
 utests/compiler_sqrtDiv.cpp | 61 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 71 insertions(+), 1 deletion(-)
 create mode 100644 kernels/compiler_sqrtDiv.cl
 create mode 100644 utests/compiler_sqrtDiv.cpp

diff --git a/kernels/compiler_sqrtDiv.cl b/kernels/compiler_sqrtDiv.cl
new file mode 100644
index 0000000..570fd25
--- /dev/null
+++ b/kernels/compiler_sqrtDiv.cl
@@ -0,0 +1,8 @@
+kernel void compiler_sqrtDiv(global float *src, global float *dst) {
+  int i = get_global_id(0);
+  float tmp = sqrt(src[i]);
+  dst[i*4] = 1.0f/tmp;
+  dst[i*4+1] = (float)i/tmp;
+  dst[i*4+2] = 2.0f/tmp;
+  dst[i*4+3] = 1.0f/tmp  + tmp;
+};
diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt
index b7ef742..ae9e2bd 100644
--- a/utests/CMakeLists.txt
+++ b/utests/CMakeLists.txt
@@ -300,7 +300,8 @@ set (utests_sources
   compiler_generic_pointer.cpp
   runtime_pipe_query.cpp
   compiler_pipe_builtin.cpp
-  compiler_device_enqueue.cpp)
+  compiler_device_enqueue.cpp
+  compiler_sqrtDiv.cpp)
 
 if (LLVM_VERSION_NODOT VERSION_GREATER 34)
   SET(utests_sources
diff --git a/utests/compiler_sqrtDiv.cpp b/utests/compiler_sqrtDiv.cpp
new file mode 100644
index 0000000..f3adc95
--- /dev/null
+++ b/utests/compiler_sqrtDiv.cpp
@@ -0,0 +1,61 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+void compiler_sqrtDiv(void) {
+       const int n = 1024;
+       float src[n];
+
+       // Setup kernel and buffers
+       OCL_CREATE_KERNEL("compiler_sqrtDiv");
+       OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+       OCL_CREATE_BUFFER(buf[1], 0, n * 4 * sizeof(float), NULL);
+       OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+       OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+       globals[0] = n;
+       locals[0] = 16;
+
+       for (int j = 0; j < 1024; j++) {
+               OCL_MAP_BUFFER(0);
+               for (int i = 0; i < n; ++i) {
+                       src[i] = ((float*) buf_data[0])[i] = (j * n + i + 1) * 
0.001f;
+               }
+               OCL_UNMAP_BUFFER(0);
+
+               OCL_NDRANGE(1);
+
+               OCL_MAP_BUFFER(1);
+               float *dst = (float*) buf_data[1];
+               for (int i = 0; i < n; ++i) {
+                       float cpu = 1.0f/sqrt(src[i]);
+                       float gpu = dst[4*i];
+                       if (fabsf(cpu - gpu) >= 1e-3) {
+                               printf("%f %f %f", src[i], cpu, gpu);
+                               OCL_ASSERT(0);
+                       }
+
+                       cpu = i/sqrt(src[i]);
+                       gpu = dst[4*i+1];
+                       if (fabsf(cpu - gpu) >= 1e-3) {
+                               printf("%f %f %f", src[i], cpu, gpu);
+                               OCL_ASSERT(0);
+                       }
+
+                       cpu = 2.0f/sqrt(src[i]);
+                       gpu = dst[4*i+2];
+                       if (fabsf(cpu - gpu) >= 1e-3) {
+                               printf("%f %f %f", src[i], cpu, gpu);
+                               OCL_ASSERT(0);
+                       }
+
+                       cpu = 1.0f/sqrt(src[i]) + sqrt(src[i]);
+                       gpu = dst[4*i+3];
+                       if (fabsf(cpu - gpu) >= 1e-3) {
+                               printf("%f %f %f", src[i], cpu, gpu);
+                               OCL_ASSERT(0);
+                       }
+               }
+               OCL_UNMAP_BUFFER(1);
+       }
+}
+
+MAKE_UTEST_FROM_FUNCTION (compiler_sqrtDiv);
-- 
2.7.4

_______________________________________________
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet

Reply via email to