This repository was archived by the owner on Mar 28, 2023. It is now read-only.
forked from llvm/llvm-test-suite
-
Notifications
You must be signed in to change notification settings - Fork 131
/
Copy pathmarray_geo.cpp
134 lines (120 loc) · 6.63 KB
/
marray_geo.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <CL/sycl.hpp>
#define TEST(FUNC, MARRAY_ELEM_TYPE, DIM, EXPECTED, DELTA, ...) \
{ \
{ \
MARRAY_ELEM_TYPE result[DIM]; \
{ \
sycl::buffer<MARRAY_ELEM_TYPE> b(result, sycl::range{DIM}); \
deviceQueue.submit([&](sycl::handler &cgh) { \
sycl::accessor res_access{b, cgh}; \
cgh.single_task([=]() { \
sycl::marray<MARRAY_ELEM_TYPE, DIM> res = FUNC(__VA_ARGS__); \
for (int i = 0; i < DIM; i++) \
res_access[i] = res[i]; \
}); \
}); \
} \
for (int i = 0; i < DIM; i++) { \
std::cout << result[i] << std::endl; \
assert(abs(result[i] - EXPECTED[i]) <= DELTA); \
} \
} \
}
#define TEST2(FUNC, TYPE, EXPECTED, DELTA, ...) \
{ \
{ \
TYPE result; \
{ \
sycl::buffer<TYPE> b(&result, 1); \
deviceQueue.submit([&](sycl::handler &cgh) { \
sycl::accessor res_access{b, cgh}; \
cgh.single_task([=]() { res_access[0] = FUNC(__VA_ARGS__); }); \
}); \
} \
std::cout << result << std::endl; \
assert(abs(result - EXPECTED) <= DELTA); \
} \
}
#define EXPECTED(TYPE, ...) ((TYPE[]){__VA_ARGS__})
int main() {
sycl::device Dev;
sycl::queue Queue(Dev);
// clang-format off
sycl::marray<float, 2> MFloatD2 = {1.f, 2.f};
sycl::marray<float, 2> MFloatD2_2 = {3.f, 5.f};
sycl::marray<float, 3> MFloatD3 = {1.f, 2.f, 3.f};
sycl::marray<float, 3> MFloatD3_2 = {1.f, 5.f, 7.f};
sycl::marray<float, 4> MFloatD4 = {1.f, 2.f, 3.f, 4.f};
sycl::marray<float, 4> MFloatD4_2 = {1.f, 5.f, 7.f, 4.f};
sycl::marray<double, 2> MDoubleD2 = {1.0, 2.0};
sycl::marray<double, 2> MDoubleD2_2 = {3.0, 5.0};
sycl::marray<double, 3> MDoubleD3 = {1.0, 2.0, 3.0};
sycl::marray<double, 3> MDoubleD3_2 = {1.0, 5.0, 7.0};
sycl::marray<double, 4> MDoubleD4 = {1.0, 2.0, 3.0, 4.0};
sycl::marray<double, 4> MDoubleD4_2 = {1.0, 5.0, 7.0, 4.0};
// clang-format on
TEST(sycl::cross, float, 3, EXPECTED(float, -1.f, -4.f, 3.f), 0, MFloatD3,
MFloatD3_2);
TEST(sycl::cross, float, 4, EXPECTED(float, -1.f, -4.f, 3.f, 0.f), 0,
MFloatD4, MFloatD4_2);
if (Dev.has(sycl::aspect::fp64)) {
TEST(sycl::cross, double, 3, EXPECTED(double, -1.f, -4.f, 3.f), 0,
MDoubleD3, MDoubleD3_2);
TEST(sycl::cross, double, 4, EXPECTED(double, -1.f, -4.f, 3.f, 0.f), 0,
MDoubleD4, MDoubleD4_2);
}
TEST2(sycl::dot, float, 13.f, 0, MFloatD2, MFloatD2_2);
TEST2(sycl::dot, float, 32.f, 0, MFloatD3, MFloatD3_2);
TEST2(sycl::dot, float, 48.f, 0, MFloatD4, MFloatD4_2);
if (Dev.has(sycl::aspect::fp64)) {
TEST2(sycl::dot, double, 13, 0, MDoubleD2, MDoubleD2_2);
TEST2(sycl::dot, double, 32, 0, MDoubleD3, MDoubleD3_2);
TEST2(sycl::dot, double, 48, 0, MDoubleD4, MDoubleD4_2);
}
TEST2(sycl::length, float, 2.236068f, 1e-6, MFloatD2);
TEST2(sycl::length, float, 3.741657f, 1e-6, MFloatD3);
TEST2(sycl::length, float, 5.477225f, 1e-6, MFloatD4);
if (Dev.has(sycl::aspect::fp64)) {
TEST2(sycl::length, double, 2.236068, 1e-6, MDoubleD2);
TEST2(sycl::length, double, 3.741657, 1e-6, MDoubleD3);
TEST2(sycl::length, double, 5.477225, 1e-6, MDoubleD4);
}
TEST2(sycl::distance, float, 3.605551f, 1e-6, MFloatD2, MFloatD2_2);
TEST2(sycl::distance, float, 5.f, 0, MFloatD3, MFloatD3_2);
TEST2(sycl::distance, float, 5.f, 0, MFloatD4, MFloatD4_2);
if (Dev.has(sycl::aspect::fp64)) {
TEST2(sycl::distance, double, 3.605551, 1e-6, MDoubleD2, MDoubleD2_2);
TEST2(sycl::distance, double, 5.0, 0, MDoubleD3, MDoubleD3_2);
TEST2(sycl::distance, double, 5.0, 0, MDoubleD4, MDoubleD4_2);
}
TEST(sycl::normalize, float, 2, EXPECTED(float, 0.447213f, 0.894427f), 1e-6,
MFloatD2);
TEST(sycl::normalize, float, 3,
EXPECTED(float, 0.267261f, 0.534522f, 0.801784f), 1e-6, MFloatD3);
TEST(sycl::normalize, float, 4,
EXPECTED(float, 0.182574f, 0.365148f, 0.547723f, 0.730297f), 1e-6,
MFloatD4);
if (Dev.has(sycl::aspect::fp64)) {
TEST(sycl::normalize, double, 2, EXPECTED(double, 0.447213, 0.894427), 1e-6,
MDoubleD2);
TEST(sycl::normalize, double, 3,
EXPECTED(double, 0.267261, 0.534522, 0.801784), 1e-6, MDoubleD3);
TEST(sycl::normalize, double, 4,
EXPECTED(double, 0.182574, 0.365148, 0.547723, 0.730297), 1e-6,
MDoubleD4);
}
TEST2(sycl::fast_distance, float, 3.605551f, 1e-6, MFloatD2, MFloatD2_2);
TEST2(sycl::fast_distance, float, 5.f, 0, MFloatD3, MFloatD3_2);
TEST2(sycl::fast_distance, float, 5.f, 0, MFloatD4, MFloatD4_2);
TEST2(sycl::fast_length, float, 2.236068f, 1e-6, MFloatD2);
TEST2(sycl::fast_length, float, 3.741657f, 1e-6, MFloatD3);
TEST2(sycl::fast_length, float, 5.477225f, 1e-6, MFloatD4);
TEST(sycl::fast_normalize, float, 2, EXPECTED(float, 0.447213f, 0.894427f),
1e-3, MFloatD2);
TEST(sycl::fast_normalize, float, 3,
EXPECTED(float, 0.267261f, 0.534522f, 0.801784f), 1e-3, MFloatD3);
TEST(sycl::fast_normalize, float, 4,
EXPECTED(float, 0.182574f, 0.365148f, 0.547723f, 0.730297f), 1e-3,
MFloatD4);
return 0;
}