10#ifndef EIGEN_CXX11_TENSOR_TENSOR_MORPHING_H
11#define EIGEN_CXX11_TENSOR_TENSOR_MORPHING_H
23template<
typename NewDimensions,
typename XprType>
26 typedef typename XprType::Scalar
Scalar;
29 typedef typename XprTraits::Index
Index;
30 typedef typename XprType::Nested
Nested;
33 static const int Layout = XprTraits::Layout;
37template<
typename NewDimensions,
typename XprType>
43template<
typename NewDimensions,
typename XprType>
53template<
typename NewDimensions,
typename XprType>
83template<
typename NewDimensions,
typename ArgType,
typename Device>
110#if defined(EIGEN_HAS_INDEX_LIST)
112 : (NumOutputDims == 2 &&
internal::index_statically_eq<NewDimensions>(1, 1)) ?
NByOne
126 NumInputDims > 0 && NumOutputDims > 0,
146 : m_impl(op.expression(), device), m_dimensions(op.
dimensions())
155#ifdef EIGEN_USE_THREADS
156 template <
typename EvalSubExprsCallback>
159 m_impl.evalSubExprsIfNeededAsync(
data, std::move(done));
164 return m_impl.evalSubExprsIfNeeded(
data);
172 return m_impl.coeff(index);
175 template<
int LoadMode>
178 return m_impl.template packet<LoadMode>(index);
182 return m_impl.costPerCoeff(vectorized);
192 struct BlockIteratorState {
201 bool =
false)
const {
204 (kind == OneByN && desc.dimensions()[0] == 1) ||
205 (kind ==
NByOne && desc.dimensions()[1] == 1));
207 if (kind == OneByN || kind ==
NByOne) {
211 m_impl.data() + desc.offset(), desc.dimensions());
215 return TensorBlock::materialize(m_impl.data(), m_dimensions, desc,
226 #ifdef EIGEN_USE_SYCL
239template<
typename NewDimensions,
typename ArgType,
typename Device>
241 :
public TensorEvaluator<const TensorReshapingOp<NewDimensions, ArgType>, Device>
274 return this->m_impl.coeffRef(index);
280 this->m_impl.template writePacket<StoreMode>(index,
x);
283 template <
typename TensorBlock>
286 assert(this->m_impl.data() != NULL);
288 typedef typename TensorBlock::XprType TensorBlockExpr;
290 Scalar, TensorEvaluator::NumOutputDims, TensorBlockExpr,
Index>
293 TensorBlockAssign::Run(
294 TensorBlockAssign::target(desc.dimensions(),
296 this->m_impl.data(), desc.offset()),
310template<
typename StartIndices,
typename Sizes,
typename XprType>
316 typedef typename XprTraits::Index
Index;
320 static const int Layout = XprTraits::Layout;
324template<
typename StartIndices,
typename Sizes,
typename XprType>
330template<
typename StartIndices,
typename Sizes,
typename XprType>
340template<
typename StartIndices,
typename Sizes,
typename XprType>
374template <
typename Index,
typename Device,
bool BlockAccess>
struct MemcpyTriggerForSlicing {
375 EIGEN_DEVICE_FUNC MemcpyTriggerForSlicing(
const Device& device) : threshold_(2 * device.numThreads()) { }
377 const bool prefer_block_evaluation = BlockAccess && total > 32*1024;
378 return !prefer_block_evaluation && contiguous > threshold_;
388template <
typename Index,
bool BlockAccess>
struct MemcpyTriggerForSlicing<
Index, GpuDevice, BlockAccess> {
397template <
typename Index,
bool BlockAccess>
struct MemcpyTriggerForSlicing<
Index,
Eigen::SyclDevice, BlockAccess> {
406template<
typename StartIndices,
typename Sizes,
typename ArgType,
typename Device>
447 : m_impl(op.expression(), device),
m_device(device), m_dimensions(op.
sizes()), m_offsets(op.startIndices())
449 m_is_identity =
true;
450 for (
int i = 0; i < internal::array_size<Dimensions>::value; ++
i) {
453 if (m_impl.dimensions()[
i] != op.
sizes()[
i] ||
455 m_is_identity =
false;
460 if (NumDims == 0)
return;
465 m_inputStrides[0] = 1;
466 for (
int i = 1;
i < NumDims; ++
i) {
467 m_inputStrides[
i] = m_inputStrides[
i-1] * input_dims[
i-1];
471 m_outputStrides[0] = 1;
472 for (
int i = 1;
i < NumDims; ++
i) {
473 m_outputStrides[
i] = m_outputStrides[
i-1] * output_dims[
i-1];
477 m_inputStrides[NumDims-1] = 1;
478 for (
int i = NumDims - 2;
i >= 0; --
i) {
479 m_inputStrides[
i] = m_inputStrides[
i+1] * input_dims[
i+1];
483 m_outputStrides[NumDims-1] = 1;
484 for (
int i = NumDims - 2;
i >= 0; --
i) {
485 m_outputStrides[
i] = m_outputStrides[
i+1] * output_dims[
i+1];
494 m_impl.evalSubExprsIfNeeded(NULL);
496 &&
data && m_impl.data()) {
497 Index contiguous_values = 1;
499 for (
int i = 0;
i < NumDims; ++
i) {
506 for (
int i = NumDims-1;
i >= 0; --
i) {
514 const MemcpyTriggerForSlicing<Index, Device, BlockAccess> trigger(
m_device);
527#ifdef EIGEN_USE_THREADS
528 template <
typename EvalSubExprsCallback>
531 m_impl.evalSubExprsIfNeededAsync(
nullptr, [done](
bool) { done(
true); });
542 return m_impl.coeff(index);
544 return m_impl.coeff(srcCoeff(index));
548 template<
int LoadMode>
556 return m_impl.template packet<LoadMode>(index);
559 Index inputIndices[] = {0, 0};
560 Index indices[] = {index, index + packetSize - 1};
563 for (
int i = NumDims - 1;
i > 0; --
i) {
564 const Index idx0 = indices[0] / m_fastOutputStrides[
i];
565 const Index idx1 = indices[1] / m_fastOutputStrides[
i];
566 inputIndices[0] += (idx0 + m_offsets[
i]) * m_inputStrides[
i];
567 inputIndices[1] += (idx1 + m_offsets[
i]) * m_inputStrides[
i];
568 indices[0] -= idx0 * m_outputStrides[
i];
569 indices[1] -= idx1 * m_outputStrides[
i];
571 inputIndices[0] += (indices[0] + m_offsets[0]);
572 inputIndices[1] += (indices[1] + m_offsets[0]);
575 for (
int i = 0;
i < NumDims - 1; ++
i) {
576 const Index idx0 = indices[0] / m_fastOutputStrides[
i];
577 const Index idx1 = indices[1] / m_fastOutputStrides[
i];
578 inputIndices[0] += (idx0 + m_offsets[
i]) * m_inputStrides[
i];
579 inputIndices[1] += (idx1 + m_offsets[
i]) * m_inputStrides[
i];
580 indices[0] -= idx0 * m_outputStrides[
i];
581 indices[1] -= idx1 * m_outputStrides[
i];
583 inputIndices[0] += (indices[0] + m_offsets[NumDims-1]);
584 inputIndices[1] += (indices[1] + m_offsets[NumDims-1]);
586 if (inputIndices[1] - inputIndices[0] == packetSize - 1) {
592 values[0] = m_impl.coeff(inputIndices[0]);
593 values[packetSize-1] = m_impl.coeff(inputIndices[1]);
595 for (
int i = 1;
i < packetSize-1; ++
i) {
604 return m_impl.costPerCoeff(vectorized) +
TensorOpCost(0, 0, m_is_identity ? 1 : NumDims);
609 const size_t target_size =
m_device.lastLevelCacheSize();
611 internal::TensorBlockResourceRequirements::skewed<Scalar>(target_size),
612 m_impl.getResourceRequirements());
617 bool =
false)
const {
629 for (
int i = 0;
i < NumDims; ++
i) {
630 if (m_dimensions[
i] != m_impl.dimensions()[
i]) {
631 offset += m_offsets[
i] * m_inputStrides[
i];
632 for (
int j =
i+1;
j < NumDims; ++
j) {
633 if (m_dimensions[
j] > 1) {
636 offset += m_offsets[
j] * m_inputStrides[
j];
642 for (
int i = NumDims - 1;
i >= 0; --
i) {
643 if (m_dimensions[
i] != m_impl.dimensions()[
i]) {
644 offset += m_offsets[
i] * m_inputStrides[
i];
645 for (
int j =
i-1;
j >= 0; --
j) {
646 if (m_dimensions[
j] > 1) {
649 offset += m_offsets[
j] * m_inputStrides[
j];
669 Index inputIndex = 0;
672 for (
int i = NumDims - 1;
i > 0; --
i) {
673 const Index idx = index / m_fastOutputStrides[
i];
674 inputIndex += (idx + m_offsets[
i]) * m_inputStrides[
i];
675 index -= idx * m_outputStrides[
i];
677 inputIndex += (index + m_offsets[0]);
680 for (
int i = 0;
i < NumDims - 1; ++
i) {
681 const Index idx = index / m_fastOutputStrides[
i];
682 inputIndex += (idx + m_offsets[
i]) * m_inputStrides[
i];
683 index -= idx * m_outputStrides[
i];
685 inputIndex += (index + m_offsets[NumDims-1]);
702template<
typename StartIndices,
typename Sizes,
typename ArgType,
typename Device>
704 :
public TensorEvaluator<const TensorSlicingOp<StartIndices, Sizes, ArgType>, Device>
739 if (this->m_is_identity) {
740 return this->m_impl.coeffRef(index);
742 return this->m_impl.coeffRef(this->srcCoeff(index));
749 if (this->m_is_identity) {
750 this->m_impl.template writePacket<StoreMode>(index,
x);
755 Index inputIndices[] = {0, 0};
756 Index indices[] = {index, index + packetSize - 1};
759 for (
int i = NumDims - 1;
i > 0; --
i) {
760 const Index idx0 = indices[0] / this->m_fastOutputStrides[
i];
761 const Index idx1 = indices[1] / this->m_fastOutputStrides[
i];
762 inputIndices[0] += (idx0 + this->m_offsets[
i]) * this->m_inputStrides[
i];
763 inputIndices[1] += (idx1 + this->m_offsets[
i]) * this->m_inputStrides[
i];
764 indices[0] -= idx0 * this->m_outputStrides[
i];
765 indices[1] -= idx1 * this->m_outputStrides[
i];
767 inputIndices[0] += (indices[0] + this->m_offsets[0]);
768 inputIndices[1] += (indices[1] + this->m_offsets[0]);
771 for (
int i = 0;
i < NumDims - 1; ++
i) {
772 const Index idx0 = indices[0] / this->m_fastOutputStrides[
i];
773 const Index idx1 = indices[1] / this->m_fastOutputStrides[
i];
774 inputIndices[0] += (idx0 + this->m_offsets[
i]) * this->m_inputStrides[
i];
775 inputIndices[1] += (idx1 + this->m_offsets[
i]) * this->m_inputStrides[
i];
776 indices[0] -= idx0 * this->m_outputStrides[
i];
777 indices[1] -= idx1 * this->m_outputStrides[
i];
779 inputIndices[0] += (indices[0] + this->m_offsets[NumDims-1]);
780 inputIndices[1] += (indices[1] + this->m_offsets[NumDims-1]);
782 if (inputIndices[1] - inputIndices[0] == packetSize - 1) {
783 this->m_impl.template writePacket<StoreMode>(inputIndices[0],
x);
788 this->m_impl.coeffRef(inputIndices[0]) = values[0];
789 this->m_impl.coeffRef(inputIndices[1]) = values[packetSize-1];
791 for (
int i = 1;
i < packetSize-1; ++
i) {
797 template<
typename TensorBlock>
801 this->m_impl.writeBlock(arg_desc,
block);
806template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename XprType>
812 typedef typename XprTraits::Index
Index;
816 static const int Layout = XprTraits::Layout;
820template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename XprType>
826template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename XprType>
835template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename XprType>
873template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename ArgType,
typename Device>
902 : m_impl(op.expression(), device),
904 m_strides(op.strides())
908 for (ptrdiff_t
i = 0; i < internal::array_size<Dimensions>::value; ++
i) {
910 if (m_strides[
i] > 0) {
911 startIndicesClamped[
i] =
913 stopIndicesClamped[
i] =
917 startIndicesClamped[
i] =
919 stopIndicesClamped[
i] =
922 m_startIndices[
i] = startIndicesClamped[
i];
926 const InputDimensions& input_dims = m_impl.dimensions();
929 m_is_identity =
true;
930 for (
int i = 0;
i < NumDims;
i++) {
931 Index interval = stopIndicesClamped[
i] - startIndicesClamped[
i];
932 if (interval == 0 || ((interval < 0) != (m_strides[
i] < 0))) {
936 (interval / m_strides[
i]) + (interval % m_strides[
i] != 0 ? 1 : 0);
939 if (m_strides[
i] != 1 || interval != m_impl.dimensions()[
i]) {
940 m_is_identity =
false;
944 Strides output_dims = m_dimensions;
947 m_inputStrides[0] = m_strides[0];
948 m_offsets[0] = startIndicesClamped[0];
949 Index previousDimProduct = 1;
950 for (
int i = 1;
i < NumDims; ++
i) {
951 previousDimProduct *= input_dims[
i-1];
952 m_inputStrides[
i] = previousDimProduct * m_strides[
i];
953 m_offsets[
i] = startIndicesClamped[
i] * previousDimProduct;
957 m_outputStrides[0] = 1;
958 for (
int i = 1;
i < NumDims; ++
i) {
959 m_outputStrides[
i] = m_outputStrides[
i-1] * output_dims[
i-1];
963 m_inputStrides[NumDims-1] = m_strides[NumDims-1];
964 m_offsets[NumDims-1] = startIndicesClamped[NumDims-1];
965 Index previousDimProduct = 1;
966 for (
int i = NumDims - 2;
i >= 0; --
i) {
967 previousDimProduct *= input_dims[
i+1];
968 m_inputStrides[
i] = previousDimProduct * m_strides[
i];
969 m_offsets[
i] = startIndicesClamped[
i] * previousDimProduct;
972 m_outputStrides[NumDims-1] = 1;
973 for (
int i = NumDims - 2;
i >= 0; --
i) {
974 m_outputStrides[
i] = m_outputStrides[
i+1] * output_dims[
i+1];
984 m_impl.evalSubExprsIfNeeded(NULL);
995 return m_impl.coeff(index);
997 return m_impl.coeff(srcCoeff(index));
1002 return m_impl.costPerCoeff(vectorized) +
TensorOpCost(0, 0, m_is_identity ? 1 : NumDims);
1008#ifdef EIGEN_USE_SYCL
1017 Index inputIndex = 0;
1020 for (
int i = NumDims - 1;
i >= 0; --
i) {
1021 const Index idx = index / m_fastOutputStrides[
i];
1022 inputIndex += idx * m_inputStrides[
i] + m_offsets[
i];
1023 index -= idx * m_outputStrides[
i];
1027 for (
int i = 0;
i < NumDims; ++
i) {
1028 const Index idx = index / m_fastOutputStrides[
i];
1029 inputIndex += idx * m_inputStrides[
i] + m_offsets[
i];
1030 index -= idx * m_outputStrides[
i];
1037#ifndef SYCL_DEVICE_ONLY
1040 return cl::sycl::clamp(value,
min,
max);
1057template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename ArgType,
typename Device>
1059 :
public TensorEvaluator<const TensorStridingSlicingOp<StartIndices, StopIndices, Strides, ArgType>, Device>
1091 if (this->m_is_identity) {
1092 return this->m_impl.coeffRef(index);
1094 return this->m_impl.coeffRef(this->srcCoeff(index));
int i
Definition BiCGSTAB_step_by_step.cpp:9
internal::enable_if< internal::valid_indexed_view_overload< RowIndices, ColIndices >::value &&internal::traits< typenameEIGEN_INDEXED_VIEW_METHOD_TYPE< RowIndices, ColIndices >::type >::ReturnAsIndexedView, typenameEIGEN_INDEXED_VIEW_METHOD_TYPE< RowIndices, ColIndices >::type >::type operator()(const RowIndices &rowIndices, const ColIndices &colIndices) EIGEN_INDEXED_VIEW_METHOD_CONST
Definition IndexedViewMethods.h:73
#define EIGEN_UNROLL_LOOP
Definition Macros.h:1461
#define EIGEN_DEVICE_FUNC
Definition Macros.h:976
#define eigen_assert(x)
Definition Macros.h:1037
#define EIGEN_STRONG_INLINE
Definition Macros.h:917
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
Definition StaticAssert.h:127
#define EIGEN_TENSOR_INHERIT_ASSIGNMENT_OPERATORS(Derived)
Definition TensorMacros.h:94
#define EIGEN_DEVICE_REF
Definition TensorMacros.h:50
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition CwiseBinaryOp.h:84
The tensor base class.
Definition TensorBase.h:973
Definition TensorCostModel.h:25
Definition TensorMorphing.h:55
Eigen::internal::nested< TensorReshapingOp >::type Nested
Definition TensorMorphing.h:60
Eigen::internal::traits< TensorReshapingOp >::Scalar Scalar
Definition TensorMorphing.h:58
EIGEN_DEVICE_FUNC const internal::remove_all< typenameXprType::Nested >::type & expression() const
Definition TensorMorphing.h:72
TensorBase< TensorReshapingOp< NewDimensions, XprType >, WriteAccessors > Base
Definition TensorMorphing.h:57
const NewDimensions m_dims
Definition TensorMorphing.h:78
EIGEN_DEVICE_FUNC const NewDimensions & dimensions() const
Definition TensorMorphing.h:68
Eigen::internal::traits< TensorReshapingOp >::StorageKind StorageKind
Definition TensorMorphing.h:61
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorReshapingOp(const XprType &expr, const NewDimensions &dims)
Definition TensorMorphing.h:64
internal::remove_const< typenameXprType::CoeffReturnType >::type CoeffReturnType
Definition TensorMorphing.h:59
XprType::Nested m_xpr
Definition TensorMorphing.h:77
Eigen::internal::traits< TensorReshapingOp >::Index Index
Definition TensorMorphing.h:62
Definition TensorMorphing.h:342
EIGEN_DEVICE_FUNC const StartIndices & startIndices() const
Definition TensorMorphing.h:355
XprType::Nested m_xpr
Definition TensorMorphing.h:366
XprType::CoeffReturnType CoeffReturnType
Definition TensorMorphing.h:346
TensorBase< TensorSlicingOp< StartIndices, Sizes, XprType > > Base
Definition TensorMorphing.h:344
const Sizes m_sizes
Definition TensorMorphing.h:368
Eigen::internal::traits< TensorSlicingOp >::Scalar Scalar
Definition TensorMorphing.h:345
EIGEN_DEVICE_FUNC const Sizes & sizes() const
Definition TensorMorphing.h:357
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorSlicingOp(const XprType &expr, const StartIndices &indices, const Sizes &sizes)
Definition TensorMorphing.h:351
Eigen::internal::traits< TensorSlicingOp >::Index Index
Definition TensorMorphing.h:349
EIGEN_DEVICE_FUNC const internal::remove_all< typenameXprType::Nested >::type & expression() const
Definition TensorMorphing.h:361
Eigen::internal::traits< TensorSlicingOp >::StorageKind StorageKind
Definition TensorMorphing.h:348
const StartIndices m_indices
Definition TensorMorphing.h:367
Eigen::internal::nested< TensorSlicingOp >::type Nested
Definition TensorMorphing.h:347
Definition TensorMorphing.h:837
internal::traits< TensorStridingSlicingOp >::Scalar Scalar
Definition TensorMorphing.h:840
internal::traits< TensorStridingSlicingOp >::Index Index
Definition TensorMorphing.h:844
EIGEN_DEVICE_FUNC const StartIndices & startIndices() const
Definition TensorMorphing.h:853
EIGEN_DEVICE_FUNC const StartIndices & stopIndices() const
Definition TensorMorphing.h:855
XprType::Nested m_xpr
Definition TensorMorphing.h:866
internal::traits< TensorStridingSlicingOp >::StorageKind StorageKind
Definition TensorMorphing.h:843
const StartIndices m_startIndices
Definition TensorMorphing.h:867
EIGEN_DEVICE_FUNC const StartIndices & strides() const
Definition TensorMorphing.h:857
internal::nested< TensorStridingSlicingOp >::type Nested
Definition TensorMorphing.h:842
XprType::CoeffReturnType CoeffReturnType
Definition TensorMorphing.h:841
TensorBase< TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType > > Base
Definition TensorMorphing.h:839
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorStridingSlicingOp(const XprType &expr, const StartIndices &startIndices, const StopIndices &stopIndices, const Strides &strides)
Definition TensorMorphing.h:846
EIGEN_DEVICE_FUNC const internal::remove_all< typenameXprType::Nested >::type & expression() const
Definition TensorMorphing.h:861
const StopIndices m_stopIndices
Definition TensorMorphing.h:868
const Strides m_strides
Definition TensorMorphing.h:869
Definition EmulateArray.h:21
Definition TensorBlock.h:1381
TensorBlockDescriptor WithOffset(IndexType offset) const
Definition TensorBlock.h:331
IndexType offset() const
Definition TensorBlock.h:298
bool HasDestinationBuffer() const
Definition TensorBlock.h:326
TensorBlockDescriptor & DropDestinationBuffer()
Definition TensorBlock.h:320
Definition TensorBlock.h:617
Definition TensorRef.h:81
Definition TensorBlock.h:656
Eigen::IndexList< Index, Eigen::type2index< 1 > > NByOne(Index n)
Definition cxx11_tensor_block_eval.cpp:107
#define min(a, b)
Definition datatypes.h:19
#define max(a, b)
Definition datatypes.h:20
std::vector< Array2i > sizes
Definition dense_solvers.cpp:12
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
Definition gnuplot_common_settings.hh:12
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 y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set set xzeroaxis lt lw set x2zeroaxis lt lw set yzeroaxis lt lw set y2zeroaxis lt lw set tics in set ticslevel set tics set mxtics default set mytics default set mx2tics default set my2tics default set xtics border mirror norotate autofreq set ytics border mirror norotate autofreq set ztics border nomirror norotate autofreq set nox2tics set noy2tics set timestamp bottom norotate offset
Definition gnuplot_common_settings.hh:64
@ WriteAccessors
Definition Constants.h:378
@ ColMajor
Definition Constants.h:319
@ kView
Definition TensorBlock.h:596
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_prod(const Sizes< Indices... > &)
Definition TensorDimensions.h:140
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition MathFunctions.h:1091
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
Definition MathFunctions.h:1083
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T * constCast(const T *data)
Definition TensorForwardDeclarations.h:27
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
Definition BandTriangularSolver.h:13
Definition TensorDimensions.h:263
Definition Constants.h:507
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition NumTraits.h:233
Definition TensorMeta.h:50
Definition TensorDimensions.h:93
Definition TensorForwardDeclarations.h:37
PacketType< CoeffReturnType, Device >::type PacketReturnType
Definition TensorMorphing.h:265
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writePacket(Index index, const PacketReturnType &x)
Definition TensorMorphing.h:278
XprType::Scalar Scalar
Definition TensorMorphing.h:263
TensorEvaluator< const TensorReshapingOp< NewDimensions, ArgType >, Device > Base
Definition TensorMorphing.h:244
TensorReshapingOp< NewDimensions, ArgType > XprType
Definition TensorMorphing.h:245
NewDimensions Dimensions
Definition TensorMorphing.h:246
XprType::CoeffReturnType CoeffReturnType
Definition TensorMorphing.h:264
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(Index index)
Definition TensorMorphing.h:272
internal::TensorBlockDescriptor< TensorEvaluator::NumOutputDims, Index > TensorBlockDesc
Definition TensorMorphing.h:269
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writeBlock(const TensorBlockDesc &desc, const TensorBlock &block)
Definition TensorMorphing.h:284
XprType::Index Index
Definition TensorMorphing.h:262
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
Definition TensorMorphing.h:258
XprType::Index Index
Definition TensorMorphing.h:710
XprType::CoeffReturnType CoeffReturnType
Definition TensorMorphing.h:712
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
Definition TensorMorphing.h:733
internal::remove_const< Scalar >::type ScalarNoConst
Definition TensorMorphing.h:726
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writeBlock(const TensorBlockDesc &desc, const TensorBlock &block)
Definition TensorMorphing.h:798
TensorSlicingOp< StartIndices, Sizes, ArgType > XprType
Definition TensorMorphing.h:707
TensorEvaluator< const TensorSlicingOp< StartIndices, Sizes, ArgType >, Device > Base
Definition TensorMorphing.h:706
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writePacket(Index index, const PacketReturnType &x)
Definition TensorMorphing.h:747
PacketType< CoeffReturnType, Device >::type PacketReturnType
Definition TensorMorphing.h:713
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
Definition TensorMorphing.h:730
Sizes Dimensions
Definition TensorMorphing.h:714
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(Index index)
Definition TensorMorphing.h:737
internal::TensorBlockDescriptor< NumDims, Index > TensorBlockDesc
Definition TensorMorphing.h:729
XprType::Scalar Scalar
Definition TensorMorphing.h:711
internal::TensorBlockNotImplemented TensorBlock
Definition TensorMorphing.h:1076
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(Index index)
Definition TensorMorphing.h:1089
XprType::Scalar Scalar
Definition TensorMorphing.h:1084
XprType::CoeffReturnType CoeffReturnType
Definition TensorMorphing.h:1085
TensorStridingSlicingOp< StartIndices, StopIndices, Strides, ArgType > XprType
Definition TensorMorphing.h:1062
Strides Dimensions
Definition TensorMorphing.h:1087
PacketType< CoeffReturnType, Device >::type PacketReturnType
Definition TensorMorphing.h:1086
TensorEvaluator< const TensorStridingSlicingOp< StartIndices, StopIndices, Strides, ArgType >, Device > Base
Definition TensorMorphing.h:1061
XprType::Index Index
Definition TensorMorphing.h:1083
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
Definition TensorMorphing.h:1079
Definition TensorMorphing.h:85
TensorReshapingOp< NewDimensions, ArgType > XprType
Definition TensorMorphing.h:86
PacketType< CoeffReturnType, Device >::type PacketReturnType
Definition TensorMorphing.h:92
ReshapingKind
Definition TensorMorphing.h:100
NewDimensions Dimensions
Definition TensorMorphing.h:87
EIGEN_DEVICE_FUNC Storage::Type data() const
Definition TensorMorphing.h:220
EIGEN_DEVICE_FUNC const TensorEvaluator< ArgType, Device > & impl() const
Definition TensorMorphing.h:224
NewDimensions m_dimensions
Definition TensorMorphing.h:234
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
Definition TensorMorphing.h:145
StorageMemory< typename internal::remove_const< CoeffReturnType >::type, Device > ConstCastStorage
Definition TensorMorphing.h:95
Storage::Type EvaluatorPointerType
Definition TensorMorphing.h:94
TensorEvaluator< ArgType, Device > m_impl
Definition TensorMorphing.h:233
internal::remove_const< Scalar >::type ScalarNoConst
Definition TensorMorphing.h:133
StorageMemory< CoeffReturnType, Device > Storage
Definition TensorMorphing.h:93
EIGEN_STRONG_INLINE void cleanup()
Definition TensorMorphing.h:166
internal::TensorBlockDescriptor< NumOutputDims, Index > TensorBlockDesc
Definition TensorMorphing.h:136
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
Definition TensorMorphing.h:176
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
Definition TensorMorphing.h:200
internal::TensorMaterializedBlock< ScalarNoConst, NumOutputDims, Layout, Index > TensorBlock
Definition TensorMorphing.h:142
XprType::Scalar Scalar
Definition TensorMorphing.h:90
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType data)
Definition TensorMorphing.h:163
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions & dimensions() const
Definition TensorMorphing.h:153
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
Definition TensorMorphing.h:170
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::TensorBlockResourceRequirements getResourceRequirements() const
Definition TensorMorphing.h:186
XprType::CoeffReturnType CoeffReturnType
Definition TensorMorphing.h:91
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
Definition TensorMorphing.h:181
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
Definition TensorMorphing.h:137
XprType::Index Index
Definition TensorMorphing.h:89
Index size
Definition TensorMorphing.h:195
Index span
Definition TensorMorphing.h:194
Index stride
Definition TensorMorphing.h:193
Index count
Definition TensorMorphing.h:196
Definition TensorMorphing.h:408
TensorEvaluator< ArgType, Device > m_impl
Definition TensorMorphing.h:693
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
Definition TensorMorphing.h:616
StorageMemory< typename internal::remove_const< CoeffReturnType >::type, Device > ConstCastStorage
Definition TensorMorphing.h:418
XprType::Index Index
Definition TensorMorphing.h:412
internal::TensorBlockDescriptor< NumDims, Index > TensorBlockDesc
Definition TensorMorphing.h:438
array< Index, NumDims > m_outputStrides
Definition TensorMorphing.h:690
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
Definition TensorMorphing.h:439
const Device EIGEN_DEVICE_REF m_device
Definition TensorMorphing.h:694
StorageMemory< CoeffReturnType, Device > Storage
Definition TensorMorphing.h:417
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
Definition TensorMorphing.h:446
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index srcCoeff(Index index) const
Definition TensorMorphing.h:667
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType data)
Definition TensorMorphing.h:493
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
Definition TensorMorphing.h:549
Sizes Dimensions
Definition TensorMorphing.h:416
internal::remove_const< Scalar >::type ScalarNoConst
Definition TensorMorphing.h:435
EIGEN_STRONG_INLINE void cleanup()
Definition TensorMorphing.h:535
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions & dimensions() const
Definition TensorMorphing.h:491
Dimensions m_dimensions
Definition TensorMorphing.h:695
XprType::CoeffReturnType CoeffReturnType
Definition TensorMorphing.h:414
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::TensorBlockResourceRequirements getResourceRequirements() const
Definition TensorMorphing.h:608
array< Index, NumDims > m_inputStrides
Definition TensorMorphing.h:692
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Storage::Type data() const
Definition TensorMorphing.h:624
XprType::Scalar Scalar
Definition TensorMorphing.h:413
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
Definition TensorMorphing.h:539
TensorEvaluator< constArgType, Device >::TensorBlock TensorBlock
Definition TensorMorphing.h:443
PacketType< CoeffReturnType, Device >::type PacketReturnType
Definition TensorMorphing.h:415
const StartIndices m_offsets
Definition TensorMorphing.h:697
bool m_is_identity
Definition TensorMorphing.h:696
TensorSlicingOp< StartIndices, Sizes, ArgType > XprType
Definition TensorMorphing.h:409
Storage::Type EvaluatorPointerType
Definition TensorMorphing.h:419
array< internal::TensorIntDivisor< Index >, NumDims > m_fastOutputStrides
Definition TensorMorphing.h:691
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
Definition TensorMorphing.h:603
Definition TensorMorphing.h:875
array< internal::TensorIntDivisor< Index >, NumDims > m_fastOutputStrides
Definition TensorMorphing.h:1045
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
Definition TensorMorphing.h:992
EIGEN_STRONG_INLINE void cleanup()
Definition TensorMorphing.h:988
TensorEvaluator< ArgType, Device > m_impl
Definition TensorMorphing.h:1048
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions & dimensions() const
Definition TensorMorphing.h:980
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index clamp(Index value, Index min, Index max)
Definition TensorMorphing.h:1036
XprType::CoeffReturnType CoeffReturnType
Definition TensorMorphing.h:880
StorageMemory< CoeffReturnType, Device > Storage
Definition TensorMorphing.h:882
PacketType< CoeffReturnType, Device >::type PacketReturnType
Definition TensorMorphing.h:881
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index srcCoeff(Index index) const
Definition TensorMorphing.h:1015
TensorStridingSlicingOp< StartIndices, StopIndices, Strides, ArgType > XprType
Definition TensorMorphing.h:876
array< Index, NumDims > m_outputStrides
Definition TensorMorphing.h:1044
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
Definition TensorMorphing.h:901
XprType::Index Index
Definition TensorMorphing.h:878
const Device EIGEN_DEVICE_REF m_device
Definition TensorMorphing.h:1049
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType)
Definition TensorMorphing.h:983
internal::TensorBlockNotImplemented TensorBlock
Definition TensorMorphing.h:898
DSizes< Index, NumDims > m_dimensions
Definition TensorMorphing.h:1051
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
Definition TensorMorphing.h:1001
XprType::Scalar Scalar
Definition TensorMorphing.h:879
Strides Dimensions
Definition TensorMorphing.h:884
Storage::Type EvaluatorPointerType
Definition TensorMorphing.h:883
bool m_is_identity
Definition TensorMorphing.h:1047
const Strides m_strides
Definition TensorMorphing.h:1053
DSizes< Index, NumDims > m_startIndices
Definition TensorMorphing.h:1050
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Storage::Type data() const
Definition TensorMorphing.h:1005
array< Index, NumDims > m_inputStrides
Definition TensorMorphing.h:1046
DSizes< Index, NumDims > m_offsets
Definition TensorMorphing.h:1052
A cost model used to limit the number of threads used for evaluating tensor expression.
Definition TensorEvaluator.h:29
Derived::Scalar Scalar
Definition TensorEvaluator.h:31
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(Index index)
Definition TensorEvaluator.h:99
const Device EIGEN_DEVICE_REF m_device
Definition TensorEvaluator.h:192
Storage::Type EvaluatorPointerType
Definition TensorEvaluator.h:39
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions & dimensions() const
Definition TensorEvaluator.h:73
EIGEN_DEVICE_FUNC EvaluatorPointerType data() const
Definition TensorEvaluator.h:181
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
Definition TensorEvaluator.h:94
@ BlockAccess
Definition TensorEvaluator.h:48
@ PreferBlockAccess
Definition TensorEvaluator.h:49
@ PacketAccess
Definition TensorEvaluator.h:47
@ Layout
Definition TensorEvaluator.h:50
@ IsAligned
Definition TensorEvaluator.h:46
internal::TensorMaterializedBlock< ScalarNoConst, NumCoords, Layout, Index > TensorBlock
Definition TensorEvaluator.h:63
Derived::Dimensions Dimensions
Definition TensorEvaluator.h:34
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
Definition TensorEvaluator.h:158
internal::remove_const< Scalar >::type ScalarNoConst
Definition TensorEvaluator.h:55
Definition TensorBlock.h:75
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockResourceRequirements any()
Definition TensorBlock.h:155
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockResourceRequirements merge(const TensorBlockResourceRequirements &lhs, const TensorBlockResourceRequirements &rhs)
Definition TensorBlock.h:138
const TensorReshapingOp< NewDimensions, XprType > EIGEN_DEVICE_REF type
Definition TensorMorphing.h:40
const TensorSlicingOp< StartIndices, Sizes, XprType > EIGEN_DEVICE_REF type
Definition TensorMorphing.h:327
const TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType > EIGEN_DEVICE_REF type
Definition TensorMorphing.h:823
Definition XprHelper.h:332
TensorReshapingOp< NewDimensions, XprType > type
Definition TensorMorphing.h:46
TensorSlicingOp< StartIndices, Sizes, XprType > type
Definition TensorMorphing.h:333
TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType > type
Definition TensorMorphing.h:829
Definition TensorTraits.h:175
XprType::Scalar Scalar
Definition TensorMorphing.h:26
remove_reference< Nested >::type _Nested
Definition TensorMorphing.h:31
XprTraits::StorageKind StorageKind
Definition TensorMorphing.h:28
XprType::Nested Nested
Definition TensorMorphing.h:30
XprTraits::PointerType PointerType
Definition TensorMorphing.h:34
traits< XprType > XprTraits
Definition TensorMorphing.h:27
XprTraits::Index Index
Definition TensorMorphing.h:29
XprType::Scalar Scalar
Definition TensorMorphing.h:313
XprType::Nested Nested
Definition TensorMorphing.h:317
XprTraits::StorageKind StorageKind
Definition TensorMorphing.h:315
XprTraits::PointerType PointerType
Definition TensorMorphing.h:321
XprTraits::Index Index
Definition TensorMorphing.h:316
remove_reference< Nested >::type _Nested
Definition TensorMorphing.h:318
traits< XprType > XprTraits
Definition TensorMorphing.h:314
XprTraits::Index Index
Definition TensorMorphing.h:812
XprType::Nested Nested
Definition TensorMorphing.h:813
remove_reference< Nested >::type _Nested
Definition TensorMorphing.h:814
XprTraits::PointerType PointerType
Definition TensorMorphing.h:817
XprType::Scalar Scalar
Definition TensorMorphing.h:809
XprTraits::StorageKind StorageKind
Definition TensorMorphing.h:811
traits< XprType > XprTraits
Definition TensorMorphing.h:810
Definition ForwardDeclarations.h:17
std::ptrdiff_t j
Definition tut_arithmetic_redux_minmax.cpp:2