10 #ifndef EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_MAPPER_H
11 #define EIGEN_CXX11_TENSOR_TENSOR_CONTRACTION_MAPPER_H
27 template <
typename Tensor,
bool HasRawAccess,
template <
class>
class MakePointer_ =
MakePointer>
30 template <
typename Scalar,
typename Index,
int side,
typename Tensor,
typename nocontract_t,
typename contract_t,
31 int packet_size,
bool inner_dim_contiguous,
bool inner_dim_reordered,
int Alignment,
33 class BaseTensorContractionMapper;
35 template <
typename Tensor,
bool HasRawAccess,
template <
class>
class MakePointer_>
54 template <
int LoadMode>
56 return m_tensor.template packet<LoadMode>(index);
63 template <
typename Tensor,
template <
class>
class MakePointer_>
79 template <
int LoadMode>
81 return internal::ploadt_ro<typename Tensor::PacketReturnType, LoadMode>(m_data + index);
90 template <
typename Scalar,
typename Index,
int side,
typename Tensor,
typename nocontract_t,
typename contract_t,
91 int packet_size,
bool inner_dim_contiguous,
int Alignment,
template <
class>
class MakePointer_ =
MakePointer>
121 const bool left = (
side ==
Lhs);
132 if (
side ==
Lhs && inner_dim_contiguous) {
134 linidx += nocontract_val;
149 if (
side ==
Rhs && inner_dim_contiguous) {
151 linidx += contract_val;
161 const Index distance)
const {
162 const bool left = (
side ==
Lhs);
165 Index linidx[2] = {0, 0};
176 if (
side ==
Lhs && inner_dim_contiguous) {
178 linidx[0] += nocontract_val[0];
179 linidx[1] += nocontract_val[1];
198 if (
side ==
Rhs && inner_dim_contiguous) {
200 linidx[0] += contract_val[0];
201 linidx[1] += contract_val[1];
235 template <
typename Scalar,
typename Index,
int side,
typename Tensor,
typename nocontract_t,
typename contract_t,
236 int packet_size,
bool inner_dim_contiguous,
bool inner_dim_reordered,
int Alignment,
237 template <
class>
class MakePointer_>
240 inner_dim_contiguous, Alignment, MakePointer_> {
243 inner_dim_contiguous, Alignment, MakePointer_>
251 template <
typename PacketT,
int AlignmentType>
261 if (Tensor::PacketAccess && inner_dim_contiguous && !inner_dim_reordered) {
264 return this->
m_tensor.template packet<AlignmentType>(index);
276 (lastIdx - first) == (packet_size - 1)) {
277 return this->
m_tensor.template packet<AlignmentType>(first);
284 for (
Index k = 1;
k < packet_size - 1;
k += 2) {
291 return pload<PacketT>(
data);
294 template <
typename PacketT,
int AlignmentType>
306 for (
Index k = 1;
k < requested_packet_size - 1;
k += 2) {
311 data[requested_packet_size - 1] = this->
m_tensor.coeff(lastIdx);
313 return pload<PacketT>(
data);
316 template <
typename PacketT,
int AlignmentType>
318 return this->load<PacketT, AlignmentType>(
i,
j);
322 template <
typename Scalar,
typename Index,
int side,
typename Tensor,
typename nocontract_t,
typename contract_t,
323 bool inner_dim_contiguous,
bool inner_dim_reordered,
int Alignment,
template <
class>
class MakePointer_>
325 inner_dim_reordered, Alignment, MakePointer_>
327 inner_dim_contiguous, Alignment, MakePointer_> {
330 Alignment, MakePointer_>
338 template <
typename PacketT,
int>
342 return pload<PacketT>(
data);
344 template <
typename PacketT,
int>
348 return pload<PacketT>(
data);
352 template <
typename Scalar,
typename Index,
int side,
typename Tensor,
typename nocontract_t,
typename contract_t,
353 int packet_size,
bool inner_dim_contiguous,
bool inner_dim_reordered,
int Alignment,
358 inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_>
361 inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_>
396 template <
typename PacketT>
399 return m_base_mapper.template loadPacket<PacketT, Alignment>(
i, 0);
404 template <
typename PacketT>
412 template <
typename PacketT>
420 template <
typename PacketT,
int AlignmentType>
428 template <
typename PacketT>
452 template <
typename PacketT,
int AlignmentType>
457 return m_base_mapper.template loadPacket<PacketT, ActualAlignment>(
i, 0);
462 template <
typename PacketT>
477 template <
typename Scalar_,
typename Index,
int side,
typename Tensor,
typename nocontract_t,
typename contract_t,
478 int packet_size,
bool inner_dim_contiguous,
bool inner_dim_reordered,
int Alignment,
482 inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_> {
486 inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_>
489 inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_>
516 template <
typename T>
519 template <
typename Scalar_,
typename Index_,
int side_,
typename Tensor_,
typename nocontract_t_,
typename contract_t_,
520 int packet_size_,
bool inner_dim_contiguous_,
bool inner_dim_reordered_,
int Alignment_,
521 template <
class>
class MakePointer_>
524 inner_dim_contiguous_, inner_dim_reordered_, Alignment_, MakePointer_> > {
526 static const bool inner_dim_contiguous = inner_dim_contiguous_;
527 static const bool inner_dim_reordered = inner_dim_reordered_;
int i
Definition: BiCGSTAB_step_by_step.cpp:9
#define EIGEN_ALWAYS_INLINE
Definition: Macros.h:845
#define EIGEN_UNROLL_LOOP
Definition: Macros.h:1298
#define EIGEN_UNUSED_VARIABLE(var)
Definition: Macros.h:966
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
int data[]
Definition: Map_placement_new.cpp:1
#define EIGEN_STATIC_ASSERT(X, MSG)
Definition: StaticAssert.h:26
float * p
Definition: Tutorial_Map_using.cpp:9
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
The tensor class.
Definition: Tensor.h:68
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar & coeff(Index firstIndex, Index secondIndex, IndexTypes... otherIndices) const
Definition: Tensor.h:112
Scalar_ Scalar
Definition: Tensor.h:75
internal::traits< Self >::Index Index
Definition: Tensor.h:74
Eigen::internal::BaseTensorContractionMapper< Scalar, Index, side, Tensor, nocontract_t, contract_t, 1, inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_ >::ParentMapper SimpleTensorContractionMapper< Scalar, Index, side, Tensor, nocontract_t, contract_t, 1, inner_dim_contiguous, Alignment, MakePointer_ > ParentMapper
Definition: TensorContractionMapper.h:331
Eigen::internal::BaseTensorContractionMapper< Scalar, Index, side, Tensor, nocontract_t, contract_t, 1, inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_ >::load EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketT load(Index i, Index j) const
Definition: TensorContractionMapper.h:345
Eigen::internal::BaseTensorContractionMapper< Scalar, Index, side, Tensor, nocontract_t, contract_t, 1, inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_ >::loadPacket EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketT loadPacket(Index i, Index j) const
Definition: TensorContractionMapper.h:339
Eigen::internal::BaseTensorContractionMapper< Scalar, Index, side, Tensor, nocontract_t, contract_t, 1, inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_ >::BaseTensorContractionMapper EIGEN_DEVICE_FUNC BaseTensorContractionMapper(const Tensor &tensor, const nocontract_t &nocontract_strides, const nocontract_t &ij_strides, const contract_t &contract_strides, const contract_t &k_strides)
Definition: TensorContractionMapper.h:333
Definition: TensorContractionMapper.h:240
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::enable_if_t< internal::unpacket_traits< PacketT >::size !=packet_size, PacketT > load(Index i, Index j) const
Definition: TensorContractionMapper.h:297
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::enable_if_t< internal::unpacket_traits< PacketT >::size==packet_size, PacketT > load(Index i, Index j) const
Definition: TensorContractionMapper.h:254
EIGEN_DEVICE_FUNC BaseTensorContractionMapper(const Tensor &tensor, const nocontract_t &nocontract_strides, const nocontract_t &ij_strides, const contract_t &contract_strides, const contract_t &k_strides)
Definition: TensorContractionMapper.h:246
SimpleTensorContractionMapper< Scalar, Index, side, Tensor, nocontract_t, contract_t, packet_size, inner_dim_contiguous, Alignment, MakePointer_ > ParentMapper
Definition: TensorContractionMapper.h:244
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketT loadPacket(Index i, Index j) const
Definition: TensorContractionMapper.h:317
Definition: TensorContractionMapper.h:92
const contract_t m_k_strides
Definition: TensorContractionMapper.h:232
EIGEN_DEVICE_FUNC SimpleTensorContractionMapper(const Tensor &tensor, const nocontract_t &nocontract_strides, const nocontract_t &ij_strides, const contract_t &contract_strides, const contract_t &k_strides)
Definition: TensorContractionMapper.h:94
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index computeIndex(Index row, Index col) const
Definition: TensorContractionMapper.h:120
const nocontract_t & ij_strides() const
Definition: TensorContractionMapper.h:223
CoeffLoader< Tensor, Tensor::RawAccess, MakePointer_ > m_tensor
Definition: TensorContractionMapper.h:228
const nocontract_t m_nocontract_strides
Definition: TensorContractionMapper.h:229
const contract_t & contract_strides() const
Definition: TensorContractionMapper.h:224
const CoeffLoader< Tensor, Tensor::RawAccess, MakePointer_ > & tensor() const
Definition: TensorContractionMapper.h:220
const contract_t m_contract_strides
Definition: TensorContractionMapper.h:231
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Index firstAligned(Index size) const
Definition: TensorContractionMapper.h:210
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE IndexPair< Index > computeIndexPair(Index row, Index col, const Index distance) const
Definition: TensorContractionMapper.h:160
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Index stride() const
Definition: TensorContractionMapper.h:216
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(Index row, Index col) const
Definition: TensorContractionMapper.h:116
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(Index row) const
Definition: TensorContractionMapper.h:111
@ DirectOffsets
Definition: TensorContractionMapper.h:103
const contract_t & k_strides() const
Definition: TensorContractionMapper.h:225
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void offsetBuffer(typename Tensor::Index offset)
Definition: TensorContractionMapper.h:105
const nocontract_t m_ij_strides
Definition: TensorContractionMapper.h:230
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void prefetch(Index)
Definition: TensorContractionMapper.h:109
const nocontract_t & nocontract_strides() const
Definition: TensorContractionMapper.h:222
Definition: TensorContractionMapper.h:355
ParentMapper m_base_mapper
Definition: TensorContractionMapper.h:472
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketT loadPacketPartial(Index i, Index j, Index, Index=0) const
Definition: TensorContractionMapper.h:413
const Index m_vert_offset
Definition: TensorContractionMapper.h:473
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const Index stride() const
Definition: TensorContractionMapper.h:450
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketT loadPacket(Index i) const
Definition: TensorContractionMapper.h:397
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE LinearMapper getLinearMapper(Index i, Index j) const
Definition: TensorContractionMapper.h:436
BaseTensorContractionMapper< Scalar, Index, side, Tensor, nocontract_t, contract_t, packet_size, inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_ > ParentMapper
Definition: TensorContractionMapper.h:359
@ UseDirectOffsets
Definition: TensorContractionMapper.h:369
EIGEN_DEVICE_FUNC TensorContractionSubMapper(const ParentMapper &base_mapper, Index vert_offset, Index horiz_offset)
Definition: TensorContractionMapper.h:373
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketT loadPacket(Index i, Index j) const
Definition: TensorContractionMapper.h:421
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, const PacketT &p) const
Definition: TensorContractionMapper.h:429
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE SubMapper getSubMapper(Index i, Index j) const
Definition: TensorContractionMapper.h:443
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar operator()(Index i) const
Definition: TensorContractionMapper.h:383
Self SubMapper
Definition: TensorContractionMapper.h:364
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketT loadPacket(Index i, Index j) const
Definition: TensorContractionMapper.h:405
Index vert_offset() const
Definition: TensorContractionMapper.h:468
const ParentMapper & base_mapper() const
Definition: TensorContractionMapper.h:467
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketT load(Index i) const
Definition: TensorContractionMapper.h:453
TensorContractionSubMapper< Scalar, Index, side, Tensor, nocontract_t, contract_t, packet_size, inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_ > Self
Definition: TensorContractionMapper.h:362
Self LinearMapper
Definition: TensorContractionMapper.h:363
const Index m_horiz_offset
Definition: TensorContractionMapper.h:474
Index horiz_offset() const
Definition: TensorContractionMapper.h:469
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool aligned(Index) const
Definition: TensorContractionMapper.h:463
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar operator()(Index i, Index j) const
Definition: TensorContractionMapper.h:389
AlignmentType
Definition: Constants.h:234
@ Unaligned
Definition: Constants.h:235
@ Aligned
Definition: Constants.h:242
char char char int int * k
Definition: level2_impl.h:374
const char * side
Definition: level3_impl.h:101
@ Lhs
Definition: TensorContractionMapper.h:20
@ Rhs
Definition: TensorContractionMapper.h:20
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T loadConstant(const T *address)
Definition: TensorEvaluator.h:175
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
Definition: Eigen_Colamd.h:49
Type
Type of JSON value.
Definition: rapidjson.h:513
Definition: TensorMeta.h:238
Idx first
Definition: TensorMeta.h:247
Idx second
Definition: TensorMeta.h:248
Definition: TensorForwardDeclarations.h:25
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void offsetBuffer(typename Tensor::Index offset)
Definition: TensorContractionMapper.h:69
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const MakePointer_< const typename Tensor::Scalar >::Type data() const
Definition: TensorContractionMapper.h:71
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Tensor::Scalar coeff(typename Tensor::Index index) const
Definition: TensorContractionMapper.h:75
MakePointer_< const Scalar >::Type m_data
Definition: TensorContractionMapper.h:87
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE CoeffLoader(const Tensor &tensor)
Definition: TensorContractionMapper.h:67
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Tensor::PacketReturnType packet(typename Tensor::Index index) const
Definition: TensorContractionMapper.h:80
Tensor::Scalar Scalar
Definition: TensorContractionMapper.h:85
Definition: TensorContractionMapper.h:36
@ DirectOffsets
Definition: TensorContractionMapper.h:37
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const MakePointer_< const typename Tensor::Scalar >::Type data() const
Definition: TensorContractionMapper.h:45
const Tensor m_tensor
Definition: TensorContractionMapper.h:60
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE CoeffLoader(const Tensor &tensor)
Definition: TensorContractionMapper.h:39
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Tensor::Scalar coeff(typename Tensor::Index index) const
Definition: TensorContractionMapper.h:50
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Tensor::PacketReturnType packet(typename Tensor::Index index) const
Definition: TensorContractionMapper.h:55
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void offsetBuffer(typename Tensor::Index)
Definition: TensorContractionMapper.h:41
Definition: GenericPacketMath.h:134
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2