diff options
author | Benjamin Segovia <bsegovia@bsegovia-i70.sc.intel.com> | 2012-10-10 19:05:59 +0000 |
---|---|---|
committer | Benjamin Segovia <bsegovia@bsegovia-i70.sc.intel.com> | 2012-10-12 19:44:05 +0000 |
commit | b8d957a216b54bda80c3cae7f0c6cc548c374f63 (patch) | |
tree | e50656fb2248ba58892c6e7908f6fdb51c37df0c /utests/compiler_math.cpp | |
parent | fecf9e53aa18f3e5c68a167888249613d05b003f (diff) | |
download | beignet-b8d957a216b54bda80c3cae7f0c6cc548c374f63.tar.gz |
Added support for various math functions
Diffstat (limited to 'utests/compiler_math.cpp')
-rw-r--r-- | utests/compiler_math.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/utests/compiler_math.cpp b/utests/compiler_math.cpp new file mode 100644 index 00000000..7303dd5f --- /dev/null +++ b/utests/compiler_math.cpp @@ -0,0 +1,55 @@ +#include "utest_helper.hpp" +#include <cmath> +#include <algorithm> + +static void cpu_compiler_math(float *dst, float *src, int get_global_id0) +{ + const float x = src[get_global_id0]; + switch (get_global_id0) { + case 0: dst[get_global_id0] = cosf(x); break; + case 1: dst[get_global_id0] = sinf(x); break; + case 2: dst[get_global_id0] = log2f(x); break; + case 3: dst[get_global_id0] = sqrtf(x); break; + case 4: dst[get_global_id0] = 1.f/ sqrtf(x); break; + case 5: dst[get_global_id0] = 1.f / x; break; + case 6: dst[get_global_id0] = tanf(x); break; + default: dst[get_global_id0] = 1.f; break; + }; +} + +static void compiler_math(void) +{ + const size_t n = 32; + float cpu_dst[32], cpu_src[32]; + + // Setup kernel and buffers + OCL_CREATE_KERNEL("compiler_math"); + OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL); + OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL); + OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]); + OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]); + globals[0] = 16; + locals[0] = 16; + + OCL_MAP_BUFFER(1); + for (uint32_t i = 0; i < 32; ++i) + cpu_src[i] = ((float*)buf_data[1])[i] = float(i); + OCL_UNMAP_BUFFER(1); + OCL_NDRANGE(1); + + OCL_MAP_BUFFER(0); + OCL_MAP_BUFFER(1); + for (int i = 0; i < 16; ++i) + cpu_compiler_math(cpu_dst, cpu_src, i); + for (int i = 0; i < 16; ++i) { + const float cpu = cpu_dst[i]; + const float gpu = ((float*)buf_data[0])[i]; + OCL_ASSERT(fabs(gpu-cpu)/std::max(fabs(cpu), fabs(gpu)) < 1e-4f); + } + OCL_UNMAP_BUFFER(0); + OCL_UNMAP_BUFFER(1); +} + +MAKE_UTEST_FROM_FUNCTION(compiler_math) + + |