21 #ifndef EIGEN_INTEROP_HEADERS_SYCL_H 22 #define EIGEN_INTEROP_HEADERS_SYCL_H 26 #if !defined(EIGEN_DONT_VECTORIZE_SYCL) 30 template <
int has_blend,
int lengths>
78 #ifdef SYCL_DEVICE_ONLY 79 #define SYCL_PACKET_TRAITS(packet_type, has_blend, unpacket_type, lengths) \ 81 struct packet_traits<unpacket_type> \ 82 : sycl_packet_traits<has_blend, lengths> { \ 83 typedef packet_type type; \ 84 typedef packet_type half; \ 87 SYCL_PACKET_TRAITS(cl::sycl::cl_float4, 1,
float, 4)
88 SYCL_PACKET_TRAITS(
cl::sycl::cl_float4, 1, const
float, 4)
89 SYCL_PACKET_TRAITS(
cl::sycl::cl_double2, 0,
double, 2)
90 SYCL_PACKET_TRAITS(
cl::sycl::cl_double2, 0, const
double, 2)
91 #undef SYCL_PACKET_TRAITS 96 #define SYCL_ARITHMETIC(packet_type) \ 98 struct is_arithmetic<packet_type> { \ 99 enum { value = true }; \ 101 SYCL_ARITHMETIC(cl::sycl::cl_float4)
102 SYCL_ARITHMETIC(cl::sycl::cl_double2)
103 #undef SYCL_ARITHMETIC 105 #define SYCL_UNPACKET_TRAITS(packet_type, unpacket_type, lengths) \ 107 struct unpacket_traits<packet_type> { \ 108 typedef unpacket_type type; \ 109 enum { size = lengths, vectorizable = true, alignment = Aligned16 }; \ 110 typedef packet_type half; \ 112 SYCL_UNPACKET_TRAITS(cl::sycl::cl_float4,
float, 4)
113 SYCL_UNPACKET_TRAITS(
cl::sycl::cl_double2,
double, 2)
115 #undef SYCL_UNPACKET_TRAITS 122 namespace TensorSycl {
125 template <
typename PacketReturnType,
int PacketSize>
128 #ifndef SYCL_DEVICE_ONLY 129 template <
typename PacketReturnType,
int PacketSize>
133 template <
typename Index>
135 eigen_assert(
false &&
"THERE IS NO PACKETIZE VERSION FOR THE CHOSEN TYPE");
140 return ::Eigen::internal::template plset<PacketReturnType>(in);
143 eigen_assert(
false &&
"THERE IS NO PACKETIZE VERSION FOR THE CHOSEN TYPE");
148 #elif defined(SYCL_DEVICE_ONLY) 149 template <
typename PacketReturnType>
153 template <
typename Index>
167 __builtin_unreachable();
169 __builtin_unreachable();
173 Scalar in, Scalar
other) {
174 return PacketReturnType(in, other, other, other);
177 lhs = PacketReturnType(rhs[0], rhs[1], rhs[2], rhs[3]);
181 template <
typename PacketReturnType>
185 template <
typename Index>
191 return PacketReturnType(in);
198 template <
typename PacketReturnType>
202 template <
typename Index>
212 __builtin_unreachable();
214 __builtin_unreachable();
218 Scalar in, Scalar
other) {
219 return PacketReturnType(in, other);
222 lhs = PacketReturnType(rhs[0], rhs[1]);
232 #endif // EIGEN_INTEROP_HEADERS_SYCL_H
#define EIGEN_STRONG_INLINE
Namespace containing all symbols from the Eigen library.
::Eigen::internal::unpacket_traits< PacketReturnType >::type Scalar
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
#define EIGEN_DEVICE_FUNC
static EIGEN_DEVICE_FUNC PacketReturnType convert_to_packet_type(Scalar in, Scalar)
static EIGEN_DEVICE_FUNC void set_packet(PacketReturnType, Scalar *)
static EIGEN_DEVICE_FUNC Scalar scalarize(Index, PacketReturnType &)