From 33e174613987cfc6c83576dc0fe8086c7a5d1b1f Mon Sep 17 00:00:00 2001 From: Eugene Zhulenev Date: Wed, 9 Oct 2019 12:45:31 -0700 Subject: Block evaluation for TensorChipping + fixed bugs in TensorPadding and TensorSlicing --- .../Eigen/CXX11/src/Tensor/TensorForcedEval.h | 23 ++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h') diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h b/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h index 8d45bd62a..d98af1355 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h @@ -97,21 +97,26 @@ struct TensorEvaluator, Device> IsAligned = true, PacketAccess = (PacketType::size > 1), BlockAccess = internal::is_arithmetic::value, - BlockAccessV2 = false, + BlockAccessV2 = internal::is_arithmetic::value, PreferBlockAccess = false, Layout = TensorEvaluator::Layout, RawAccess = true }; - typedef typename internal::TensorBlock< - CoeffReturnType, Index, internal::traits::NumDimensions, Layout> + static const int NumDims = internal::traits::NumDimensions; + + typedef typename internal::TensorBlock TensorBlock; - typedef typename internal::TensorBlockReader< - CoeffReturnType, Index, internal::traits::NumDimensions, Layout> + typedef typename internal::TensorBlockReader TensorBlockReader; //===- Tensor block evaluation strategy (see TensorBlock.h) -------------===// - typedef internal::TensorBlockNotImplemented TensorBlockV2; + typedef internal::TensorBlockDescriptor TensorBlockDesc; + typedef internal::TensorBlockScratchAllocator TensorBlockScratch; + + typedef typename internal::TensorMaterializedBlock + TensorBlockV2; //===--------------------------------------------------------------------===// EIGEN_DEVICE_FUNC TensorEvaluator(const XprType& op, const Device& device) @@ -170,6 +175,12 @@ struct TensorEvaluator, Device> TensorBlockReader::Run(block, m_buffer); } + EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockV2 + blockV2(TensorBlockDesc& desc, TensorBlockScratch& scratch) const { + assert(m_buffer != NULL); + return TensorBlockV2::materialize(m_buffer, m_impl.dimensions(), desc, scratch); + } + EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const { return TensorOpCost(sizeof(CoeffReturnType), 0, 0, vectorized, PacketSize); } -- cgit v1.2.3