10 #ifndef EIGEN_CXX11_TENSOR_TENSOR_EVALUATOR_H 11 #define EIGEN_CXX11_TENSOR_TENSOR_EVALUATOR_H 27 template<
typename Derived,
typename Device>
51 CoordAccess = NumCoords > 0,
67 :
m_data(device.
get((const_cast<TensorPointerType>(m.
data())))),
83 #ifdef EIGEN_USE_THREADS 84 template <
typename EvalSubExprsCallback>
86 EvaluatorPointerType dest, EvalSubExprsCallback done) {
90 #endif // EIGEN_USE_THREADS 105 PacketReturnType
packet(Index index)
const 107 return internal::ploadt<PacketReturnType, LoadMode>(
m_data + index);
119 return internal::ploadu<PacketReturnTypeT>(
m_data + index, umask);
125 return internal::pstoret<Scalar, PacketReturnType, StoreMode>(
m_data + index,
x);
130 if (static_cast<int>(Layout) == static_cast<int>(
ColMajor)) {
140 if (static_cast<int>(Layout) == static_cast<int>(
ColMajor)) {
148 return TensorOpCost(
sizeof(CoeffReturnType), 0, 0, vectorized,
158 block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
159 bool =
false)
const {
164 template<
typename TensorBlock>
174 TensorBlockAssign::Run(
183 #ifdef EIGEN_USE_SYCL 197 T loadConstant(
const T* address) {
201 #if defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH >= 350 203 float loadConstant(
const float* address) {
204 return __ldg(address);
207 double loadConstant(
const double* address) {
208 return __ldg(address);
215 #ifdef EIGEN_USE_SYCL 217 template <cl::sycl::access::mode AcMd,
typename T>
218 T &loadConstant(
const Eigen::TensorSycl::internal::RangeAccess<AcMd, T> &address) {
226 template<
typename Derived,
typename Device>
252 CoordAccess = NumCoords > 0,
279 #ifdef EIGEN_USE_THREADS 280 template <
typename EvalSubExprsCallback>
282 EvaluatorPointerType dest, EvalSubExprsCallback done) {
286 #endif // EIGEN_USE_THREADS 292 return loadConstant(
m_data+index);
296 PacketReturnType
packet(Index index)
const 298 return internal::ploadt_ro<PacketReturnType, LoadMode>(
m_data + index);
310 return internal::ploadu<PacketReturnTypeT>(
m_data + index, umask);
315 const Index index = (
static_cast<int>(
Layout) == static_cast<int>(
ColMajor)) ?
m_dims.IndexOfColMajor(coords)
316 :
m_dims.IndexOfRowMajor(coords);
317 return loadConstant(
m_data+index);
321 return TensorOpCost(
sizeof(CoeffReturnType), 0, 0, vectorized,
331 block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
332 bool =
false)
const {
338 #ifdef EIGEN_USE_SYCL 355 template<
typename NullaryOp,
typename ArgType,
typename Device>
361 : m_functor(op.functor()), m_argImpl(op.nestedExpression(), device), m_wrapper()
376 #ifdef EIGEN_USE_SYCL 395 #ifdef EIGEN_USE_THREADS 396 template <
typename EvalSubExprsCallback>
398 EvaluatorPointerType, EvalSubExprsCallback done) {
401 #endif // EIGEN_USE_THREADS 407 return m_wrapper(m_functor, index);
410 template<
int LoadMode>
413 return m_wrapper.template packetOp<PacketReturnType, Index>(m_functor, index);
418 return TensorOpCost(
sizeof(CoeffReturnType), 0, 0, vectorized,
424 #ifdef EIGEN_USE_SYCL 441 template<
typename UnaryOp,
typename ArgType,
typename Device>
459 m_functor(op.functor()),
460 m_argImpl(op.nestedExpression(), device)
488 m_argImpl.evalSubExprsIfNeeded(
NULL);
492 #ifdef EIGEN_USE_THREADS 493 template <
typename EvalSubExprsCallback>
495 EvaluatorPointerType, EvalSubExprsCallback done) {
496 m_argImpl.evalSubExprsIfNeededAsync(
nullptr, [done](
bool) { done(
true); });
498 #endif // EIGEN_USE_THREADS 506 return m_functor(m_argImpl.coeff(index));
509 template<
int LoadMode>
512 return m_functor.packetOp(m_argImpl.template packet<LoadMode>(index));
517 return m_argImpl.costPerCoeff(vectorized) +
518 TensorOpCost(0, 0, functor_cost, vectorized, PacketSize);
524 return m_argImpl.getResourceRequirements().addCostPerCoeff(
525 {0, 0, functor_cost / PacketSize});
529 block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
530 bool =
false)
const {
531 return TensorBlock(m_argImpl.block(desc, scratch), m_functor);
536 #ifdef EIGEN_USE_SYCL 553 template<
typename BinaryOp,
typename LeftArgType,
typename RightArgType,
typename Device>
575 m_functor(op.functor()),
576 m_leftImpl(op.lhsExpression(), device),
577 m_rightImpl(op.rhsExpression(), device)
612 return m_leftImpl.dimensions();
616 m_leftImpl.evalSubExprsIfNeeded(
NULL);
617 m_rightImpl.evalSubExprsIfNeeded(
NULL);
621 #ifdef EIGEN_USE_THREADS 622 template <
typename EvalSubExprsCallback>
624 EvaluatorPointerType, EvalSubExprsCallback done) {
626 m_leftImpl.evalSubExprsIfNeededAsync(
nullptr, [
this, done](
bool) {
627 m_rightImpl.evalSubExprsIfNeededAsync(
nullptr,
628 [done](
bool) { done(
true); });
631 #endif // EIGEN_USE_THREADS 634 m_leftImpl.cleanup();
635 m_rightImpl.cleanup();
640 return m_functor(m_leftImpl.coeff(index), m_rightImpl.coeff(index));
642 template<
int LoadMode>
645 return m_functor.packetOp(m_leftImpl.template packet<LoadMode>(index), m_rightImpl.template packet<LoadMode>(index));
651 return m_leftImpl.costPerCoeff(vectorized) +
652 m_rightImpl.costPerCoeff(vectorized) +
653 TensorOpCost(0, 0, functor_cost, vectorized, PacketSize);
660 m_leftImpl.getResourceRequirements(),
661 m_rightImpl.getResourceRequirements())
662 .addCostPerCoeff({0, 0, functor_cost / PacketSize});
666 block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
667 bool =
false)
const {
669 return TensorBlock(m_leftImpl.block(desc, scratch),
670 m_rightImpl.block(desc, scratch), m_functor);
675 #ifdef EIGEN_USE_SYCL 678 m_leftImpl.bind(cgh);
679 m_rightImpl.bind(cgh);
691 template<
typename TernaryOp,
typename Arg1Type,
typename Arg2Type,
typename Arg3Type,
typename Device>
712 : m_functor(op.functor()),
713 m_arg1Impl(op.arg1Expression(), device),
714 m_arg2Impl(op.arg2Expression(), device),
715 m_arg3Impl(op.arg3Expression(), device)
721 STORAGE_KIND_MUST_MATCH)
724 STORAGE_KIND_MUST_MATCH)
727 STORAGE_INDEX_MUST_MATCH)
730 STORAGE_INDEX_MUST_MATCH)
751 return m_arg1Impl.dimensions();
755 m_arg1Impl.evalSubExprsIfNeeded(
NULL);
756 m_arg2Impl.evalSubExprsIfNeeded(
NULL);
757 m_arg3Impl.evalSubExprsIfNeeded(
NULL);
761 m_arg1Impl.cleanup();
762 m_arg2Impl.cleanup();
763 m_arg3Impl.cleanup();
768 return m_functor(m_arg1Impl.coeff(index), m_arg2Impl.coeff(index), m_arg3Impl.coeff(index));
770 template<
int LoadMode>
773 return m_functor.packetOp(m_arg1Impl.template packet<LoadMode>(index),
774 m_arg2Impl.template packet<LoadMode>(index),
775 m_arg3Impl.template packet<LoadMode>(index));
781 return m_arg1Impl.costPerCoeff(vectorized) +
782 m_arg2Impl.costPerCoeff(vectorized) +
783 m_arg3Impl.costPerCoeff(vectorized) +
784 TensorOpCost(0, 0, functor_cost, vectorized, PacketSize);
789 #ifdef EIGEN_USE_SYCL 792 m_arg1Impl.bind(cgh);
793 m_arg2Impl.bind(cgh);
794 m_arg3Impl.bind(cgh);
808 template<
typename IfArgType,
typename ThenArgType,
typename ElseArgType,
typename Device>
832 : m_condImpl(op.ifExpression(), device),
833 m_thenImpl(op.thenExpression(), device),
834 m_elseImpl(op.elseExpression(), device)
863 struct TensorSelectOpBlockFactory {
864 template <
typename IfArgXprType,
typename ThenArgXprType,
typename ElseArgXprType>
869 template <
typename IfArgXprType,
typename ThenArgXprType,
typename ElseArgXprType>
871 const IfArgXprType& if_expr,
const ThenArgXprType& then_expr,
const ElseArgXprType& else_expr)
const {
885 return m_condImpl.dimensions();
889 m_condImpl.evalSubExprsIfNeeded(
NULL);
890 m_thenImpl.evalSubExprsIfNeeded(
NULL);
891 m_elseImpl.evalSubExprsIfNeeded(
NULL);
895 #ifdef EIGEN_USE_THREADS 896 template <
typename EvalSubExprsCallback>
898 EvaluatorPointerType, EvalSubExprsCallback done) {
899 m_condImpl.evalSubExprsIfNeeded(
nullptr, [
this, done](
bool) {
900 m_thenImpl.evalSubExprsIfNeeded(
nullptr, [
this, done](
bool) {
901 m_elseImpl.evalSubExprsIfNeeded(
nullptr, [done](
bool) { done(
true); });
905 #endif // EIGEN_USE_THREADS 908 m_condImpl.cleanup();
909 m_thenImpl.cleanup();
910 m_elseImpl.cleanup();
915 return m_condImpl.coeff(index) ? m_thenImpl.coeff(index) : m_elseImpl.coeff(index);
917 template<
int LoadMode>
923 select.
select[
i] = m_condImpl.coeff(index+
i);
926 m_thenImpl.template packet<LoadMode>(index),
927 m_elseImpl.template packet<LoadMode>(index));
933 return m_condImpl.costPerCoeff(vectorized) +
934 m_thenImpl.costPerCoeff(vectorized)
935 .
cwiseMax(m_elseImpl.costPerCoeff(vectorized));
940 auto then_req = m_thenImpl.getResourceRequirements();
941 auto else_req = m_elseImpl.getResourceRequirements();
945 merged_req.cost_per_coeff =
946 then_req.cost_per_coeff.cwiseMax(else_req.cost_per_coeff);
949 m_condImpl.getResourceRequirements(), merged_req);
953 block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
954 bool =
false)
const {
960 m_condImpl.block(desc, scratch), m_thenImpl.block(desc, scratch),
961 m_elseImpl.block(desc, scratch), TensorSelectOpBlockFactory());
966 #ifdef EIGEN_USE_SYCL 969 m_condImpl.bind(cgh);
970 m_thenImpl.bind(cgh);
971 m_elseImpl.bind(cgh);
983 #endif // EIGEN_CXX11_TENSOR_TENSOR_EVALUATOR_H TensorEvaluator< LeftArgType, Device > m_leftImpl
EIGEN_DEVICE_FUNC const Dimensions & dimensions() const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(const array< DenseIndex, NumCoords > &coords) const
EIGEN_STRONG_INLINE TensorEvaluator(const Derived &m, const Device &device)
StorageMemory< CoeffReturnType, Device > Storage
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType)
#define EIGEN_ALWAYS_INLINE
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::TensorBlockResourceRequirements getResourceRequirements() const
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
TensorSelectOp< IfArgType, ThenArgType, ElseArgType > XprType
EIGEN_STRONG_INLINE void cleanup()
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
#define EIGEN_STRONG_INLINE
EIGEN_STRONG_INLINE void cleanup()
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType)
Eigen::internal::traits< TensorCwiseNullaryOp >::Index Index
StorageMemory< CoeffReturnType, Device > Storage
EvaluatorPointerType m_data
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::TensorBlockResourceRequirements getResourceRequirements() const
internal::TensorBlockDescriptor< NumCoords, Index > TensorBlockDesc
PacketType< CoeffReturnType, Device >::type PacketReturnType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
internal::traits< Derived >::template MakePointer< Scalar >::Type TensorPointerType
EIGEN_DEVICE_FUNC EvaluatorPointerType data() const
TensorEvaluator(const XprType &op, const Device &device)
const XprType & expr() const
EIGEN_DEVICE_FUNC const Dimensions & dimensions() const
Derived::Scalar CoeffReturnType
PacketType< CoeffReturnType, Device >::type PacketReturnType
internal::traits< XprType >::Scalar CoeffReturnType
Derived::Dimensions Dimensions
TensorEvaluator< Arg2Type, Device > m_arg2Impl
TensorEvaluator< RightArgType, Device > m_rightImpl
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
internal::TensorBlockDescriptor< NumDims, Index > TensorBlockDesc
EIGEN_DEVICE_FUNC EvaluatorPointerType data() const
TensorEvaluator< ElseArgType, Device > m_elseImpl
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::TensorBlockResourceRequirements getResourceRequirements() const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
TensorEvaluator< const ArgType, Device >::TensorBlock ArgTensorBlock
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::enable_if< internal::unpacket_traits< PacketReturnTypeT >::masked_load_available, PacketReturnTypeT >::type partialPacket(Index index, typename internal::unpacket_traits< PacketReturnTypeT >::mask_t umask) const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
Storage::Type EvaluatorPointerType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::enable_if< internal::unpacket_traits< PacketReturnTypeT >::masked_load_available, PacketReturnTypeT >::type partialPacket(Index index, typename internal::unpacket_traits< PacketReturnTypeT >::mask_t umask) const
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool dimensions_match(Dims1 dims1, Dims2 dims2)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::TensorBlockResourceRequirements getResourceRequirements() const
Eigen::internal::traits< TensorCwiseTernaryOp >::Index Index
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions & dimensions() const
Namespace containing all symbols from the Eigen library.
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writePacket(Index index, const PacketReturnType &x)
EIGEN_DEVICE_FUNC EvaluatorPointerType data() const
A cost model used to limit the number of threads used for evaluating tensor expression.
EIGEN_STRONG_INLINE void cleanup()
static const int PacketSize
const TernaryOp m_functor
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
Eigen::internal::traits< TensorCwiseBinaryOp >::Index Index
EIGEN_DEVICE_FUNC EvaluatorPointerType data() const
StorageMemory< CoeffReturnType, Device > Storage
PacketType< CoeffReturnType, Device >::type PacketReturnType
Storage::Type EvaluatorPointerType
TensorEvaluator(const XprType &op, const Device &device)
TensorBlockDescriptor & DropDestinationBuffer()
Eigen::internal::traits< TensorCwiseUnaryOp >::Scalar Scalar
Storage::Type EvaluatorPointerType
TensorEvaluator< Arg3Type, Device > m_arg3Impl
Storage::Type EvaluatorPointerType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
TensorCwiseUnaryOp< UnaryOp, ArgType > XprType
TensorEvaluator< ArgType, Device >::Dimensions Dimensions
TensorEvaluator< const IfArgType, Device >::TensorBlock IfArgTensorBlock
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(Index index)
EIGEN_DEVICE_FUNC PacketReturnType packet(Index index) const
internal::traits< Derived >::template MakePointer< const Scalar >::Type TensorPointerType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost cwiseMax(const TensorOpCost &rhs) const
TensorCwiseTernaryOp< TernaryOp, Arg1Type, Arg2Type, Arg3Type > XprType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
TensorEvaluator< const RightArgType, Device >::TensorBlock RightTensorBlock
EIGEN_DEVICE_FUNC EvaluatorPointerType data() const
const Device EIGEN_DEVICE_REF m_device
internal::TensorBlockDescriptor< NumDims, Index > TensorBlockDesc
TensorCwiseNullaryOp< NullaryOp, ArgType > XprType
PacketType< CoeffReturnType, Device >::type PacketReturnType
StorageMemory< Scalar, Device > Storage
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
TensorEvaluator< LeftArgType, Device >::Dimensions Dimensions
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EvaluatorPointerType data() const
EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
TensorEvaluator(const XprType &op, const Device &device)
Eigen::internal::traits< TensorCwiseNullaryOp >::Scalar Scalar
EIGEN_STRONG_INLINE void cleanup()
internal::remove_const< Scalar >::type ScalarNoConst
PacketType< CoeffReturnType, Device >::type PacketReturnType
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType)
XprType< IfArgXprType, ThenArgXprType, ElseArgXprType >::type expr(const IfArgXprType &if_expr, const ThenArgXprType &then_expr, const ElseArgXprType &else_expr) const
internal::traits< XprType >::Scalar CoeffReturnType
EIGEN_STRONG_INLINE void cleanup()
internal::traits< XprType >::Scalar CoeffReturnType
Storage::Type EvaluatorPointerType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
TensorEvaluator< ArgType, Device > m_argImpl
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
StorageMemory< const Scalar, Device > Storage
TensorCwiseBinaryOp< BinaryOp, LeftArgType, RightArgType > XprType
TensorEvaluator< ArgType, Device > m_argImpl
const Device EIGEN_DEVICE_REF m_device
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Eigen::internal::traits< TensorCwiseTernaryOp >::Scalar Scalar
Storage::Type EvaluatorPointerType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
StorageMemory< CoeffReturnType, Device > Storage
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
Eigen::internal::traits< TensorSelectOp >::Scalar Scalar
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(const array< DenseIndex, NumCoords > &coords)
internal::TensorCwiseBinaryBlock< BinaryOp, LeftTensorBlock, RightTensorBlock > TensorBlock
TensorEvaluator< const LeftArgType, Device >::TensorBlock LeftTensorBlock
TensorEvaluator< ThenArgType, Device > m_thenImpl
internal::traits< XprType >::Scalar CoeffReturnType
static const int NumCoords
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
EIGEN_STRONG_INLINE void cleanup()
EIGEN_DEVICE_FUNC const Dimensions & dimensions() const
EIGEN_DEVICE_FUNC EvaluatorPointerType data() const
TensorEvaluator(const XprType &op, const Device &device)
internal::TensorMaterializedBlock< ScalarNoConst, NumCoords, Layout, Index > TensorBlock
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writeBlock(const TensorBlockDesc &desc, const TensorBlock &block)
PacketType< CoeffReturnType, Device >::type PacketReturnType
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
Derived::Scalar CoeffReturnType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions & dimensions() const
internal::TensorMaterializedBlock< ScalarNoConst, NumCoords, Layout, Index > TensorBlock
Derived::Dimensions Dimensions
Eigen::internal::traits< TensorSelectOp >::Index Index
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
Storage::Type EvaluatorPointerType
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType data)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
#define EIGEN_DEVICE_FUNC
TensorEvaluator< ArgType, Device >::Dimensions Dimensions
static EIGEN_STRONG_INLINE TensorMaterializedBlock materialize(const Scalar *data, const DataDimensions &data_dims, TensorBlockDesc &desc, TensorBlockScratch &scratch)
const Device EIGEN_DEVICE_REF m_device
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType dest)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
TensorEvaluator< IfArgType, Device >::Dimensions Dimensions
Eigen::internal::traits< TensorCwiseBinaryOp >::Scalar Scalar
internal::TensorBlockDescriptor< NumDims, Index > TensorBlockDesc
TensorEvaluator< IfArgType, Device > m_condImpl
EIGEN_DEVICE_FUNC const Dimensions & dimensions() const
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR __half_raw raw_uint16_to_half(numext::uint16_t x)
internal::TensorBlockNotImplemented TensorBlock
Eigen::internal::traits< TensorCwiseUnaryOp >::Index Index
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType)
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
const Dimensions & dimensions() const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
TensorEvaluator< const ThenArgType, Device >::TensorBlock ThenArgTensorBlock
EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
internal::traits< XprType >::Scalar CoeffReturnType
PacketType< CoeffReturnType, Device >::type PacketReturnType
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType)
TensorSelectOp< const IfArgXprType, const ThenArgXprType, const ElseArgXprType > type
internal::remove_const< Scalar >::type ScalarNoConst
internal::TensorBlockDescriptor< NumCoords, Index > TensorBlockDesc
internal::TensorCwiseUnaryBlock< UnaryOp, ArgTensorBlock > TensorBlock
internal::TensorTernaryExprBlock< TensorSelectOpBlockFactory, IfArgTensorBlock, ThenArgTensorBlock, ElseArgTensorBlock > TensorBlock
StorageMemory< CoeffReturnType, Device > Storage
const Device EIGEN_DEVICE_REF m_device
TensorEvaluator< Arg1Type, Device >::Dimensions Dimensions
TensorEvaluator< const ElseArgType, Device >::TensorBlock ElseArgTensorBlock
internal::remove_const< Scalar >::type ScalarNoConst
const NullaryOp m_functor
TensorEvaluator< Arg1Type, Device > m_arg1Impl
Container::iterator get(Container &c, Position position)
EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockResourceRequirements any()
EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::TensorBlockResourceRequirements getResourceRequirements() const
EIGEN_STRONG_INLINE TensorEvaluator(const Derived &m, const Device &device)
EvaluatorPointerType m_data
const internal::nullary_wrapper< CoeffReturnType, NullaryOp > m_wrapper
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockResourceRequirements merge(const TensorBlockResourceRequirements &lhs, const TensorBlockResourceRequirements &rhs)
TensorEvaluator(const XprType &op, const Device &device)
internal::TensorBlockNotImplemented TensorBlock
EIGEN_STRONG_INLINE Packet4i pblend(const Selector< 4 > &ifPacket, const Packet4i &thenPacket, const Packet4i &elsePacket)
EIGEN_STRONG_INLINE void cleanup()
EIGEN_DEVICE_FUNC const Dimensions & dimensions() const
#define EIGEN_UNROLL_LOOP
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(const array< DenseIndex, NumCoords > &coords) const