diff options
Diffstat (limited to 'utests')
-rw-r--r-- | utests/compiler_abs.cpp | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/utests/compiler_abs.cpp b/utests/compiler_abs.cpp index 59d83651..a1b14b46 100644 --- a/utests/compiler_abs.cpp +++ b/utests/compiler_abs.cpp @@ -3,23 +3,26 @@ template <typename T, int N> struct cl_vec { - T ptr[N]; + T ptr[((N+1)/2)*2]; //align to 2 elements. typedef cl_vec<T, N> vec_type; cl_vec(void) { - memset(ptr, 0, sizeof(T) * N); + memset(ptr, 0, sizeof(T) * ((N+1)/2)*2); } cl_vec(vec_type & other) { + memset(ptr, 0, sizeof(T) * ((N+1)/2)*2); memcpy (this->ptr, other.ptr, sizeof(T) * N); } vec_type& operator= (vec_type & other) { + memset(ptr, 0, sizeof(T) * ((N+1)/2)*2); memcpy (this->ptr, other.ptr, sizeof(T) * N); return *this; } template <typename U> vec_type& operator= (cl_vec<U, N> & other) { + memset(ptr, 0, sizeof(T) * ((N+1)/2)*2); memcpy (this->ptr, other.ptr, sizeof(T) * N); return *this; } @@ -56,6 +59,8 @@ template <typename T, typename U> static void cpu(int global_id, T *src, U *dst) template <typename T, int N> static void gen_rand_val (cl_vec<T, N>& vect) { int i = 0; + + memset(vect.ptr, 0, sizeof(T) * ((N+1)/2)*2); for (; i < N; i++) { vect.ptr[i] = static_cast<T>((rand() & 63) - 32); } @@ -66,25 +71,34 @@ template <typename T> static void gen_rand_val (T & val) val = static_cast<T>((rand() & 63) - 32); } +template <typename T> +inline static void print_data (T& val) +{ + if (std::is_unsigned<T>::value) + printf(" %u", val); + else + printf(" %d", val); +} + template <typename T, typename U, int N> static void dump_data (cl_vec<T, N>* src, - cl_vec<U, N>* dst, int n) + cl_vec<U, N>* dst, int n) { U* val = reinterpret_cast<U *>(dst); - n = n*N; + n = n*((N+1)/2)*2; printf("\nRaw: \n"); for (int32_t i = 0; i < (int32_t) n; ++i) { - printf(" %d", ((T *)buf_data[0])[i]); + print_data(((T *)buf_data[0])[i]); } printf("\nCPU: \n"); for (int32_t i = 0; i < (int32_t) n; ++i) { - printf(" %d", val[i]); + print_data(val[i]); } printf("\nGPU: \n"); for (int32_t i = 0; i < (int32_t) n; ++i) { - printf(" %d", ((U *)buf_data[1])[i]); + print_data(((U *)buf_data[1])[i]); } } @@ -92,16 +106,16 @@ template <typename T, typename U> static void dump_data (T* src, U* dst, int n) { printf("\nRaw: \n"); for (int32_t i = 0; i < (int32_t) n; ++i) { - printf(" %d", ((T *)buf_data[0])[i]); + print_data(((T *)buf_data[0])[i]); } printf("\nCPU: \n"); for (int32_t i = 0; i < (int32_t) n; ++i) { - printf(" %d", dst[i]); + print_data(dst[i]); } printf("\nGPU: \n"); for (int32_t i = 0; i < (int32_t) n; ++i) { - printf(" %d", ((U *)buf_data[1])[i]); + print_data(((U *)buf_data[1])[i]); } } @@ -111,6 +125,8 @@ template <typename T, typename U> static void compiler_abs_with_type(void) U cpu_dst[16]; T cpu_src[16]; + printf("sizeof T, is %u, sizeof U is %u\n", (int)sizeof(T), (int)sizeof(U)); + // Setup buffers OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(T), NULL); OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL); @@ -122,6 +138,12 @@ template <typename T, typename U> static void compiler_abs_with_type(void) // Run random tests for (uint32_t pass = 0; pass < 8; ++pass) { OCL_MAP_BUFFER(0); + + /* Clear the dst buffer to avoid random data. */ + OCL_MAP_BUFFER(1); + memset(buf_data[1], 0, sizeof(U) * n); + OCL_UNMAP_BUFFER(1); + for (int32_t i = 0; i < (int32_t) n; ++i) { gen_rand_val(cpu_src[i]); } @@ -166,54 +188,66 @@ ABS_TEST_TYPE(uchar, uchar) typedef cl_vec<int, 2> int2; +typedef cl_vec<int, 3> int3; typedef cl_vec<int, 4> int4; typedef cl_vec<int, 8> int8; typedef cl_vec<int, 16> int16; typedef cl_vec<unsigned int, 2> uint2; +typedef cl_vec<unsigned int, 3> uint3; typedef cl_vec<unsigned int, 4> uint4; typedef cl_vec<unsigned int, 8> uint8; typedef cl_vec<unsigned int, 16> uint16; ABS_TEST_TYPE(int2, uint2) +ABS_TEST_TYPE(int3, uint3) ABS_TEST_TYPE(int4, uint4) ABS_TEST_TYPE(int8, uint8) ABS_TEST_TYPE(int16, uint16) ABS_TEST_TYPE(uint2, uint2) +ABS_TEST_TYPE(uint3, uint3) ABS_TEST_TYPE(uint4, uint4) ABS_TEST_TYPE(uint8, uint8) ABS_TEST_TYPE(uint16, uint16) typedef cl_vec<char, 2> char2; +typedef cl_vec<char, 3> char3; typedef cl_vec<char, 4> char4; typedef cl_vec<char, 8> char8; typedef cl_vec<char, 16> char16; typedef cl_vec<unsigned char, 2> uchar2; +typedef cl_vec<unsigned char, 3> uchar3; typedef cl_vec<unsigned char, 4> uchar4; typedef cl_vec<unsigned char, 8> uchar8; typedef cl_vec<unsigned char, 16> uchar16; ABS_TEST_TYPE(char2, uchar2) +ABS_TEST_TYPE(char3, uchar3) ABS_TEST_TYPE(char4, uchar4) ABS_TEST_TYPE(char8, uchar8) ABS_TEST_TYPE(char16, uchar16) ABS_TEST_TYPE(uchar2, uchar2) +ABS_TEST_TYPE(uchar3, uchar3) ABS_TEST_TYPE(uchar4, uchar4) ABS_TEST_TYPE(uchar8, uchar8) ABS_TEST_TYPE(uchar16, uchar16) typedef cl_vec<short, 2> short2; +typedef cl_vec<short, 3> short3; typedef cl_vec<short, 4> short4; typedef cl_vec<short, 8> short8; typedef cl_vec<short, 16> short16; typedef cl_vec<unsigned short, 2> ushort2; +typedef cl_vec<unsigned short, 3> ushort3; typedef cl_vec<unsigned short, 4> ushort4; typedef cl_vec<unsigned short, 8> ushort8; typedef cl_vec<unsigned short, 16> ushort16; ABS_TEST_TYPE(short2, ushort2) +ABS_TEST_TYPE(short3, ushort3) ABS_TEST_TYPE(short4, ushort4) ABS_TEST_TYPE(short8, ushort8) ABS_TEST_TYPE(short16, ushort16) ABS_TEST_TYPE(ushort2, ushort2) +ABS_TEST_TYPE(ushort3, ushort3) ABS_TEST_TYPE(ushort4, ushort4) ABS_TEST_TYPE(ushort8, ushort8) ABS_TEST_TYPE(ushort16, ushort16) |