|
| 1 | +// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out |
| 2 | +// RUN: %CPU_RUN_PLACEHOLDER %t.out |
| 3 | +// RUN: %GPU_RUN_PLACEHOLDER %t.out |
| 4 | +// RUN: %ACC_RUN_PLACEHOLDER %t.out |
| 5 | + |
| 6 | +#include <CL/sycl.hpp> |
| 7 | + |
| 8 | +#define TEST(FUNC, MARRAY_ELEM_TYPE, DIM, EXPECTED, DELTA, ...) \ |
| 9 | + { \ |
| 10 | + { \ |
| 11 | + MARRAY_ELEM_TYPE result[DIM]; \ |
| 12 | + { \ |
| 13 | + sycl::buffer<MARRAY_ELEM_TYPE> b(result, sycl::range{DIM}); \ |
| 14 | + Queue.submit([&](sycl::handler &cgh) { \ |
| 15 | + sycl::accessor res_access{b, cgh}; \ |
| 16 | + cgh.single_task([=]() { \ |
| 17 | + sycl::marray<MARRAY_ELEM_TYPE, DIM> res = FUNC(__VA_ARGS__); \ |
| 18 | + for (int i = 0; i < DIM; i++) \ |
| 19 | + res_access[i] = res[i]; \ |
| 20 | + }); \ |
| 21 | + }); \ |
| 22 | + } \ |
| 23 | + for (int i = 0; i < DIM; i++) { \ |
| 24 | + assert(abs(result[i] - EXPECTED[i]) <= DELTA); \ |
| 25 | + } \ |
| 26 | + } \ |
| 27 | + } |
| 28 | + |
| 29 | +#define TEST2(FUNC, TYPE, EXPECTED, DELTA, ...) \ |
| 30 | + { \ |
| 31 | + { \ |
| 32 | + TYPE result; \ |
| 33 | + { \ |
| 34 | + sycl::buffer<TYPE> b(&result, 1); \ |
| 35 | + Queue.submit([&](sycl::handler &cgh) { \ |
| 36 | + sycl::accessor res_access{b, cgh}; \ |
| 37 | + cgh.single_task([=]() { res_access[0] = FUNC(__VA_ARGS__); }); \ |
| 38 | + }); \ |
| 39 | + } \ |
| 40 | + assert(abs(result - EXPECTED) <= DELTA); \ |
| 41 | + } \ |
| 42 | + } |
| 43 | + |
| 44 | +#define EXPECTED(TYPE, ...) ((TYPE[]){__VA_ARGS__}) |
| 45 | + |
| 46 | +int main() { |
| 47 | + sycl::device Dev; |
| 48 | + sycl::queue Queue(Dev); |
| 49 | + // clang-format off |
| 50 | + sycl::marray<float, 2> MFloatD2 = {1.f, 2.f}; |
| 51 | + sycl::marray<float, 2> MFloatD2_2 = {3.f, 5.f}; |
| 52 | + sycl::marray<float, 3> MFloatD3 = {1.f, 2.f, 3.f}; |
| 53 | + sycl::marray<float, 3> MFloatD3_2 = {1.f, 5.f, 7.f}; |
| 54 | + sycl::marray<float, 4> MFloatD4 = {1.f, 2.f, 3.f, 4.f}; |
| 55 | + sycl::marray<float, 4> MFloatD4_2 = {1.f, 5.f, 7.f, 4.f}; |
| 56 | + |
| 57 | + sycl::marray<double, 2> MDoubleD2 = {1.0, 2.0}; |
| 58 | + sycl::marray<double, 2> MDoubleD2_2 = {3.0, 5.0}; |
| 59 | + sycl::marray<double, 3> MDoubleD3 = {1.0, 2.0, 3.0}; |
| 60 | + sycl::marray<double, 3> MDoubleD3_2 = {1.0, 5.0, 7.0}; |
| 61 | + sycl::marray<double, 4> MDoubleD4 = {1.0, 2.0, 3.0, 4.0}; |
| 62 | + sycl::marray<double, 4> MDoubleD4_2 = {1.0, 5.0, 7.0, 4.0}; |
| 63 | + // clang-format on |
| 64 | + |
| 65 | + TEST(sycl::cross, float, 3, EXPECTED(float, -1.f, -4.f, 3.f), 0, MFloatD3, |
| 66 | + MFloatD3_2); |
| 67 | + TEST(sycl::cross, float, 4, EXPECTED(float, -1.f, -4.f, 3.f, 0.f), 0, |
| 68 | + MFloatD4, MFloatD4_2); |
| 69 | + if (Dev.has(sycl::aspect::fp64)) { |
| 70 | + TEST(sycl::cross, double, 3, EXPECTED(double, -1.f, -4.f, 3.f), 0, |
| 71 | + MDoubleD3, MDoubleD3_2); |
| 72 | + TEST(sycl::cross, double, 4, EXPECTED(double, -1.f, -4.f, 3.f, 0.f), 0, |
| 73 | + MDoubleD4, MDoubleD4_2); |
| 74 | + } |
| 75 | + |
| 76 | + TEST2(sycl::dot, float, 13.f, 0, MFloatD2, MFloatD2_2); |
| 77 | + TEST2(sycl::dot, float, 32.f, 0, MFloatD3, MFloatD3_2); |
| 78 | + TEST2(sycl::dot, float, 48.f, 0, MFloatD4, MFloatD4_2); |
| 79 | + if (Dev.has(sycl::aspect::fp64)) { |
| 80 | + TEST2(sycl::dot, double, 13, 0, MDoubleD2, MDoubleD2_2); |
| 81 | + TEST2(sycl::dot, double, 32, 0, MDoubleD3, MDoubleD3_2); |
| 82 | + TEST2(sycl::dot, double, 48, 0, MDoubleD4, MDoubleD4_2); |
| 83 | + } |
| 84 | + |
| 85 | + TEST2(sycl::length, float, 2.236068f, 1e-6, MFloatD2); |
| 86 | + TEST2(sycl::length, float, 3.741657f, 1e-6, MFloatD3); |
| 87 | + TEST2(sycl::length, float, 5.477225f, 1e-6, MFloatD4); |
| 88 | + if (Dev.has(sycl::aspect::fp64)) { |
| 89 | + TEST2(sycl::length, double, 2.236068, 1e-6, MDoubleD2); |
| 90 | + TEST2(sycl::length, double, 3.741657, 1e-6, MDoubleD3); |
| 91 | + TEST2(sycl::length, double, 5.477225, 1e-6, MDoubleD4); |
| 92 | + } |
| 93 | + |
| 94 | + TEST2(sycl::distance, float, 3.605551f, 1e-6, MFloatD2, MFloatD2_2); |
| 95 | + TEST2(sycl::distance, float, 5.f, 0, MFloatD3, MFloatD3_2); |
| 96 | + TEST2(sycl::distance, float, 5.f, 0, MFloatD4, MFloatD4_2); |
| 97 | + if (Dev.has(sycl::aspect::fp64)) { |
| 98 | + TEST2(sycl::distance, double, 3.605551, 1e-6, MDoubleD2, MDoubleD2_2); |
| 99 | + TEST2(sycl::distance, double, 5.0, 0, MDoubleD3, MDoubleD3_2); |
| 100 | + TEST2(sycl::distance, double, 5.0, 0, MDoubleD4, MDoubleD4_2); |
| 101 | + } |
| 102 | + |
| 103 | + TEST(sycl::normalize, float, 2, EXPECTED(float, 0.447213f, 0.894427f), 1e-6, |
| 104 | + MFloatD2); |
| 105 | + TEST(sycl::normalize, float, 3, |
| 106 | + EXPECTED(float, 0.267261f, 0.534522f, 0.801784f), 1e-6, MFloatD3); |
| 107 | + TEST(sycl::normalize, float, 4, |
| 108 | + EXPECTED(float, 0.182574f, 0.365148f, 0.547723f, 0.730297f), 1e-6, |
| 109 | + MFloatD4); |
| 110 | + if (Dev.has(sycl::aspect::fp64)) { |
| 111 | + TEST(sycl::normalize, double, 2, EXPECTED(double, 0.447213, 0.894427), 1e-6, |
| 112 | + MDoubleD2); |
| 113 | + TEST(sycl::normalize, double, 3, |
| 114 | + EXPECTED(double, 0.267261, 0.534522, 0.801784), 1e-6, MDoubleD3); |
| 115 | + TEST(sycl::normalize, double, 4, |
| 116 | + EXPECTED(double, 0.182574, 0.365148, 0.547723, 0.730297), 1e-6, |
| 117 | + MDoubleD4); |
| 118 | + } |
| 119 | + |
| 120 | + TEST2(sycl::fast_distance, float, 3.605551f, 1e-6, MFloatD2, MFloatD2_2); |
| 121 | + TEST2(sycl::fast_distance, float, 5.f, 0, MFloatD3, MFloatD3_2); |
| 122 | + TEST2(sycl::fast_distance, float, 5.f, 0, MFloatD4, MFloatD4_2); |
| 123 | + |
| 124 | + TEST2(sycl::fast_length, float, 2.236068f, 1e-6, MFloatD2); |
| 125 | + TEST2(sycl::fast_length, float, 3.741657f, 1e-6, MFloatD3); |
| 126 | + TEST2(sycl::fast_length, float, 5.477225f, 1e-6, MFloatD4); |
| 127 | + |
| 128 | + TEST(sycl::fast_normalize, float, 2, EXPECTED(float, 0.447213f, 0.894427f), |
| 129 | + 1e-3, MFloatD2); |
| 130 | + TEST(sycl::fast_normalize, float, 3, |
| 131 | + EXPECTED(float, 0.267261f, 0.534522f, 0.801784f), 1e-3, MFloatD3); |
| 132 | + TEST(sycl::fast_normalize, float, 4, |
| 133 | + EXPECTED(float, 0.182574f, 0.365148f, 0.547723f, 0.730297f), 1e-3, |
| 134 | + MFloatD4); |
| 135 | + |
| 136 | + return 0; |
| 137 | +} |
0 commit comments