3
3
// RUN: %GPU_RUN_PLACEHOLDER %t.out
4
4
// RUN: %ACC_RUN_PLACEHOLDER %t.out
5
5
6
- // OpenCL CPU driver does not support cl_khr_fp16 extension for this reason this
7
- // test is compiled with the -fsycl-device-code-split flag
6
+ // Tests oneapi extension native tanh math function for sycl::vec and
7
+ // sycl::marray float cases.
8
8
9
- #include < cassert>
10
- #include < sycl/sycl.hpp>
11
-
12
- template <typename T> void assert_out_of_bound (T val, T lower, T upper) {
13
- assert (sycl::all (lower < val && val < upper));
14
- }
15
-
16
- template <>
17
- void assert_out_of_bound<float >(float val, float lower, float upper) {
18
- assert (lower < val && val < upper);
19
- }
20
-
21
- template <>
22
- void assert_out_of_bound<sycl::half>(sycl::half val, sycl::half lower,
23
- sycl::half upper) {
24
- assert (lower < val && val < upper);
25
- }
26
-
27
- template <typename T>
28
- void native_tanh_tester (sycl::queue q, T val, T up, T lo) {
29
- T r = val;
30
-
31
- #ifdef SYCL_EXT_ONEAPI_NATIVE_MATH
32
- {
33
- sycl::buffer<T, 1 > BufR (&r, sycl::range<1 >(1 ));
34
- q.submit ([&](sycl::handler &cgh) {
35
- auto AccR = BufR.template get_access <sycl::access::mode::read_write>(cgh);
36
- cgh.single_task ([=]() {
37
- AccR[0 ] = sycl::ext::oneapi::experimental::native::tanh (AccR[0 ]);
38
- });
39
- });
40
- }
41
-
42
- assert_out_of_bound (r, up, lo);
43
- #else
44
- assert (!" SYCL_EXT_ONEAPI_NATIVE_MATH not supported" );
45
- #endif
46
- }
47
-
48
- template <typename T>
49
- void native_exp2_tester (sycl::queue q, T val, T up, T lo) {
50
- T r = val;
51
-
52
- #ifdef SYCL_EXT_ONEAPI_NATIVE_MATH
53
- {
54
- sycl::buffer<T, 1 > BufR (&r, sycl::range<1 >(1 ));
55
- q.submit ([&](sycl::handler &cgh) {
56
- auto AccR = BufR.template get_access <sycl::access::mode::read_write>(cgh);
57
- cgh.single_task ([=]() {
58
- AccR[0 ] = sycl::ext::oneapi::experimental::native::exp2 (AccR[0 ]);
59
- });
60
- });
61
- }
62
-
63
- assert_out_of_bound (r, up, lo);
64
- #else
65
- assert (!" SYCL_EXT_ONEAPI_NATIVE_MATH not supported" );
66
- #endif
67
- }
9
+ #include " ext_native_math_common.hpp"
68
10
69
11
int main () {
70
12
71
13
sycl::queue q;
72
14
73
- const double tv[16 ] = {-2.0 , -1.5 , -1.0 , 0.0 , 2.0 , 1.5 , 1.0 , 0.0 ,
74
- -1.7 , 1.7 , -1.2 , 1.2 , -3.0 , 3.0 , -10.0 , 10.0 };
75
- const double tl[16 ] = {-0.97 , -0.91 , -0.77 , -0.1 , 0.95 , 0.89 , 0.75 , -0.1 ,
76
- -0.94 , 0.92 , -0.84 , 0.82 , -1.0 , 0.98 , -1.10 , 0.98 };
77
- const double tu[16 ] = {-0.95 , -0.89 , -0.75 , 0.1 , 0.97 , 0.91 , 0.77 , 0.1 ,
78
- -0.92 , 0.94 , -0.82 , 0.84 , -0.98 , 1.00 , -0.98 , 1.10 };
15
+ const float tv[16 ] = {-2.0 , -1.5 , -1.0 , 0.0 , 2.0 , 1.5 , 1.0 , 0.0 ,
16
+ -1.7 , 1.7 , -1.2 , 1.2 , -3.0 , 3.0 , -10.0 , 10.0 };
17
+ const float tl[16 ] = {-0.97 , -0.91 , -0.77 , -0.1 , 0.95 , 0.89 , 0.75 , -0.1 ,
18
+ -0.94 , 0.92 , -0.84 , 0.82 , -1.0 , 0.98 , -1.10 , 0.98 };
19
+ const float tu[16 ] = {-0.95 , -0.89 , -0.75 , 0.1 , 0.97 , 0.91 , 0.77 , 0.1 ,
20
+ -0.92 , 0.94 , -0.82 , 0.84 , -0.98 , 1.00 , -0.98 , 1.10 };
79
21
80
22
native_tanh_tester<float >(q, tv[0 ], tl[0 ], tu[0 ]);
81
23
native_tanh_tester<sycl::float2>(q, {tv[0 ], tv[1 ]}, {tl[0 ], tl[1 ]},
82
24
{tu[0 ], tu[1 ]});
83
25
native_tanh_tester<sycl::float3>(
84
26
q, {tv[0 ], tv[1 ], tv[2 ]}, {tl[0 ], tl[1 ], tl[2 ]}, {tu[0 ], tu[1 ], tu[2 ]});
27
+
85
28
native_tanh_tester<sycl::float4>(q, {tv[0 ], tv[1 ], tv[2 ], tv[3 ]},
86
29
{tl[0 ], tl[1 ], tl[2 ], tl[3 ]},
87
30
{tu[0 ], tu[1 ], tu[2 ], tu[3 ]});
31
+ native_tanh_tester<sycl::marray<float , 3 >>(
32
+ q, {tv[0 ], tv[1 ], tv[2 ]}, {tl[0 ], tl[1 ], tl[2 ]}, {tu[0 ], tu[1 ], tu[2 ]});
33
+ native_tanh_tester<sycl::marray<float , 4 >>(q, {tv[0 ], tv[1 ], tv[2 ], tv[3 ]},
34
+ {tl[0 ], tl[1 ], tl[2 ], tl[3 ]},
35
+ {tu[0 ], tu[1 ], tu[2 ], tu[3 ]});
88
36
native_tanh_tester<sycl::float8>(
89
37
q, {tv[0 ], tv[1 ], tv[2 ], tv[3 ], tv[4 ], tv[5 ], tv[6 ], tv[7 ]},
90
38
{tl[0 ], tl[1 ], tl[2 ], tl[3 ], tl[4 ], tl[5 ], tl[6 ], tl[7 ]},
@@ -98,57 +46,5 @@ int main() {
98
46
{tu[0 ], tu[1 ], tu[2 ], tu[3 ], tu[4 ], tu[5 ], tu[6 ], tu[7 ], tu[8 ], tu[9 ],
99
47
tu[10 ], tu[11 ], tu[12 ], tu[13 ], tu[14 ], tu[15 ]});
100
48
101
- if (q.get_device ().has (sycl::aspect::fp16)) {
102
-
103
- native_tanh_tester<sycl::half>(q, tv[0 ], tl[0 ], tu[0 ]);
104
- native_tanh_tester<sycl::half2>(q, {tv[0 ], tv[1 ]}, {tl[0 ], tl[1 ]},
105
- {tu[0 ], tu[1 ]});
106
- native_tanh_tester<sycl::half3>(
107
- q, {tv[0 ], tv[1 ], tv[2 ]}, {tl[0 ], tl[1 ], tl[2 ]}, {tu[0 ], tu[1 ], tu[2 ]});
108
- native_tanh_tester<sycl::half4>(q, {tv[0 ], tv[1 ], tv[2 ], tv[3 ]},
109
- {tl[0 ], tl[1 ], tl[2 ], tl[3 ]},
110
- {tu[0 ], tu[1 ], tu[2 ], tu[3 ]});
111
- native_tanh_tester<sycl::half8>(
112
- q, {tv[0 ], tv[1 ], tv[2 ], tv[3 ], tv[4 ], tv[5 ], tv[6 ], tv[7 ]},
113
- {tl[0 ], tl[1 ], tl[2 ], tl[3 ], tl[4 ], tl[5 ], tl[6 ], tl[7 ]},
114
- {tu[0 ], tu[1 ], tu[2 ], tu[3 ], tu[4 ], tu[5 ], tu[6 ], tu[7 ]});
115
- native_tanh_tester<sycl::half16>(
116
- q,
117
- {tv[0 ], tv[1 ], tv[2 ], tv[3 ], tv[4 ], tv[5 ], tv[6 ], tv[7 ], tv[8 ], tv[9 ],
118
- tv[10 ], tv[11 ], tv[12 ], tv[13 ], tv[14 ], tv[15 ]},
119
- {tl[0 ], tl[1 ], tl[2 ], tl[3 ], tl[4 ], tl[5 ], tl[6 ], tl[7 ], tl[8 ], tl[9 ],
120
- tl[10 ], tl[11 ], tl[12 ], tl[13 ], tl[14 ], tl[15 ]},
121
- {tu[0 ], tu[1 ], tu[2 ], tu[3 ], tu[4 ], tu[5 ], tu[6 ], tu[7 ], tu[8 ], tu[9 ],
122
- tu[10 ], tu[11 ], tu[12 ], tu[13 ], tu[14 ], tu[15 ]});
123
-
124
- const double ev[16 ] = {-2.0 , -1.5 , -1.0 , 0.0 , 2.0 , 1.5 , 1.0 , 0.0 ,
125
- -2.0 , -1.5 , -1.0 , 0.0 , 2.0 , 1.5 , 1.0 , 0.0 };
126
- const double el[16 ] = {0.1 , 0.34 , 0.4 , -0.9 , 3.9 , 2.7 , 1.9 , -0.9 ,
127
- 0.1 , 0.34 , 0.4 , -0.9 , 3.9 , 2.7 , 1.9 , -0.9 };
128
- const double eu[16 ] = {0.3 , 0.36 , 0.6 , 1.1 , 4.1 , 2.9 , 2.1 , 1.1 ,
129
- 0.3 , 0.36 , 0.6 , 1.1 , 4.1 , 2.9 , 2.1 , 1.1 };
130
-
131
- native_exp2_tester<sycl::half>(q, ev[0 ], el[0 ], eu[0 ]);
132
- native_exp2_tester<sycl::half2>(q, {ev[0 ], ev[1 ]}, {el[0 ], el[1 ]},
133
- {eu[0 ], eu[1 ]});
134
- native_exp2_tester<sycl::half3>(
135
- q, {ev[0 ], ev[1 ], ev[2 ]}, {el[0 ], el[1 ], el[2 ]}, {eu[0 ], eu[1 ], eu[2 ]});
136
- native_exp2_tester<sycl::half4>(q, {ev[0 ], ev[1 ], ev[2 ], ev[3 ]},
137
- {el[0 ], el[1 ], el[2 ], el[3 ]},
138
- {eu[0 ], eu[1 ], eu[2 ], eu[3 ]});
139
- native_exp2_tester<sycl::half8>(
140
- q, {ev[0 ], ev[1 ], ev[2 ], ev[3 ], ev[4 ], ev[5 ], ev[6 ], ev[7 ]},
141
- {el[0 ], el[1 ], el[2 ], el[3 ], el[4 ], el[5 ], el[6 ], el[7 ]},
142
- {eu[0 ], eu[1 ], eu[2 ], eu[3 ], eu[4 ], eu[5 ], eu[6 ], eu[7 ]});
143
- native_exp2_tester<sycl::half16>(
144
- q,
145
- {ev[0 ], ev[1 ], ev[2 ], ev[3 ], ev[4 ], ev[5 ], ev[6 ], ev[7 ], ev[8 ], ev[9 ],
146
- ev[10 ], ev[11 ], ev[12 ], ev[13 ], ev[14 ], ev[15 ]},
147
- {el[0 ], el[1 ], el[2 ], el[3 ], el[4 ], el[5 ], el[6 ], el[7 ], el[8 ], el[9 ],
148
- el[10 ], el[11 ], el[12 ], el[13 ], el[14 ], el[15 ]},
149
- {eu[0 ], eu[1 ], eu[2 ], eu[3 ], eu[4 ], eu[5 ], eu[6 ], eu[7 ], eu[8 ], eu[9 ],
150
- eu[10 ], eu[11 ], eu[12 ], eu[13 ], eu[14 ], eu[15 ]});
151
- }
152
-
153
49
return 0 ;
154
50
}
0 commit comments