diff options
Diffstat (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorSyclExtractFunctors.h')
-rw-r--r-- | unsupported/Eigen/CXX11/src/Tensor/TensorSyclExtractFunctors.h | 467 |
1 files changed, 0 insertions, 467 deletions
diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorSyclExtractFunctors.h b/unsupported/Eigen/CXX11/src/Tensor/TensorSyclExtractFunctors.h deleted file mode 100644 index 09407e53e..000000000 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorSyclExtractFunctors.h +++ /dev/null @@ -1,467 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Mehdi Goli Codeplay Software Ltd. -// Ralph Potter Codeplay Software Ltd. -// Luke Iwanski Codeplay Software Ltd. -// Contact: <eigen@codeplay.com> -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -/***************************************************************** - * TensorSyclextractFunctors.h - * - * \brief: - * Used to extract all the functors allocated to each node of the expression -*tree. - * -*****************************************************************/ - -#ifndef UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_EXTRACT_FUNCTORS_HPP -#define UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_EXTRACT_FUNCTORS_HPP - -namespace Eigen { -namespace TensorSycl { -namespace internal { -/// struct FunctorExtractor: This struct is used to extract the functors -/// constructed on -/// the host-side, to pack them and reuse them in reconstruction of the -/// expression on the device. -/// We have to do that as in Eigen the functors are not stateless so we cannot -/// re-instantiate them on the device. -/// We have to pass instantiated functors to the device. -// This struct is used for leafNode (TensorMap) and nodes behaving like leafNode (TensorForcedEval). -#define DEFALTACTION(Evaluator)\ -typedef typename Evaluator::Dimensions Dimensions;\ -const Dimensions m_dimensions;\ -EIGEN_STRONG_INLINE const Dimensions& dimensions() const { return m_dimensions; }\ -FunctorExtractor(const Evaluator& expr): m_dimensions(expr.dimensions()) {} - -template <typename Evaluator> struct FunctorExtractor{ - DEFALTACTION(Evaluator) -}; - - -/// specialisation of the \ref FunctorExtractor struct when the node type does not require anything -///TensorConversionOp -#define SYCLEXTRFUNCCONVERSION(ExprNode, CVQual)\ -template <typename ArgType1, typename ArgType2, typename Dev>\ -struct FunctorExtractor<TensorEvaluator<CVQual ExprNode<ArgType1, ArgType2>, Dev> > {\ - FunctorExtractor<TensorEvaluator<ArgType2, Dev> > subExpr;\ - FunctorExtractor(const TensorEvaluator<CVQual ExprNode<ArgType1, ArgType2>, Dev>& expr)\ - : subExpr(expr.impl()) {}\ -}; - -SYCLEXTRFUNCCONVERSION(TensorConversionOp, const) -SYCLEXTRFUNCCONVERSION(TensorConversionOp, ) -#undef SYCLEXTRFUNCCONVERSION - -#define SYCLEXTRTENSORMAPFIXEDSIZE(CVQual)\ -template <typename Scalar_, typename Dimensions_, int Options_2, typename IndexType, int Options_, template <class> class MakePointer_, typename Dev>\ -struct FunctorExtractor< TensorEvaluator <CVQual TensorMap<TensorFixedSize<Scalar_, Dimensions_, Options_2, IndexType>, Options_, MakePointer_> , Dev> >{\ -FunctorExtractor(const TensorEvaluator <CVQual TensorMap<TensorFixedSize<Scalar_, Dimensions_, Options_2, IndexType>, Options_, MakePointer_> , Dev>& ){}\ -}; - -SYCLEXTRTENSORMAPFIXEDSIZE(const) -SYCLEXTRTENSORMAPFIXEDSIZE() -#undef SYCLEXTRTENSORMAPFIXEDSIZE - -/// specialisation of the \ref FunctorExtractor struct when the node type is -/// TensorCwiseNullaryOp, TensorCwiseUnaryOp, and TensorBroadcastingOp -#define SYCLEXTRFUNCUNARY(CVQual)\ -template <template <class, class> class UnaryCategory, typename OP, typename RHSExpr, typename Dev>\ -struct FunctorExtractor<TensorEvaluator<CVQual UnaryCategory<OP, RHSExpr>, Dev> > {\ - FunctorExtractor<TensorEvaluator<RHSExpr, Dev> > rhsExpr;\ - const OP func;\ - FunctorExtractor(const TensorEvaluator<CVQual UnaryCategory<OP, RHSExpr>, Dev>& expr)\ - : rhsExpr(expr.impl()), func(expr.functor()) {}\ -}; - -SYCLEXTRFUNCUNARY(const) -SYCLEXTRFUNCUNARY() -#undef SYCLEXTRFUNCUNARY - -/// specialisation of the \ref FunctorExtractor struct when the node type is -/// TensorCwiseBinaryOp -#define SYCLEXTRFUNCBIINARY(CVQual)\ -template <template<class, class, class> class BinaryCategory, typename OP, typename LHSExpr, typename RHSExpr, typename Dev>\ -struct FunctorExtractor<TensorEvaluator<CVQual BinaryCategory<OP, LHSExpr, RHSExpr>, Dev> > {\ - FunctorExtractor<TensorEvaluator<LHSExpr, Dev> > lhsExpr;\ - FunctorExtractor<TensorEvaluator<RHSExpr, Dev> > rhsExpr;\ - const OP func;\ - FunctorExtractor(const TensorEvaluator<CVQual BinaryCategory<OP, LHSExpr, RHSExpr>, Dev>& expr)\ - : lhsExpr(expr.left_impl()),rhsExpr(expr.right_impl()),func(expr.functor()) {}\ -}; - -SYCLEXTRFUNCBIINARY(const) -SYCLEXTRFUNCBIINARY() -#undef SYCLEXTRFUNCBIINARY - -/// specialisation of the \ref FunctorExtractor struct when the node type is TensorCwiseTernaryOp -#define SYCLEXTRFUNCTERNARY(CVQual)\ -template <template <class, class, class, class> class TernaryCategory, typename OP, typename Arg1Expr, typename Arg2Expr, typename Arg3Expr,typename Dev>\ -struct FunctorExtractor<TensorEvaluator<CVQual TernaryCategory<OP, Arg1Expr, Arg2Expr, Arg3Expr>, Dev> > {\ - FunctorExtractor<TensorEvaluator<Arg1Expr, Dev> > arg1Expr;\ - FunctorExtractor<TensorEvaluator<Arg2Expr, Dev> > arg2Expr;\ - FunctorExtractor<TensorEvaluator<Arg3Expr, Dev> > arg3Expr;\ - const OP func;\ - FunctorExtractor(const TensorEvaluator<CVQual TernaryCategory<OP, Arg1Expr, Arg2Expr, Arg3Expr>, Dev>& expr)\ - : arg1Expr(expr.arg1Impl()), arg2Expr(expr.arg2Impl()), arg3Expr(expr.arg3Impl()), func(expr.functor()) {}\ -}; - -SYCLEXTRFUNCTERNARY(const) -SYCLEXTRFUNCTERNARY() -#undef SYCLEXTRFUNCTERNARY - - - -//TensorCustomOp must be specialised otherwise it will be captured by UnaryCategory while its action is different -//from the UnaryCategory and it is similar to the general FunctorExtractor. -/// specialisation of TensorCustomOp -#define SYCLEXTRFUNCCUSTOMUNARYOP(CVQual)\ -template <typename CustomUnaryFunc, typename ArgType, typename Dev >\ -struct FunctorExtractor<TensorEvaluator<CVQual TensorCustomUnaryOp<CustomUnaryFunc, ArgType>, Dev> > {\ - typedef TensorEvaluator<CVQual TensorCustomUnaryOp<CustomUnaryFunc, ArgType>, Dev> Evaluator;\ - DEFALTACTION(Evaluator)\ -}; -//TensorCustomUnaryOp -SYCLEXTRFUNCCUSTOMUNARYOP(const) -SYCLEXTRFUNCCUSTOMUNARYOP() -#undef SYCLEXTRFUNCCUSTOMUNARYOP - -//TensorCustomBinaryOp -#define SYCLEXTRFUNCCUSTOMBIBARYOP(CVQual)\ -template <typename CustomBinaryFunc, typename ArgType1, typename ArgType2, typename Dev >\ -struct FunctorExtractor<TensorEvaluator<CVQual TensorCustomBinaryOp<CustomBinaryFunc, ArgType1, ArgType2>, Dev> > {\ - typedef TensorEvaluator<CVQual TensorCustomBinaryOp<CustomBinaryFunc, ArgType1, ArgType2>, Dev> Evaluator;\ - DEFALTACTION(Evaluator)\ -}; -//TensorCustomBinaryOp -SYCLEXTRFUNCCUSTOMBIBARYOP(const) -SYCLEXTRFUNCCUSTOMBIBARYOP() -#undef SYCLEXTRFUNCCUSTOMBIBARYOP - - - -/// specialisation of the \ref FunctorExtractor struct when the node type is -/// TensorCwiseSelectOp. This is an specialisation without OP so it has to be separated. -#define SYCLEXTRFUNCSELECTOP(CVQual)\ -template <typename IfExpr, typename ThenExpr, typename ElseExpr, typename Dev>\ -struct FunctorExtractor< TensorEvaluator<CVQual TensorSelectOp<IfExpr, ThenExpr, ElseExpr>, Dev> > {\ - FunctorExtractor<TensorEvaluator<IfExpr, Dev> > ifExpr;\ - FunctorExtractor<TensorEvaluator<ThenExpr, Dev> > thenExpr;\ - FunctorExtractor<TensorEvaluator<ElseExpr, Dev> > elseExpr;\ - FunctorExtractor(const TensorEvaluator<CVQual TensorSelectOp<IfExpr, ThenExpr, ElseExpr>, Dev>& expr)\ - : ifExpr(expr.cond_impl()), thenExpr(expr.then_impl()), elseExpr(expr.else_impl()) {}\ -}; - -SYCLEXTRFUNCSELECTOP(const) -SYCLEXTRFUNCSELECTOP() -#undef SYCLEXTRFUNCSELECTOP - -/// specialisation of the \ref FunctorExtractor struct when the node type is -/// const TensorAssignOp. This is an specialisation without OP so it has to be separated. -#define SYCLEXTRFUNCASSIGNOP(CVQual)\ -template <typename LHSExpr, typename RHSExpr, typename Dev>\ -struct FunctorExtractor<TensorEvaluator<CVQual TensorAssignOp<LHSExpr, RHSExpr>, Dev> > {\ - FunctorExtractor<TensorEvaluator<LHSExpr, Dev> > lhsExpr;\ - FunctorExtractor<TensorEvaluator<RHSExpr, Dev> > rhsExpr;\ - FunctorExtractor(const TensorEvaluator<CVQual TensorAssignOp<LHSExpr, RHSExpr>, Dev>& expr)\ - : lhsExpr(expr.left_impl()), rhsExpr(expr.right_impl()) {}\ -}; -SYCLEXTRFUNCASSIGNOP(const) -SYCLEXTRFUNCASSIGNOP() -#undef SYCLEXTRFUNCASSIGNOP - -/// specialisation of the \ref FunctorExtractor struct when the node types are -/// TensorEvalToOp, TensorLayoutSwapOp. This is an specialisation without OP so it has to be separated. -#define SYCLEXTRFUNCEVALTOOPSWAPLAYOUTINDEXTUPLE(CVQual, ExprNode)\ -template <typename Expr, typename Dev>\ -struct FunctorExtractor<TensorEvaluator<CVQual ExprNode<Expr>, Dev> > {\ - FunctorExtractor<TensorEvaluator<Expr, Dev> > xprExpr;\ - FunctorExtractor(const TensorEvaluator<CVQual ExprNode<Expr>, Dev>& expr)\ - : xprExpr(expr.impl()) {}\ -}; -//TensorEvalToOp -SYCLEXTRFUNCEVALTOOPSWAPLAYOUTINDEXTUPLE(const, TensorEvalToOp) -SYCLEXTRFUNCEVALTOOPSWAPLAYOUTINDEXTUPLE(, TensorEvalToOp) -// TensorLayoutSwapOp -SYCLEXTRFUNCEVALTOOPSWAPLAYOUTINDEXTUPLE(const, TensorLayoutSwapOp) -SYCLEXTRFUNCEVALTOOPSWAPLAYOUTINDEXTUPLE(, TensorLayoutSwapOp) -// TensorIndexTupleOp -SYCLEXTRFUNCEVALTOOPSWAPLAYOUTINDEXTUPLE(const, TensorIndexTupleOp) -SYCLEXTRFUNCEVALTOOPSWAPLAYOUTINDEXTUPLE(, TensorIndexTupleOp) - -#undef SYCLEXTRFUNCEVALTOOPSWAPLAYOUTINDEXTUPLE - -template<typename Dim, size_t NumOutputDim> struct DimConstr { -template<typename InDim> - static EIGEN_STRONG_INLINE Dim getDim(InDim dims ) {return dims;} -}; - -template<typename Dim> struct DimConstr<Dim, 0> { - template<typename InDim> - static EIGEN_STRONG_INLINE Dim getDim(InDim dims ) {return Dim(static_cast<Dim>(dims.TotalSize()));} -}; -//TensorReductionOp -#define SYCLEXTRFUNCREDUCTIONOP(CVQual)\ -template<typename Op, typename Dims, typename ArgType, template <class> class MakePointer_, typename Device>\ -struct FunctorExtractor<TensorEvaluator<CVQual TensorReductionOp<Op, Dims, ArgType, MakePointer_>, Device> >{\ - typedef TensorEvaluator<CVQual TensorReductionOp<Op, Dims, ArgType, MakePointer_>, Device> Evaluator;\ - typedef typename Eigen::internal::conditional<Evaluator::NumOutputDims==0, DSizes<typename Evaluator::Index, 1>, typename Evaluator::Dimensions >::type Dimensions;\ - const Dimensions m_dimensions;\ - EIGEN_STRONG_INLINE const Dimensions& dimensions() const { return m_dimensions; }\ - FunctorExtractor(const TensorEvaluator<CVQual TensorReductionOp<Op, Dims, ArgType, MakePointer_>, Device>& expr)\ - : m_dimensions(DimConstr<Dimensions, Evaluator::NumOutputDims>::getDim(expr.dimensions())) {}\ -}; -SYCLEXTRFUNCREDUCTIONOP(const) -SYCLEXTRFUNCREDUCTIONOP() -#undef SYCLEXTRFUNCREDUCTIONOP - -//TensorTupleReducerOp -#define SYCLEXTRFUNCTUPLEREDUCTIONOP(CVQual)\ -template<typename ReduceOp, typename Dims, typename ArgType, typename Device>\ - struct FunctorExtractor<TensorEvaluator<CVQual TensorTupleReducerOp<ReduceOp, Dims, ArgType>, Device> >{\ - typedef TensorEvaluator<CVQual TensorTupleReducerOp<ReduceOp, Dims, ArgType>, Device> Evaluator;\ - static const int NumOutputDims= Eigen::internal::traits<TensorTupleReducerOp<ReduceOp, Dims, ArgType> >::NumDimensions;\ - typedef typename Evaluator::StrideDims StrideDims;\ - typedef typename Evaluator::Index Index;\ - typedef typename Eigen::internal::conditional<NumOutputDims==0, DSizes<Index, 1>, typename Evaluator::Dimensions >::type Dimensions;\ - const Dimensions m_dimensions;\ - const Index m_return_dim;\ - const StrideDims m_strides;\ - const Index m_stride_mod;\ - const Index m_stride_div;\ - EIGEN_STRONG_INLINE const Dimensions& dimensions() const { return m_dimensions; }\ - EIGEN_STRONG_INLINE Index return_dim() const {return m_return_dim;}\ - EIGEN_STRONG_INLINE const StrideDims strides() const {return m_strides;}\ - EIGEN_STRONG_INLINE const Index stride_mod() const {return m_stride_mod;}\ - EIGEN_STRONG_INLINE const Index stride_div() const {return m_stride_div;}\ - FunctorExtractor(const TensorEvaluator<CVQual TensorTupleReducerOp<ReduceOp, Dims, ArgType>, Device>& expr)\ - : m_dimensions(DimConstr<Dimensions, NumOutputDims>::getDim(expr.dimensions())), m_return_dim(expr.return_dim()),\ - m_strides(expr.strides()), m_stride_mod(expr.stride_mod()), m_stride_div(expr.stride_div()){}\ -}; - -SYCLEXTRFUNCTUPLEREDUCTIONOP(const) -SYCLEXTRFUNCTUPLEREDUCTIONOP() -#undef SYCLEXTRFUNCTUPLEREDUCTIONOP - -//TensorContractionOp and TensorConvolutionOp -#define SYCLEXTRFUNCCONTRACTCONVOLUTIONOP(CVQual, ExprNode)\ -template<typename Indices, typename LhsXprType, typename RhsXprType, typename Device>\ -struct FunctorExtractor<TensorEvaluator<CVQual ExprNode<Indices, LhsXprType, RhsXprType>, Device>>{\ - typedef TensorEvaluator<CVQual ExprNode<Indices, LhsXprType, RhsXprType>, Device> Evaluator;\ - typedef typename Evaluator::Dimensions Dimensions;\ - const Dimensions m_dimensions;\ - EIGEN_STRONG_INLINE const Dimensions& dimensions() const { return m_dimensions; }\ - FunctorExtractor(const TensorEvaluator<CVQual ExprNode<Indices, LhsXprType, RhsXprType>, Device>& expr)\ - : m_dimensions(expr.dimensions()) {}\ -}; - -//TensorContractionOp -SYCLEXTRFUNCCONTRACTCONVOLUTIONOP(const,TensorContractionOp) -SYCLEXTRFUNCCONTRACTCONVOLUTIONOP(,TensorContractionOp) -//TensorConvolutionOp -SYCLEXTRFUNCCONTRACTCONVOLUTIONOP(const,TensorConvolutionOp) -SYCLEXTRFUNCCONTRACTCONVOLUTIONOP(,TensorConvolutionOp) -#undef SYCLEXTRFUNCCONTRACTCONVOLUTIONOP - -/// specialisation of the \ref FunctorExtractor struct when the node type is -/// const TensorSlicingOp. This is an specialisation without OP so it has to be separated. -#define SYCLEXTRFUNCTSLICEOP(CVQual)\ -template <typename StartIndices, typename Sizes, typename XprType, typename Dev>\ -struct FunctorExtractor<TensorEvaluator<CVQual TensorSlicingOp<StartIndices, Sizes, XprType>, Dev> > {\ - FunctorExtractor<TensorEvaluator<XprType, Dev> > xprExpr;\ - const StartIndices m_offsets;\ - const Sizes m_dimensions;\ - FunctorExtractor(const TensorEvaluator<CVQual TensorSlicingOp<StartIndices, Sizes, XprType>, Dev>& expr)\ - : xprExpr(expr.impl()), m_offsets(expr.startIndices()), m_dimensions(expr.dimensions()) {}\ - EIGEN_STRONG_INLINE const StartIndices& startIndices() const {return m_offsets;}\ - EIGEN_STRONG_INLINE const Sizes& dimensions() const {return m_dimensions;}\ -}; - -SYCLEXTRFUNCTSLICEOP(const) -SYCLEXTRFUNCTSLICEOP() -#undef SYCLEXTRFUNCTSLICEOP - -//TensorStridingSlicingOp -#define SYCLEXTRFUNCTSLICESTRIDEOP(CVQual)\ -template<typename StartIndices, typename StopIndices, typename Strides, typename XprType, typename Dev>\ -struct FunctorExtractor<TensorEvaluator<CVQual TensorStridingSlicingOp<StartIndices, StopIndices, Strides, XprType>, Dev> >{\ - FunctorExtractor<TensorEvaluator<XprType, Dev> > xprExpr;\ - const StartIndices m_startIndices;\ - const StopIndices m_stopIndices;\ - const Strides m_strides;\ - FunctorExtractor(const TensorEvaluator<CVQual TensorStridingSlicingOp<StartIndices, StopIndices,Strides, XprType>, Dev>& expr)\ - : xprExpr(expr.impl()), m_startIndices(expr.exprStartIndices()), m_stopIndices(expr.exprStopIndices()), m_strides(expr.strides()) {}\ - EIGEN_STRONG_INLINE const StartIndices& startIndices() const { return m_startIndices; }\ - EIGEN_STRONG_INLINE const StartIndices& stopIndices() const { return m_stopIndices; }\ - EIGEN_STRONG_INLINE const StartIndices& strides() const { return m_strides; }\ -}; - -SYCLEXTRFUNCTSLICESTRIDEOP(const) -SYCLEXTRFUNCTSLICESTRIDEOP() -#undef SYCLEXTRFUNCTSLICESTRIDEOP - -// Had to separate TensorReshapingOp and TensorShufflingOp. Otherwise it will be mistaken by UnaryCategory -#define SYCLRESHAPEANDSHUFFLEOPFUNCEXT(OPEXPR, FUNCCALL, CVQual)\ -template<typename Param, typename XprType, typename Dev>\ -struct FunctorExtractor<Eigen::TensorEvaluator<CVQual Eigen::OPEXPR<Param, XprType>, Dev> > {\ - FunctorExtractor<Eigen::TensorEvaluator<XprType, Dev> > xprExpr;\ - const Param m_param;\ - EIGEN_STRONG_INLINE const Param& param() const { return m_param; }\ - FunctorExtractor(const Eigen::TensorEvaluator<CVQual Eigen::OPEXPR<Param, XprType>, Dev>& expr)\ - : xprExpr(expr.impl()), m_param(expr.FUNCCALL) {}\ -}; - -//TensorReshapingOp -SYCLRESHAPEANDSHUFFLEOPFUNCEXT(TensorReshapingOp, dimensions(), const) -SYCLRESHAPEANDSHUFFLEOPFUNCEXT(TensorReshapingOp, dimensions(), ) - -//TensorShufflingOp -SYCLRESHAPEANDSHUFFLEOPFUNCEXT(TensorShufflingOp, shufflePermutation(), const) -SYCLRESHAPEANDSHUFFLEOPFUNCEXT(TensorShufflingOp, shufflePermutation(), ) -#undef SYCLRESHAPEANDSHUFFLEOPFUNCEXT - -// Had to separate reshapeOP otherwise it will be mistaken by UnaryCategory -#define PADDINGOPFUNCEXT(OPEXPR, FUNCCALL, SCALARFUNCCALL, CVQual)\ -template<typename Param, typename XprType, typename Dev>\ -struct FunctorExtractor<Eigen::TensorEvaluator<CVQual Eigen::OPEXPR<Param, XprType>, Dev> > {\ - FunctorExtractor<Eigen::TensorEvaluator<XprType, Dev> > xprExpr;\ - const Param m_param;\ - typedef typename Eigen::TensorEvaluator<CVQual Eigen::OPEXPR<Param, XprType>, Dev>::Scalar Scalar;\ - const Scalar m_scalar_param;\ - EIGEN_STRONG_INLINE const Param& param() const { return m_param; }\ - EIGEN_STRONG_INLINE const Scalar& scalar_param() const { return m_scalar_param; }\ - FunctorExtractor(const Eigen::TensorEvaluator<CVQual Eigen::OPEXPR<Param, XprType>, Dev>& expr)\ - : xprExpr(expr.impl()), m_param(expr.FUNCCALL), m_scalar_param(expr.SCALARFUNCCALL) {}\ -}; - -PADDINGOPFUNCEXT(TensorPaddingOp, padding(), padding_value(), const) -PADDINGOPFUNCEXT(TensorPaddingOp, padding(), padding_value(), ) -#undef PADDINGOPFUNCEXT - -/// specialisation of the \ref FunctorExtractor struct when the node type is TensorContractionOp and TensorConcatenationOp -/// for TensorContractionOp the LHS and RHS here are the original one no need to apply condition on their type. -#define SYCLEXTRFUNCCONTRACTCONCAT(OPEXPR, FUNCCALL, CVQual)\ -template <typename Param, typename LHSExpr, typename RHSExpr, typename Dev>\ -struct FunctorExtractor<TensorEvaluator<CVQual OPEXPR<Param, LHSExpr, RHSExpr>, Dev> > {\ - FunctorExtractor<TensorEvaluator<LHSExpr, Dev> > lhsExpr;\ - FunctorExtractor<TensorEvaluator<RHSExpr, Dev> > rhsExpr;\ - const Param func;\ - FunctorExtractor(const TensorEvaluator<CVQual OPEXPR<Param, LHSExpr, RHSExpr>, Dev>& expr)\ - : lhsExpr(expr.left_impl()),rhsExpr(expr.right_impl()),func(expr.FUNCCALL) {}\ -}; - -// TensorConcatenationOp -SYCLEXTRFUNCCONTRACTCONCAT(TensorConcatenationOp, axis(), const) -SYCLEXTRFUNCCONTRACTCONCAT(TensorConcatenationOp, axis(),) -#undef SYCLEXTRFUNCCONTRACTCONCAT - -//TensorChippingOp -#define SYCLEXTRFUNCCHIPPINGOP(CVQual)\ -template<DenseIndex DimId, typename XprType, typename Device>\ -struct FunctorExtractor<TensorEvaluator<CVQual TensorChippingOp<DimId, XprType>, Device> >{\ - FunctorExtractor<Eigen::TensorEvaluator<XprType, Device> > xprExpr;\ - const DenseIndex m_dim;\ - const DenseIndex m_offset;\ - EIGEN_STRONG_INLINE const DenseIndex& dimId() const { return m_dim; }\ - EIGEN_STRONG_INLINE const DenseIndex& offset() const { return m_offset; }\ - FunctorExtractor(const TensorEvaluator<CVQual TensorChippingOp<DimId, XprType>, Device>& expr)\ - : xprExpr(expr.impl()), m_dim(expr.dimId()), m_offset(expr.offset()) {}\ -}; - -SYCLEXTRFUNCCHIPPINGOP(const) -SYCLEXTRFUNCCHIPPINGOP() -#undef SYCLEXTRFUNCCHIPPINGOP - -//TensorImagePatchOp -#define SYCLEXTRFUNCIMAGEPATCHOP(CVQual)\ -template<DenseIndex Rows, DenseIndex Cols, typename XprType, typename Device>\ -struct FunctorExtractor<TensorEvaluator<CVQual TensorImagePatchOp<Rows, Cols, XprType>, Device> >{\ -typedef CVQual TensorImagePatchOp<Rows, Cols, XprType> Self;\ -FunctorExtractor<Eigen::TensorEvaluator<XprType, Device> > xprExpr;\ -const DenseIndex m_patch_rows;\ -const DenseIndex m_patch_cols;\ -const DenseIndex m_row_strides;\ -const DenseIndex m_col_strides;\ -const DenseIndex m_in_row_strides;\ -const DenseIndex m_in_col_strides;\ -const DenseIndex m_row_inflate_strides;\ -const DenseIndex m_col_inflate_strides;\ -const bool m_padding_explicit;\ -const DenseIndex m_padding_top;\ -const DenseIndex m_padding_bottom;\ -const DenseIndex m_padding_left;\ -const DenseIndex m_padding_right;\ -const PaddingType m_padding_type;\ -const typename Self::Scalar m_padding_value;\ -FunctorExtractor(const TensorEvaluator<Self, Device>& expr)\ -: xprExpr(expr.impl()), m_patch_rows(expr.xpr().patch_rows()), m_patch_cols(expr.xpr().patch_cols()),\ - m_row_strides(expr.xpr().row_strides()), m_col_strides(expr.xpr().col_strides()),\ - m_in_row_strides(expr.xpr().in_row_strides()), m_in_col_strides(expr.xpr().in_col_strides()),\ - m_row_inflate_strides(expr.xpr().row_inflate_strides()), m_col_inflate_strides(expr.xpr().col_inflate_strides()),\ - m_padding_explicit(expr.xpr().padding_explicit()),m_padding_top(expr.xpr().padding_top()),\ - m_padding_bottom(expr.xpr().padding_bottom()), m_padding_left(expr.xpr().padding_left()),\ - m_padding_right(expr.xpr().padding_right()), m_padding_type(expr.xpr().padding_type()),\ - m_padding_value(expr.xpr().padding_value()){}\ -}; - -SYCLEXTRFUNCIMAGEPATCHOP(const) -SYCLEXTRFUNCIMAGEPATCHOP() -#undef SYCLEXTRFUNCIMAGEPATCHOP - -/// TensorVolumePatchOp -#define SYCLEXTRFUNCVOLUMEPATCHOP(CVQual)\ -template<DenseIndex Planes, DenseIndex Rows, DenseIndex Cols, typename XprType, typename Device>\ -struct FunctorExtractor<TensorEvaluator<CVQual TensorVolumePatchOp<Planes, Rows, Cols, XprType>, Device> >{\ -typedef CVQual TensorVolumePatchOp<Planes, Rows, Cols, XprType> Self;\ -FunctorExtractor<Eigen::TensorEvaluator<XprType, Device> > xprExpr;\ -const DenseIndex m_patch_planes;\ -const DenseIndex m_patch_rows;\ -const DenseIndex m_patch_cols;\ -const DenseIndex m_plane_strides;\ -const DenseIndex m_row_strides;\ -const DenseIndex m_col_strides;\ -const DenseIndex m_in_plane_strides;\ -const DenseIndex m_in_row_strides;\ -const DenseIndex m_in_col_strides;\ -const DenseIndex m_plane_inflate_strides;\ -const DenseIndex m_row_inflate_strides;\ -const DenseIndex m_col_inflate_strides;\ -const bool m_padding_explicit;\ -const DenseIndex m_padding_top_z;\ -const DenseIndex m_padding_bottom_z;\ -const DenseIndex m_padding_top;\ -const DenseIndex m_padding_bottom;\ -const DenseIndex m_padding_left;\ -const DenseIndex m_padding_right;\ -const PaddingType m_padding_type;\ -const typename Self::Scalar m_padding_value;\ -FunctorExtractor(const TensorEvaluator<Self, Device>& expr)\ -: xprExpr(expr.impl()), m_patch_planes(expr.xpr().patch_planes()), m_patch_rows(expr.xpr().patch_rows()), m_patch_cols(expr.xpr().patch_cols()),\ - m_plane_strides(expr.xpr().plane_strides()), m_row_strides(expr.xpr().row_strides()), m_col_strides(expr.xpr().col_strides()),\ - m_in_plane_strides(expr.xpr().in_plane_strides()), m_in_row_strides(expr.xpr().in_row_strides()), m_in_col_strides(expr.xpr().in_col_strides()),\ - m_plane_inflate_strides(expr.xpr().plane_inflate_strides()),m_row_inflate_strides(expr.xpr().row_inflate_strides()),\ - m_col_inflate_strides(expr.xpr().col_inflate_strides()), m_padding_explicit(expr.xpr().padding_explicit()),\ - m_padding_top_z(expr.xpr().padding_top_z()), m_padding_bottom_z(expr.xpr().padding_bottom_z()), \ - m_padding_top(expr.xpr().padding_top()), m_padding_bottom(expr.xpr().padding_bottom()), m_padding_left(expr.xpr().padding_left()),\ - m_padding_right(expr.xpr().padding_right()), m_padding_type(expr.xpr().padding_type()),m_padding_value(expr.xpr().padding_value()){}\ -}; -SYCLEXTRFUNCVOLUMEPATCHOP(const) -SYCLEXTRFUNCVOLUMEPATCHOP() -#undef SYCLEXTRFUNCVOLUMEPATCHOP - - -/// template deduction function for FunctorExtractor -template <typename Evaluator> -auto inline extractFunctors(const Evaluator& evaluator)-> FunctorExtractor<Evaluator> { - return FunctorExtractor<Evaluator>(evaluator); -} -} // namespace internal -} // namespace TensorSycl -} // namespace Eigen - -#endif // UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_EXTRACT_FUNCTORS_HPP |