A Tensor
that implements "broadcasting".
More...
#include <BroadcastingTensor.hpp>
Public Member Functions | |
void | overwriteStrides (sp::Vec< int, Rank > allocatedSize) |
Overwrite strides with with zero if they are broadcasting. More... | |
template<int L, CacheMode Mode = CacheMode::DEFAULT> | |
constexpr sp::Vec< T, L > | vectorReadImpl (const Vec< int, Rank > &pos) const |
BroadcastingTensor (PtrType data, const Vec< int, Rank > &logicalSize, const Vec< int, Rank > &allocatedSize) | |
Construct from a data pointer and sizes. More... | |
BroadcastingTensor (PtrType data, const Vec< int, Rank > &logicalSize, const Vec< int, Rank > &allocatedSize, const Vec< int, Rank > &strides) | |
Construct from a data pointer, sizes, and strides. More... | |
Public Member Functions inherited from sp::MemTensorLike< BroadcastingTensor< T, R, sp::DefaultTensorOptions, DefaultBroadcastTensorOptions >, 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 | NumStrides = std::max(Rank - 1, Base::calculateNumStrides()) |
Static Public Attributes inherited from sp::MemTensorLike< BroadcastingTensor< T, R, sp::DefaultTensorOptions, DefaultBroadcastTensorOptions >, 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 |
Protected Member Functions | |
sp::Vec< int, Rank > | stridesImpl () const |
Get the strides. More... | |
bool | boundsCheckImpl (const Vec< int, Rank > &pos) const |
Protected Member Functions inherited from sp::MemTensorLike< BroadcastingTensor< T, R, sp::DefaultTensorOptions, DefaultBroadcastTensorOptions >, 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... | |
Additional Inherited Members | |
Static Public Member Functions inherited from sp::MemTensorLike< BroadcastingTensor< T, R, sp::DefaultTensorOptions, DefaultBroadcastTensorOptions >, T, R, sp::DefaultTensorOptions > | |
static constexpr int | calculateNumStrides () |
Compute the default value for NumStrides . More... | |
Public Attributes inherited from sp::MemTensorLike< BroadcastingTensor< T, R, sp::DefaultTensorOptions, DefaultBroadcastTensorOptions >, T, R, sp::DefaultTensorOptions > | |
friend | Base |
PtrType | dataPtr |
sp::Vec< int, Rank+getNumStrides()+HasTotalSize+AssertionsEnabled > | variousIntegers |
A Tensor
that implements "broadcasting".
Such a tensor has a "logical" size and an "actual" size. Actual size is the real size of the underlying Tensor
in memory, and logical size is the size it pretends to be.
When actualSize[i] == 0
, the tensor behaves as if actualSize[i] == logicalSize[i]
, where the extra elements are created by copying the tensor repeatedly across the i'th dimension.
BroadcastOptions | Optimiser flags unique to BroadcastingTensor s. |
sp::BroadcastingTensor< T, R, Options, BroadcastOptions >::BroadcastingTensor | ( | PtrType | data, |
const Vec< int, Rank > & | logicalSize, | ||
const Vec< int, Rank > & | allocatedSize | ||
) |
Construct from a data pointer and sizes.
sp::BroadcastingTensor< T, R, Options, BroadcastOptions >::BroadcastingTensor | ( | PtrType | data, |
const Vec< int, Rank > & | logicalSize, | ||
const Vec< int, Rank > & | allocatedSize, | ||
const Vec< int, Rank > & | strides | ||
) |
Construct from a data pointer, sizes, and strides.
void sp::BroadcastingTensor< T, R, Options, BroadcastOptions >::overwriteStrides | ( | sp::Vec< int, Rank > | allocatedSize | ) |
Overwrite strides with with zero if they are broadcasting.
|
protected |
Get the strides.
This is just a hook for us to apply the constexpr zero to the last stride when appropriate. Otherwise, we're effectively just delegating to the base class.