summaryrefslogtreecommitdiff
path: root/utests/compiler_sqrt_div.cpp
diff options
context:
space:
mode:
authorrander <rander.wang@intel.com>2017-05-19 16:14:40 +0800
committerYang Rong <rong.r.yang@intel.com>2017-06-09 19:45:55 +0800
commit8ed276000efe129481ba0f83643bf5a8a2389309 (patch)
treee5842940f1923da76127619609b517ce871ded80 /utests/compiler_sqrt_div.cpp
parent0fd1ef5a1643973c1369b203ce596729e00da8ec (diff)
downloadbeignet-8ed276000efe129481ba0f83643bf5a8a2389309.tar.gz
utests: add utest for sqrt-div optimization
Signed-off-by: rander.wang <rander.wang@intel.com> Reviewed-by: Yang Rong <rong.r.yang@intel.com>
Diffstat (limited to 'utests/compiler_sqrt_div.cpp')
-rw-r--r--utests/compiler_sqrt_div.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/utests/compiler_sqrt_div.cpp b/utests/compiler_sqrt_div.cpp
new file mode 100644
index 00000000..c22c5a39
--- /dev/null
+++ b/utests/compiler_sqrt_div.cpp
@@ -0,0 +1,61 @@
+#include "utest_helper.hpp"
+#include <cmath>
+
+void compiler_sqrt_div(void) {
+ const int n = 1024;
+ float src[n];
+
+ // Setup kernel and buffers
+ OCL_CREATE_KERNEL("compiler_sqrt_div");
+ 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_sqrt_div);