DPC++ Runtime
Runtime libraries for oneAPI DPC++
|
|
Go to the documentation of this file.
17 #ifdef __SYCL_DEVICE_ONLY__
18 #define __FUNC_PREFIX_OCL __spirv_ocl_
19 #define __FUNC_PREFIX_CORE __spirv_
20 #define __SYCL_EXTERN_IT1(Ret, prefix, call, Arg1)
21 #define __SYCL_EXTERN_IT2(Ret, prefix, call, Arg1, Arg2)
22 #define __SYCL_EXTERN_IT2_SAME(Ret, prefix, call, Arg)
23 #define __SYCL_EXTERN_IT3(Ret, prefix, call, Arg1, Arg2, Arg3)
25 #define __FUNC_PREFIX_OCL sycl_host_
26 #define __FUNC_PREFIX_CORE sycl_host_
27 #define __SYCL_EXTERN_IT1(Ret, prefix, call, Arg) \
28 extern Ret __SYCL_PPCAT(prefix, call)(Arg)
29 #define __SYCL_EXTERN_IT2_SAME(Ret, prefix, call, Arg) \
30 extern Ret __SYCL_PPCAT(prefix, call)(Arg, Arg)
31 #define __SYCL_EXTERN_IT2(Ret, prefix, call, Arg1, Arg2) \
32 extern Ret __SYCL_PPCAT(prefix, call)(Arg1, Arg2)
33 #define __SYCL_EXTERN_IT3(Ret, prefix, call, Arg1, Arg2, Arg3) \
34 extern Ret __SYCL_PPCAT(prefix, call)(Arg1, Arg2, Arg3)
37 #define __SYCL_PPCAT_NX(A, B) A##B
38 #define __SYCL_PPCAT(A, B) __SYCL_PPCAT_NX(A, B)
40 #define __SYCL_MAKE_CALL_ARG1(call, prefix) \
41 template <typename R, typename T1> \
42 inline __SYCL_ALWAYS_INLINE R __invoke_##call(T1 t1) __NOEXC { \
43 using Ret = sycl::detail::ConvertToOpenCLType_t<R>; \
44 using Arg1 = sycl::detail::ConvertToOpenCLType_t<T1>; \
45 __SYCL_EXTERN_IT1(Ret, prefix, call, Arg1); \
46 Arg1 arg1 = sycl::detail::convertDataToType<T1, Arg1>(t1); \
47 Ret ret = __SYCL_PPCAT(prefix, call)(arg1); \
48 return sycl::detail::convertDataToType<Ret, R>(ret); \
51 #define __SYCL_MAKE_CALL_ARG2(call, prefix) \
52 template <typename R, typename T1, typename T2> \
53 inline __SYCL_ALWAYS_INLINE R __invoke_##call(T1 t1, T2 t2) __NOEXC { \
54 using Ret = sycl::detail::ConvertToOpenCLType_t<R>; \
55 using Arg1 = sycl::detail::ConvertToOpenCLType_t<T1>; \
56 using Arg2 = sycl::detail::ConvertToOpenCLType_t<T2>; \
57 __SYCL_EXTERN_IT2(Ret, prefix, call, Arg1, Arg2); \
58 Arg1 arg1 = sycl::detail::convertDataToType<T1, Arg1>(t1); \
59 Arg2 arg2 = sycl::detail::convertDataToType<T2, Arg2>(t2); \
60 Ret ret = __SYCL_PPCAT(prefix, call)(arg1, arg2); \
61 return sycl::detail::convertDataToType<Ret, R>(ret); \
64 #define __SYCL_MAKE_CALL_ARG2_SAME(call, prefix) \
65 template <typename R, typename T> \
66 inline __SYCL_ALWAYS_INLINE R __invoke_##call(T t1, T t2) __NOEXC { \
67 using Ret = sycl::detail::ConvertToOpenCLType_t<R>; \
68 using Arg = sycl::detail::ConvertToOpenCLType_t<T>; \
69 __SYCL_EXTERN_IT2_SAME(Ret, prefix, call, Arg); \
70 Arg arg1 = sycl::detail::convertDataToType<T, Arg>(t1); \
71 Arg arg2 = sycl::detail::convertDataToType<T, Arg>(t2); \
72 Ret ret = __SYCL_PPCAT(prefix, call)(arg1, arg2); \
73 return sycl::detail::convertDataToType<Ret, R>(ret); \
76 #define __SYCL_MAKE_CALL_ARG2_SAME_RESULT(call, prefix) \
77 template <typename T> \
78 inline __SYCL_ALWAYS_INLINE T __invoke_##call(T v1, T v2) __NOEXC { \
79 using Type = sycl::detail::ConvertToOpenCLType_t<T>; \
80 __SYCL_EXTERN_IT2_SAME(Type, prefix, call, Type); \
81 Type arg1 = sycl::detail::convertDataToType<T, Type>(v1); \
82 Type arg2 = sycl::detail::convertDataToType<T, Type>(v2); \
83 Type ret = __SYCL_PPCAT(prefix, call)(arg1, arg2); \
84 return sycl::detail::convertDataToType<Type, T>(ret); \
87 #define __SYCL_MAKE_CALL_ARG3(call, prefix) \
88 template <typename R, typename T1, typename T2, typename T3> \
89 inline __SYCL_ALWAYS_INLINE R __invoke_##call(T1 t1, T2 t2, T3 t3) __NOEXC { \
90 using Ret = sycl::detail::ConvertToOpenCLType_t<R>; \
91 using Arg1 = sycl::detail::ConvertToOpenCLType_t<T1>; \
92 using Arg2 = sycl::detail::ConvertToOpenCLType_t<T2>; \
93 using Arg3 = sycl::detail::ConvertToOpenCLType_t<T3>; \
94 __SYCL_EXTERN_IT3(Ret, prefix, call, Arg1, Arg2, Arg3); \
95 Arg1 arg1 = sycl::detail::convertDataToType<T1, Arg1>(t1); \
96 Arg2 arg2 = sycl::detail::convertDataToType<T2, Arg2>(t2); \
97 Arg3 arg3 = sycl::detail::convertDataToType<T3, Arg3>(t3); \
98 Ret ret = __SYCL_PPCAT(prefix, call)(arg1, arg2, arg3); \
99 return sycl::detail::convertDataToType<Ret, R>(ret); \
102 #ifndef __SYCL_DEVICE_ONLY__
104 #endif // __SYCL_DEVICE_ONLY__
277 #ifndef __SYCL_DEVICE_ONLY__
282 #undef __SYCL_MAKE_CALL_ARG1
283 #undef __SYCL_MAKE_CALL_ARG2
284 #undef __SYCL_MAKE_CALL_ARG2_SAME
285 #undef __SYCL_MAKE_CALL_ARG2_SAME_RESULT
286 #undef __SYCL_MAKE_CALL_ARG3
287 #undef __SYCL_PPCAT_NX
289 #undef __FUNC_PREFIX_OCL
290 #undef __FUNC_PREFIX_CORE
291 #undef __SYCL_EXTERN_IT1
292 #undef __SYCL_EXTERN_IT2
293 #undef __SYCL_EXTERN_IT2_SAME
294 #undef __SYCL_EXTERN_IT3
#define __SYCL_MAKE_CALL_ARG3(call, prefix)
#define __SYCL_MAKE_CALL_ARG2(call, prefix)
std::enable_if_t< detail::is_bf16_storage_type< T >::value, T > fabs(T x)
__ESIMD_API std::enable_if_t< std::is_floating_point< T >::value, sycl::ext::intel::esimd::simd< T, SZ > > acos(sycl::ext::intel::esimd::simd< T, SZ > src0)
#define __FUNC_PREFIX_CORE
sycl::ext::intel::esimd::simd< float, N > atan2(sycl::ext::intel::esimd::simd< float, N > y, sycl::ext::intel::esimd::simd< float, N > x)
__SYCL_ALWAYS_INLINE std::enable_if_t< std::is_same_v< T, half >||std::is_same_v< T, float >, sycl::marray< T, N > > tanh(sycl::marray< T, N > x) __NOEXC
ESIMD_NODEBUG ESIMD_INLINE sycl::ext::intel::esimd::simd< float, SZ > cos(sycl::ext::intel::esimd::simd< float, SZ > x) __NOEXC
ESIMD_NODEBUG ESIMD_INLINE sycl::ext::intel::esimd::simd< float, SZ > exp(sycl::ext::intel::esimd::simd< float, SZ > x) __NOEXC
__SYCL_MAKE_CALL_ARG2_SAME(Dot, __FUNC_PREFIX_CORE) __SYCL_MAKE_CALL_ARG2_SAME_RESULT(FMul
__ESIMD_API std::enable_if_t< std::is_floating_point< T >::value, sycl::ext::intel::esimd::simd< T, SZ > > asin(sycl::ext::intel::esimd::simd< T, SZ > src0)
__ESIMD_API simd< T, N > sqrt(simd< T, N > src, Sat sat={})
Square root.
ESIMD_NODEBUG ESIMD_INLINE sycl::ext::intel::esimd::simd< float, SZ > sin(sycl::ext::intel::esimd::simd< float, SZ > x) __NOEXC
ESIMD_DETAIL __ESIMD_API sycl::ext::intel::esimd::simd< T, SZ > atan(sycl::ext::intel::esimd::simd< T, SZ > src0)
__ESIMD_API sycl::ext::intel::esimd::simd< float, SZ > sincos(sycl::ext::intel::esimd::simd< float, SZ > &dstcos, U src0, Sat sat={})
__ESIMD_API simd< T, N > rsqrt(simd< T, N > src, Sat sat={})
Square root reciprocal - calculates 1/sqrt(x).
ESIMD_INLINE sycl::ext::intel::esimd::simd< RT, SZ > ceil(const sycl::ext::intel::esimd::simd< float, SZ > src0, Sat sat={})
"Ceiling" operation, vector version - alias of rndu.
int popcount(const simd_mask< _Tp, _Abi > &) noexcept
sycl::ext::intel::esimd::simd< float, N > fmod(sycl::ext::intel::esimd::simd< float, N > y, sycl::ext::intel::esimd::simd< float, N > x)
__ESIMD_API simd< T, N > log2(simd< T, N > src, Sat sat={})
Logarithm base 2.
#define __SYCL_MAKE_CALL_ARG2_SAME_RESULT(call, prefix)
std::enable_if_t< std::is_same_v< Tp, float >, float > copysign(Tp x, Tp y)
__SYCL_ALWAYS_INLINE sycl::marray< half, N > exp2(sycl::marray< half, N > x) __NOEXC
ESIMD_NODEBUG ESIMD_INLINE sycl::ext::intel::esimd::simd< float, SZ > log(sycl::ext::intel::esimd::simd< float, SZ > x) __NOEXC
std::enable_if_t< std::is_same_v< Tp, float >, float > rint(Tp x)
__ESIMD_API simd< T, N > pow(simd< T, N > src0, simd< U, N > src1, Sat sat={})
Power - calculates src0 in power of src1.
#define __FUNC_PREFIX_OCL
float fast_length(const float *a, int len)
Compute fast_length for variable-length array.
ESIMD_INLINE sycl::ext::intel::esimd::simd< RT, SZ > floor(const sycl::ext::intel::esimd::simd< float, SZ > src0, Sat sat={})
"Floor" operation, vector version - alias of rndd.
__ESIMD_API sycl::ext::intel::esimd::simd< RT, SZ > trunc(const sycl::ext::intel::esimd::simd< float, SZ > &src0, Sat sat={})
Round to integral value using the round to zero rounding mode (vector version).
__FUNC_PREFIX_CORE __FUNC_PREFIX_CORE __FUNC_PREFIX_CORE __FUNC_PREFIX_CORE __FUNC_PREFIX_CORE __SYCL_MAKE_CALL_ARG1(IsFinite, __FUNC_PREFIX_CORE) __SYCL_MAKE_CALL_ARG1(IsInf