21 #ifndef EIGEN_MATH_FUNCTIONS_SYCL_H
22 #define EIGEN_MATH_FUNCTIONS_SYCL_H
23 #include "../../InternalHeaderCheck.h"
32 #if defined(SYCL_DEVICE_ONLY)
33 #define SYCL_PLOG(packet_type) \
35 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type plog<packet_type>( \
36 const packet_type& a) { \
37 return cl::sycl::log(a); \
40 SYCL_PLOG(cl::sycl::cl_float4)
41 SYCL_PLOG(cl::sycl::cl_double2)
44 #define SYCL_PLOG1P(packet_type) \
46 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type plog1p<packet_type>( \
47 const packet_type& a) { \
48 return cl::sycl::log1p(a); \
51 SYCL_PLOG1P(cl::sycl::cl_float4)
52 SYCL_PLOG1P(cl::sycl::cl_double2)
55 #define SYCL_PLOG10(packet_type) \
57 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type plog10<packet_type>( \
58 const packet_type& a) { \
59 return cl::sycl::log10(a); \
62 SYCL_PLOG10(cl::sycl::cl_float4)
63 SYCL_PLOG10(cl::sycl::cl_double2)
66 #define SYCL_PEXP(packet_type) \
68 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pexp<packet_type>( \
69 const packet_type& a) { \
70 return cl::sycl::exp(a); \
73 SYCL_PEXP(cl::sycl::cl_float4)
74 SYCL_PEXP(cl::sycl::cl_float)
75 SYCL_PEXP(cl::sycl::cl_double2)
78 #define SYCL_PEXPM1(packet_type) \
80 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pexpm1<packet_type>( \
81 const packet_type& a) { \
82 return cl::sycl::expm1(a); \
85 SYCL_PEXPM1(cl::sycl::cl_float4)
86 SYCL_PEXPM1(cl::sycl::cl_double2)
89 #define SYCL_PSQRT(packet_type) \
91 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type psqrt<packet_type>( \
92 const packet_type& a) { \
93 return cl::sycl::sqrt(a); \
96 SYCL_PSQRT(cl::sycl::cl_float4)
97 SYCL_PSQRT(cl::sycl::cl_double2)
100 #define SYCL_PRSQRT(packet_type) \
102 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type prsqrt<packet_type>( \
103 const packet_type& a) { \
104 return cl::sycl::rsqrt(a); \
107 SYCL_PRSQRT(cl::sycl::cl_float4)
108 SYCL_PRSQRT(cl::sycl::cl_double2)
112 #define SYCL_PSIN(packet_type) \
114 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type psin<packet_type>( \
115 const packet_type& a) { \
116 return cl::sycl::sin(a); \
119 SYCL_PSIN(cl::sycl::cl_float4)
120 SYCL_PSIN(cl::sycl::cl_double2)
124 #define SYCL_PCOS(packet_type) \
126 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pcos<packet_type>( \
127 const packet_type& a) { \
128 return cl::sycl::cos(a); \
131 SYCL_PCOS(cl::sycl::cl_float4)
132 SYCL_PCOS(cl::sycl::cl_double2)
136 #define SYCL_PTAN(packet_type) \
138 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type ptan<packet_type>( \
139 const packet_type& a) { \
140 return cl::sycl::tan(a); \
143 SYCL_PTAN(cl::sycl::cl_float4)
144 SYCL_PTAN(cl::sycl::cl_double2)
148 #define SYCL_PASIN(packet_type) \
150 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pasin<packet_type>( \
151 const packet_type& a) { \
152 return cl::sycl::asin(a); \
155 SYCL_PASIN(cl::sycl::cl_float4)
156 SYCL_PASIN(cl::sycl::cl_double2)
160 #define SYCL_PACOS(packet_type) \
162 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pacos<packet_type>( \
163 const packet_type& a) { \
164 return cl::sycl::acos(a); \
167 SYCL_PACOS(cl::sycl::cl_float4)
168 SYCL_PACOS(cl::sycl::cl_double2)
172 #define SYCL_PATAN(packet_type) \
174 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type patan<packet_type>( \
175 const packet_type& a) { \
176 return cl::sycl::atan(a); \
179 SYCL_PATAN(cl::sycl::cl_float4)
180 SYCL_PATAN(cl::sycl::cl_double2)
184 #define SYCL_PSINH(packet_type) \
186 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type psinh<packet_type>( \
187 const packet_type& a) { \
188 return cl::sycl::sinh(a); \
191 SYCL_PSINH(cl::sycl::cl_float4)
192 SYCL_PSINH(cl::sycl::cl_double2)
196 #define SYCL_PCOSH(packet_type) \
198 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pcosh<packet_type>( \
199 const packet_type& a) { \
200 return cl::sycl::cosh(a); \
203 SYCL_PCOSH(cl::sycl::cl_float4)
204 SYCL_PCOSH(cl::sycl::cl_double2)
208 #define SYCL_PTANH(packet_type) \
210 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type ptanh<packet_type>( \
211 const packet_type& a) { \
212 return cl::sycl::tanh(a); \
215 SYCL_PTANH(cl::sycl::cl_float4)
216 SYCL_PTANH(cl::sycl::cl_double2)
219 #define SYCL_PCEIL(packet_type) \
221 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pceil<packet_type>( \
222 const packet_type& a) { \
223 return cl::sycl::ceil(a); \
226 SYCL_PCEIL(cl::sycl::cl_float4)
227 SYCL_PCEIL(cl::sycl::cl_double2)
230 #define SYCL_PROUND(packet_type) \
232 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pround<packet_type>( \
233 const packet_type& a) { \
234 return cl::sycl::round(a); \
237 SYCL_PROUND(cl::sycl::cl_float4)
238 SYCL_PROUND(cl::sycl::cl_double2)
241 #define SYCL_PRINT(packet_type) \
243 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type print<packet_type>( \
244 const packet_type& a) { \
245 return cl::sycl::rint(a); \
248 SYCL_PRINT(cl::sycl::cl_float4)
249 SYCL_PRINT(cl::sycl::cl_double2)
252 #define SYCL_FLOOR(packet_type) \
254 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pfloor<packet_type>( \
255 const packet_type& a) { \
256 return cl::sycl::floor(a); \
259 SYCL_FLOOR(cl::sycl::cl_float4)
260 SYCL_FLOOR(cl::sycl::cl_double2)
263 #define SYCL_PMIN(packet_type, expr) \
265 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pmin<packet_type>( \
266 const packet_type& a, const packet_type& b) { \
274 #define SYCL_PMAX(packet_type, expr) \
276 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pmax<packet_type>( \
277 const packet_type& a, const packet_type& b) { \
285 #define SYCL_PLDEXP(packet_type) \
287 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE packet_type pldexp( \
288 const packet_type& a, const packet_type& exponent) { \
289 return cl::sycl::ldexp( \
290 a, exponent.template convert<cl::sycl::cl_int, \
291 cl::sycl::rounding_mode::automatic>()); \
294 SYCL_PLDEXP(cl::sycl::cl_float4)
295 SYCL_PLDEXP(cl::sycl::cl_double2)
bfloat16 fmax(const bfloat16 &a, const bfloat16 &b)
bfloat16 fmin(const bfloat16 &a, const bfloat16 &b)