A tensor that implements the "output blending" concept common in public APIs. More...
#include <BlendingTensor.hpp>
Public Types | |
using | PtrType = typename Base::PtrType |
using | ValueType = std::remove_const_t< T > |
using | Opts = Options |
template<typename NewT > | |
using | InValueType = BlendingTensor< NewT, R, Options, BlendingOptions > |
Public Types inherited from sp::MemTensorLike< BlendingTensor< T, R, sp::DefaultTensorOptions, BlendingTensorOptions< T, T > >, T, R, sp::DefaultTensorOptions > | |
using | ThisType = MemTensorLike< BlendingTensor< T, R, sp::DefaultTensorOptions, BlendingTensorOptions< T, T > >, 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< BlendingTensor< T, R, sp::DefaultTensorOptions, BlendingTensorOptions< T, T > >, TensorRank > |
using | InValueType = MemTensorLike< BlendingTensor< T, R, sp::DefaultTensorOptions, BlendingTensorOptions< T, T > >, NewT, TensorRank, sp::DefaultTensorOptions > |
using | PtrType = T * |
The type of the data pointer. More... | |
Public Member Functions | |
BlendingTensor (const sp::Tensor< T, R, Options > &tensor, const sp::Scalar< AlphaKind > &alpha, const sp::Scalar< BetaKind > &beta) | |
Construct from a Tensor More... | |
BlendingTensor (PtrType data, const Vec< int, Rank > &size, const sp::Scalar< AlphaKind > &alpha, const sp::Scalar< BetaKind > &beta) | |
Construct from a pointer and some sizes. More... | |
BlendingTensor (PtrType data, const Vec< int, Rank > &size, const Vec< int, Rank > &strides, const sp::Scalar< AlphaKind > &alpha, const sp::Scalar< BetaKind > &beta) | |
Construct from a pointer, size, and strides. More... | |
Public Member Functions inherited from sp::MemTensorLike< BlendingTensor< T, R, sp::DefaultTensorOptions, BlendingTensorOptions< T, T > >, 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< BlendingTensor< T, R, sp::DefaultTensorOptions, BlendingTensorOptions< T, T > >, 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 | |
template<int L, CacheMode Mode> | |
void | vectorWriteImpl (const Vec< int, Rank > &pos, const Vec< T, L > &values) |
Protected Member Functions inherited from sp::MemTensorLike< BlendingTensor< T, R, sp::DefaultTensorOptions, BlendingTensorOptions< T, T > >, 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< BlendingTensor< T, R, sp::DefaultTensorOptions, BlendingTensorOptions< T, T > >, T, R, sp::DefaultTensorOptions > | |
static constexpr int | calculateNumStrides () |
Compute the default value for NumStrides . More... | |
Public Attributes inherited from sp::MemTensorLike< BlendingTensor< T, R, sp::DefaultTensorOptions, BlendingTensorOptions< T, T > >, T, R, sp::DefaultTensorOptions > | |
friend | Base |
PtrType | dataPtr |
sp::Vec< int, Rank+getNumStrides()+HasTotalSize+AssertionsEnabled > | variousIntegers |
A tensor that implements the "output blending" concept common in public APIs.
When read, this tensor behaves like a normal Tensor
. When writing, it performs X = Alpha * NewValue + Beta * X
. This is useful because almost every library function writes its output like this, so it's nice to be able to hide it in this abstraction and omit it from the TensorExpr
s.
Note that repeatedly setting the same location will continue to cause changes.
sp::BlendingTensor< T, R, Options, BlendingOptions >::BlendingTensor | ( | const sp::Tensor< T, R, Options > & | tensor, |
const sp::Scalar< AlphaKind > & | alpha, | ||
const sp::Scalar< BetaKind > & | beta | ||
) |
Construct from a Tensor
sp::BlendingTensor< T, R, Options, BlendingOptions >::BlendingTensor | ( | PtrType | data, |
const Vec< int, Rank > & | size, | ||
const sp::Scalar< AlphaKind > & | alpha, | ||
const sp::Scalar< BetaKind > & | beta | ||
) |
Construct from a pointer and some sizes.
sp::BlendingTensor< T, R, Options, BlendingOptions >::BlendingTensor | ( | PtrType | data, |
const Vec< int, Rank > & | size, | ||
const Vec< int, Rank > & | strides, | ||
const sp::Scalar< AlphaKind > & | alpha, | ||
const sp::Scalar< BetaKind > & | beta | ||
) |
Construct from a pointer, size, and strides.