Represents a Tensor- a multidimensional array that can represent a multilinear map.
More...
#include <Tensor.hpp>
Public Types | |
| using | Opts = Options |
| using | Base = MemTensorLike< Tensor< T, Rank, Options >, T, Rank, Options > |
| using | ValueType = sp::remove_cvref_t< sp::remove_addrspace_t< T > > |
| using | Type = T |
| using | PtrType = typename Base::PtrType |
| using | ConstTensor = Tensor< const T, R, Options > |
| using | ThisT = Tensor< T, R, Options > |
| template<typename NewT > | |
| using | InValueType = Tensor< NewT, R, Options > |
Public Types inherited from sp::MemTensorLike< Tensor< T, R, sp::DefaultTensorOptions >, T, R, sp::DefaultTensorOptions > | |
| using | ThisType = MemTensorLike< Tensor< T, R, sp::DefaultTensorOptions >, T, TensorRank, sp::DefaultTensorOptions > |
| using | ValueType = sp::remove_cvref_t< sp::remove_addrspace_t< T > > |
| using | Type = T |
| using | Opts = sp::DefaultTensorOptions |
| using | Base = TensorLike< Tensor< T, R, sp::DefaultTensorOptions >, TensorRank > |
| using | InValueType = MemTensorLike< Tensor< T, R, sp::DefaultTensorOptions >, NewT, TensorRank, sp::DefaultTensorOptions > |
| using | PtrType = T * |
| The type of the data pointer. More... | |
Public Member Functions | |
| operator ConstTensor () const | |
| Tensor (PtrType data, const Vec< int, Rank > &sizes) | |
Create an R-dimensional packed Tensor of the given sizes. More... | |
| Tensor (PtrType data, const Vec< int, Rank > &sizes, const Vec< int, Rank > &strides) | |
Create an R-dimensional Tensor with given strides and sizes. More... | |
| template<typename U = T> | |
| Tensor (PtrType data, int size, typename std::enable_if< Rank==1 &&std::is_same< U, T >()>::type *=nullptr) | |
Construct a 1D packed Tensor of given size. More... | |
| template<typename U = T> | |
| Tensor (PtrType data, int size, int stride, typename std::enable_if< Rank==1 &&std::is_same< U, T >()>::type *=nullptr) | |
Construct a 1D packed Tensor with given size and stride. More... | |
| template<int Dummy = 0> | |
| auto | row (int n) |
| For a 2D tensor, get the nth row as a 1D tensor. More... | |
| template<int Dummy = 0> | |
| auto | rows (int start, int n) |
| template<int Dummy = 0> | |
| auto | col (int n) |
| template<int Dummy = 0> | |
| auto | cols (int start, int n) |
Public Member Functions inherited from sp::MemTensorLike< Tensor< T, R, sp::DefaultTensorOptions >, T, R, sp::DefaultTensorOptions > | |
| auto | getSizes () const |
| void | setSizes (sp::Vec< int, Rank > sz) |
| auto & | getSize (int n) |
| const auto & | getSize (int n) const |
| auto | getStrides () const |
| void | setStrides (sp::Vec< int, getNumStrides()> sz) |
| auto & | getStride (int n) |
| const auto & | getStride (int n) const |
| auto & | getTotalSize () |
| const auto & | getTotalSize () const |
| auto & | sizeQuantisation () |
| const auto & | sizeQuantisation () const |
| void | setDefaultSizeQuantisation () |
| sp::Vec< int, Rank > | getDimsWithPadding () |
| void | validateFields () |
| void | computeStrides () |
| Compute strides in the default way. More... | |
| int | totalSizeImpl () const |
Get the total memory occupied by the Tensor, in terms of elements. More... | |
| sp::Vec< int, Rank > | stridesImpl () const |
| Default implementation of the stride-getter. More... | |
| sp::Vec< int, Rank > | strides () const |
| int | stride (int i) const |
| MemTensorLike (PtrType ptr, const Vec< int, Rank > &sizes) | |
Create a Tensor. More... | |
| MemTensorLike (PtrType ptr, const Vec< int, Rank > &sizes, const Vec< int, Rank > &strides) | |
Create a Tensor with specified strides. More... | |
| int | computeOffsetImpl (const Vec< int, Rank > &pos) const |
| Calculate the offset from the start of the buffer that a particular element can be found at. More... | |
| int | computeOffset (const Vec< int, Rank > &pos) const |
| const PtrType | ptr (const Vec< int, Rank > &pos) const |
| Get a pointer to a particular element. More... | |
| PtrType | ptr (const Vec< int, Rank > &pos) |
| const PtrType | ptr () const |
| Get a pointer to the start of the underlying buffer. More... | |
| PtrType | ptr () |
| auto | begin () const |
| auto | end () const |
| auto | getViewImpl (const sp::Vec< int, Rank > &start, const sp::Vec< int, Rank > &size) |
| Create a view into this Tensor using identical striding. More... | |
| auto & | operator[] (int idx) |
| Handy 1D subscript operator. More... | |
| const auto & | operator[] (int idx) const |
| void | setSizeQuantisation (int x) |
| Set the size quantisation for the bounds checks. More... | |
Public Member Functions inherited from sp::TensorLike< Subclass, TensorRank > | |
| auto | dims () const |
| bool | boundsCheck (const Vec< int, Rank > &pos) const |
| template<int L, CacheMode Mode = CacheMode::DEFAULT> | |
| auto | vectorRead (const Vec< int, Rank > &pos) const |
| template<int L, CacheMode Mode = CacheMode::DEFAULT> | |
| auto | vectorOffsetRead (const Vec< int, Rank > &base, const Vec< int, Rank > &offset) const |
| template<int L, CacheMode Mode = CacheMode::DEFAULT> | |
| auto | maskedVectorRead (const Vec< int, Rank > &pos) const |
| template<int L, CacheMode Mode = CacheMode::DEFAULT, typename T > | |
| void | vectorWrite (const Vec< int, Rank > &pos, const Vec< T, L > &values) |
| template<int L, CacheMode Mode = CacheMode::DEFAULT, typename T > | |
| void | maskedVectorWrite (const Vec< int, Rank > &pos, const Vec< T, L > &values) |
| int | sizeQuantisation () const |
| int | totalSize () const |
Get the total memory occupied by the Tensor, in terms of elements. More... | |
| auto | getView (const sp::Vec< int, Rank > &start, const sp::Vec< int, Rank > &size) |
| Get an object that represents (and aliases) a portion of this object. More... | |
| int | dim (int d) const |
| Behaviour common to all TensorLikes ///. More... | |
| template<CacheMode Mode = CacheMode::DEFAULT> | |
| auto | read (const Vec< int, Rank > &pos) const |
| Get the element at a given position. More... | |
| template<CacheMode Mode = CacheMode::DEFAULT, typename T > | |
| void | write (const Vec< int, Rank > &pos, const T &value) |
| Set a single element. More... | |
| template<int Dummy = 0> | |
| int | size () const |
| template<int L> | |
| void | boundsCheckAccess (Vec< int, Rank > pos) const |
Bounds-check an L-element vector read at pos. More... | |
Static Public Attributes | |
| static constexpr int | Rank = R |
| static constexpr int | MaxVectorSize = (Opts::Pitched && Opts::Packedness != PackMode::NONE) ? sp::getMaxGMemVectorSize<T>() : 1 |
Static Public Attributes inherited from sp::MemTensorLike< Tensor< T, R, sp::DefaultTensorOptions >, T, R, sp::DefaultTensorOptions > | |
| static constexpr int | Rank |
| static constexpr bool | AllowVectorMemoryOps |
An overrideable flag to indicate if a concrete MemTensorLike subclass supports vector memory operations. More... | |
| static constexpr int | NumStrides |
| The number of strides to explicitly store. More... | |
| static constexpr int | ImplicitStrides |
| The number of strides that are not stored. More... | |
| constexpr static bool | HasTotalSize |
Static Public Attributes inherited from sp::TensorLike< Subclass, TensorRank > | |
| constexpr static int | Rank = TensorRank |
Additional Inherited Members | |
Static Public Member Functions inherited from sp::MemTensorLike< Tensor< T, R, sp::DefaultTensorOptions >, T, R, sp::DefaultTensorOptions > | |
| static constexpr int | calculateNumStrides () |
Compute the default value for NumStrides. More... | |
Public Attributes inherited from sp::MemTensorLike< Tensor< T, R, sp::DefaultTensorOptions >, T, R, sp::DefaultTensorOptions > | |
| friend | Base |
| PtrType | dataPtr |
| sp::Vec< int, Rank+getNumStrides()+HasTotalSize+AssertionsEnabled > | variousIntegers |
Protected Member Functions inherited from sp::MemTensorLike< Tensor< T, R, sp::DefaultTensorOptions >, T, R, sp::DefaultTensorOptions > | |
| sp::Vec< int, Rank > | dimsImpl () const |
| int | sizeQuantisationImpl () const |
| Vec< ValueType, L > | vectorReadImpl (const Vec< int, Rank > &pos) const |
| This will yield a vector load instruction if the alignment permits. More... | |
| void | vectorWriteImpl (const Vec< int, Rank > &pos, const Vec< ValueType, L > &values) |
Protected Member Functions inherited from sp::TensorLike< Subclass, TensorRank > | |
| template<typename Dummy = void*> | |
| auto | dimsImpl () const |
Get an sp::Vec<int, X> representing the dimensions of the object. More... | |
| bool | boundsCheckImpl (const sp::Vec< int, Rank > &) const |
| Return true iff the given coordinates are inside the object (Default implementation below) More... | |
| int | sizeQuantisationImpl () const |
| The last dimension is rounded up to the next multiple of this value for the purposes of bounds checks. More... | |
| template<int L, CacheMode Mode = CacheMode::DEFAULT> | |
| auto | vectorReadImpl (const Vec< int, Rank > &) const |
| Read L elements, adjacent in the last dimension, starting at the given position. More... | |
| template<int L, CacheMode Mode = CacheMode::DEFAULT> | |
| auto | vectorOffsetReadImpl (const Vec< int, Rank > &base, const Vec< int, Rank > &offset) const |
Read L elements, adjacent in the last dimension, from position base + offset. More... | |
| template<int L, CacheMode Mode = CacheMode::DEFAULT> | |
| auto | maskedVectorReadImpl (const Vec< int, Rank > &pos) const |
| Do a vectorRead that copes with the possibility of part of the vector being out of bounds. More... | |
| template<int L, CacheMode Mode = CacheMode::DEFAULT, typename T > | |
| void | maskedVectorWriteImpl (const Vec< int, Rank > &pos, const Vec< T, L > &values) |
| Do a vectorWrite that copes with the possibility of part of the vector being out of bounds. More... | |
| template<int L, CacheMode Mode, typename T > | |
| void | vectorWriteImpl (const Vec< int, Rank > &pos, const Vec< T, L > &values) |
| Write L elements, adjacent in the last dimension, starting at the given position. More... | |
| auto | getViewImpl (const sp::Vec< int, Rank > &start, const sp::Vec< int, Rank > &size) |
The default implementation just makes a TensorView. Not hugely fast, but always works. More... | |
Represents a Tensor- a multidimensional array that can represent a multilinear map.
Additionally carries optimization information- The default flags are the least optimising ones. Usually, users will run their arguments through sp::runSpecialised() at some point to have their Tensors replaced with the most optimised versions possible given their data layout. It is, however, more efficient (and saves binary size) if you explicitly set a more restrictive set of optimisation flags on your Tensor type right from the start, if you know that your input is guaranteed to satisfy the requirements.
| sp::Tensor< T, R, Options >::Tensor | ( | PtrType | data, |
| const Vec< int, Rank > & | sizes | ||
| ) |
Create an R-dimensional packed Tensor of the given sizes.
| sp::Tensor< T, R, Options >::Tensor | ( | PtrType | data, |
| const Vec< int, Rank > & | sizes, | ||
| const Vec< int, Rank > & | strides | ||
| ) |
Create an R-dimensional Tensor with given strides and sizes.
| sp::Tensor< T, R, Options >::Tensor | ( | PtrType | data, |
| int | size, | ||
| typename std::enable_if< Rank==1 &&std::is_same< U, T >()>::type * | = nullptr |
||
| ) |
Construct a 1D packed Tensor of given size.
| sp::Tensor< T, R, Options >::Tensor | ( | PtrType | data, |
| int | size, | ||
| int | stride, | ||
| typename std::enable_if< Rank==1 &&std::is_same< U, T >()>::type * | = nullptr |
||
| ) |
Construct a 1D packed Tensor with given size and stride.
| auto sp::Tensor< T, R, Options >::row | ( | int | n | ) |
For a 2D tensor, get the nth row as a 1D tensor.
Also compiles for a 1D tensor, but does nothing (assert-fails if n is not zero).