18#ifndef __NNFW_CKER_HELPER_TENSOR_H__
19#define __NNFW_CKER_HELPER_TENSOR_H__
28template <
typename T,
int NDIMS = 1,
typename IndexType = Eigen::DenseIndex>
struct TTypes
31 typedef Eigen::TensorMap<Eigen::Tensor<T, NDIMS, Eigen::RowMajor, IndexType>, Eigen::Aligned>
33 typedef Eigen::TensorMap<Eigen::Tensor<const T, NDIMS, Eigen::RowMajor, IndexType>,
38 typedef Eigen::TensorMap<Eigen::Tensor<T, NDIMS, Eigen::RowMajor, IndexType>>
UnalignedTensor;
39 typedef Eigen::TensorMap<Eigen::Tensor<const T, NDIMS, Eigen::RowMajor, IndexType>>
42 typedef Eigen::TensorMap<Eigen::Tensor<T, NDIMS, Eigen::RowMajor, int>, Eigen::Aligned>
46 typedef Eigen::TensorMap<Eigen::TensorFixedSize<T, Eigen::Sizes<>, Eigen::RowMajor, IndexType>,
49 typedef Eigen::TensorMap<
50 Eigen::TensorFixedSize<const T, Eigen::Sizes<>, Eigen::RowMajor, IndexType>, Eigen::Aligned>
54 typedef Eigen::TensorMap<Eigen::TensorFixedSize<T, Eigen::Sizes<>, Eigen::RowMajor, IndexType>>
56 typedef Eigen::TensorMap<
57 Eigen::TensorFixedSize<const T, Eigen::Sizes<>, Eigen::RowMajor, IndexType>>
61 typedef Eigen::TensorMap<Eigen::Tensor<T, 1, Eigen::RowMajor, IndexType>, Eigen::Aligned>
Flat;
62 typedef Eigen::TensorMap<Eigen::Tensor<const T, 1, Eigen::RowMajor, IndexType>, Eigen::Aligned>
64 typedef Eigen::TensorMap<Eigen::Tensor<T, 1, Eigen::RowMajor, IndexType>, Eigen::Aligned>
Vec;
65 typedef Eigen::TensorMap<Eigen::Tensor<const T, 1, Eigen::RowMajor, IndexType>, Eigen::Aligned>
69 typedef Eigen::TensorMap<Eigen::Tensor<T, 1, Eigen::RowMajor, IndexType>>
UnalignedFlat;
70 typedef Eigen::TensorMap<Eigen::Tensor<const T, 1, Eigen::RowMajor, IndexType>>
72 typedef Eigen::TensorMap<Eigen::Tensor<T, 1, Eigen::RowMajor, IndexType>>
UnalignedVec;
73 typedef Eigen::TensorMap<Eigen::Tensor<const T, 1, Eigen::RowMajor, IndexType>>
UnalignedConstVec;
76 typedef Eigen::TensorMap<Eigen::Tensor<T, 2, Eigen::RowMajor, IndexType>, Eigen::Aligned>
Matrix;
77 typedef Eigen::TensorMap<Eigen::Tensor<const T, 2, Eigen::RowMajor, IndexType>, Eigen::Aligned>
81 typedef Eigen::TensorMap<Eigen::Tensor<T, 2, Eigen::RowMajor, IndexType>>
UnalignedMatrix;
82 typedef Eigen::TensorMap<Eigen::Tensor<const T, 2, Eigen::RowMajor, IndexType>>
106 this->buffer = other.
buffer;
111 template <
typename T> T *
base()
const
113 return buffer ==
nullptr ? nullptr :
reinterpret_cast<T *
>(
buffer);
116 template <
typename T,
size_t NDIMS>
119 Eigen::array<Eigen::DenseIndex, NDIMS> dims;
120 for (
size_t d = 0; d < NDIMS; d++)
122 dims[d] = new_sizes[d];
129 template <
typename T,
size_t NDIMS>
132 Eigen::array<Eigen::DenseIndex, NDIMS> dims;
133 for (
size_t d = 0; d < NDIMS; d++)
135 dims[d] = new_sizes[d];
143 Eigen::array<Eigen::DenseIndex, NDIMS> dims;
144 for (
size_t d = 0; d < NDIMS; d++)
166template <
typename DSizes> Eigen::DSizes<Index32, DSizes::count>
To32BitDims(
const DSizes &in)
168 Eigen::DSizes<Index32, DSizes::count> out;
169 for (
int i = 0; i < DSizes::count; ++i)
176template <
typename TensorType>
181 return RetType(in.data(),
To32BitDims(in.dimensions()));
int32_t DimensionsCount() const
void ReplaceWith(int dimensions_count, const int32_t *dims_data)
int32_t Dims(int i) const
TTypes< typenameTensorType::Scalar, TensorType::NumIndices >::Tensor32Bit To32Bit(TensorType in)
TTypes< float, 1 >::Tensor32Bit::Index Index32
Eigen::DSizes< Index32, DSizes::count > To32BitDims(const DSizes &in)
Eigen::TensorMap< Eigen::Tensor< T, 1, Eigen::RowMajor, IndexType > > UnalignedFlat
Eigen::TensorMap< Eigen::TensorFixedSize< T, Eigen::Sizes<>, Eigen::RowMajor, IndexType > > UnalignedScalar
Eigen::TensorMap< Eigen::TensorFixedSize< const T, Eigen::Sizes<>, Eigen::RowMajor, IndexType >, Eigen::Aligned > ConstScalar
Eigen::TensorMap< Eigen::Tensor< const T, 1, Eigen::RowMajor, IndexType > > UnalignedConstVec
Eigen::TensorMap< Eigen::Tensor< const T, NDIMS, Eigen::RowMajor, IndexType > > UnalignedConstTensor
Eigen::TensorMap< Eigen::Tensor< const T, NDIMS, Eigen::RowMajor, IndexType >, Eigen::Aligned > ConstTensor
Eigen::TensorMap< Eigen::TensorFixedSize< const T, Eigen::Sizes<>, Eigen::RowMajor, IndexType > > UnalignedConstScalar
Eigen::TensorMap< Eigen::Tensor< T, NDIMS, Eigen::RowMajor, IndexType > > UnalignedTensor
Eigen::TensorMap< Eigen::Tensor< const T, 1, Eigen::RowMajor, IndexType >, Eigen::Aligned > ConstFlat
Eigen::TensorMap< Eigen::TensorFixedSize< T, Eigen::Sizes<>, Eigen::RowMajor, IndexType >, Eigen::Aligned > Scalar
Eigen::TensorMap< Eigen::Tensor< T, 2, Eigen::RowMajor, IndexType > > UnalignedMatrix
Eigen::TensorMap< Eigen::Tensor< const T, 1, Eigen::RowMajor, IndexType > > UnalignedConstFlat
Eigen::TensorMap< Eigen::Tensor< T, 1, Eigen::RowMajor, IndexType >, Eigen::Aligned > Flat
Eigen::TensorMap< Eigen::Tensor< T, NDIMS, Eigen::RowMajor, int >, Eigen::Aligned > Tensor32Bit
Eigen::TensorMap< Eigen::Tensor< T, 1, Eigen::RowMajor, IndexType > > UnalignedVec
Eigen::TensorMap< Eigen::Tensor< const T, 2, Eigen::RowMajor, IndexType > > UnalignedConstMatrix
Eigen::TensorMap< Eigen::Tensor< T, 1, Eigen::RowMajor, IndexType >, Eigen::Aligned > Vec
Eigen::TensorMap< Eigen::Tensor< T, 2, Eigen::RowMajor, IndexType >, Eigen::Aligned > Matrix
Eigen::TensorMap< Eigen::Tensor< T, NDIMS, Eigen::RowMajor, IndexType >, Eigen::Aligned > Tensor
Eigen::TensorMap< Eigen::Tensor< const T, 1, Eigen::RowMajor, IndexType >, Eigen::Aligned > ConstVec
Eigen::TensorMap< Eigen::Tensor< const T, 2, Eigen::RowMajor, IndexType >, Eigen::Aligned > ConstMatrix
TTypes< T, NDIMS >::Tensor shaped(const std::vector< int32_t > &new_sizes)
TTypes< T >::Matrix matrix()
TTypes< T >::ConstScalar scalar() const
TTypes< T, NDIMS >::Tensor shaped() const
bool copyFrom(const Tensor &other, const Shape &new_shape)
TTypes< T, NDIMS >::ConstTensor shaped(const std::vector< int32_t > new_sizes) const
TTypes< T >::ConstFlat flat() const