1#ifndef FUSED_PERMUTED_VIEW_H
2#define FUSED_PERMUTED_VIEW_H
10template <
typename Tensor, my_
size_t N>
20 : t_(t), layout_(t.layout_)
24 auto max_it = std::max_element(perm, perm +
NumDims);
25 auto min_it = std::min_element(perm, perm +
NumDims);
28 MyErrorHandler::error(
"Max value of permutation array is greater than the tensor's number of dimensions");
35 for (std::size_t i = 0; i <
NumDims; ++i)
38 layout_.
shape[i] = t_.getDim(perm[i]);
39 layout_.
stride[i] = t_.getStride(perm[i]);
51 template <
typename Output>
54 return t_.may_alias(output);
58 template <
typename... Indices>
59 requires(
sizeof...(Indices) ==
NumDims)
77 template <
typename T, my_
size_t Bits,
typename Arch>
87 return K::gather(t_.data_.data(), idxList);
100 return t_.getTotalSize();
109 std::string shape =
"(";
112 shape += std::to_string(
getDim(i));
static void error(const T &msg)
Definition error_handler.h:30
Definition permuted_view.h:12
static constexpr const my_size_t * Dim
Definition permuted_view.h:16
PermutedView(PermutedView &&)=delete
PermutedView(const Tensor &t, const my_size_t perm[NumDims])
Definition permuted_view.h:19
PermutedView & operator=(const PermutedView &)=delete
FORCE_INLINE constexpr my_size_t getNumDims() const noexcept
Definition permuted_view.h:90
static constexpr my_size_t NumDims
Definition permuted_view.h:15
PermutedView(const PermutedView &)=delete
FORCE_INLINE Microkernel< T, Bits, Arch >::VecType evalu(my_size_t flat) const noexcept
Definition permuted_view.h:78
FORCE_INLINE constexpr my_size_t getTotalSize() const noexcept
Definition permuted_view.h:97
std::string getShape() const
Definition permuted_view.h:107
PermutedView & operator=(PermutedView &&)=delete
FORCE_INLINE constexpr my_size_t getDim(my_size_t i) const
Definition permuted_view.h:92
static constexpr my_size_t TotalSize
Definition permuted_view.h:17
bool may_alias(const Output &output) const noexcept
Definition permuted_view.h:52
FORCE_INLINE const value_type & operator()(my_size_t(&indices)[NumDims]) const noexcept
Definition permuted_view.h:67
typename Tensor::value_type value_type
Definition permuted_view.h:14
FORCE_INLINE const value_type & operator()(const my_size_t *indices) const noexcept
Definition permuted_view.h:72
FORCE_INLINE const Tensor & transpose() const noexcept
Definition permuted_view.h:104
Global configuration for the tesseract tensor library.
#define my_size_t
Size/index type used throughout the library.
Definition config.h:126
#define FORCE_INLINE
Hint the compiler to always inline a function.
Definition config.h:26
Definition microkernel_base.h:16
T VecType
Definition microkernel_base.h:18
Definition strided_layout.h:9
FORCE_INLINE my_size_t getDim(my_size_t i) const
Definition strided_layout.h:33
FORCE_INLINE my_size_t computeOffsetFromFlat(my_size_t flat) const noexcept
Definition strided_layout.h:93
FORCE_INLINE my_size_t compute_flat_index(const my_size_t *indices) const
Definition strided_layout.h:77
my_size_t stride[NumberOfDims]
Definition strided_layout.h:11
my_size_t shape[NumberOfDims]
Definition strided_layout.h:10