21#ifndef EIGEN_INTEROP_HEADERS_SYCL_H
22#define EIGEN_INTEROP_HEADERS_SYCL_H
26#if !defined(EIGEN_DONT_VECTORIZE_SYCL)
30template <
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; \
91#undef SYCL_PACKET_TRAITS
96#define SYCL_ARITHMETIC(packet_type) \
98 struct is_arithmetic<packet_type> { \
99 enum { value = true }; \
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; \
115#undef SYCL_UNPACKET_TRAITS
122namespace TensorSycl {
125template <
typename PacketReturnType,
int PacketSize>
128#ifndef SYCL_DEVICE_ONLY
129template <
typename PacketReturnType,
int PacketSize>
131 typedef typename ::Eigen::internal::unpacket_traits<PacketReturnType>::type
133 template <
typename Index>
134 EIGEN_DEVICE_FUNC
static Scalar scalarize(
Index, PacketReturnType &) {
135 eigen_assert(
false &&
"THERE IS NO PACKETIZE VERSION FOR THE CHOSEN TYPE");
138 EIGEN_DEVICE_FUNC
static PacketReturnType convert_to_packet_type(
Scalar in,
142 EIGEN_DEVICE_FUNC
static void set_packet(PacketReturnType,
Scalar *) {
143 eigen_assert(
false &&
"THERE IS NO PACKETIZE VERSION FOR THE CHOSEN TYPE");
148#elif defined(SYCL_DEVICE_ONLY)
149template <
typename PacketReturnType>
151 typedef typename ::Eigen::internal::unpacket_traits<PacketReturnType>::type
153 template <
typename Index>
154 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
static Scalar scalarize(
Index index, PacketReturnType &
in) {
172 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
static PacketReturnType convert_to_packet_type(
173 Scalar
in, Scalar other) {
174 return PacketReturnType(
in, other, other, other);
176 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
static void set_packet(PacketReturnType &lhs, Scalar *rhs) {
177 lhs = PacketReturnType(rhs[0], rhs[1], rhs[2], rhs[3]);
181template <
typename PacketReturnType>
182struct PacketWrapper<PacketReturnType, 1> {
183 typedef typename ::Eigen::internal::unpacket_traits<PacketReturnType>::type
185 template <
typename Index>
186 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
static Scalar scalarize(
Index, PacketReturnType &in) {
189 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
static PacketReturnType convert_to_packet_type(Scalar in,
191 return PacketReturnType(in);
193 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
static void set_packet(PacketReturnType &lhs, Scalar *rhs) {
198template <
typename PacketReturnType>
199struct PacketWrapper<PacketReturnType, 2> {
200 typedef typename ::Eigen::internal::unpacket_traits<PacketReturnType>::type
202 template <
typename Index>
203 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
static Scalar scalarize(
Index index, PacketReturnType &in) {
212 __builtin_unreachable();
214 __builtin_unreachable();
217 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
static PacketReturnType convert_to_packet_type(
218 Scalar in, Scalar other) {
219 return PacketReturnType(in, other);
221 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
static void set_packet(PacketReturnType &lhs, Scalar *rhs) {
222 lhs = PacketReturnType(rhs[0], rhs[1]);
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:50
Namespace containing all symbols from the Eigen library.
Definition LDLT.h:16
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
Definition InteropHeaders.h:130
Definition GenericPacketMath.h:43
Definition InteropHeaders.h:31
Definition PacketMath.h:47