NForge
Tensor library
Loading...
Searching...
No Matches
Tensor::Impl Class Referenceabstract

#include <tensor_impl.h>

Inheritance diagram for Tensor::Impl:
Tensor::CPUImpl Tensor::CUDAImpl

Public Member Functions

virtual void fillAll (float value)=0
 Fills all elements with value.
 
virtual void fillRand ()=0
 Fills all elements with random values in [-1, 1].
 
virtual void print () const =0
 Prints the entire tensor to stdout.
 
virtual void print (const std::vector< size_t > &position) const =0
 Prints the block starting at position to stdout.
 
virtual size_t getNumElements () const =0
 Returns the total number of elements.
 
virtual Tensor::Shape getShape () const =0
 Returns the tensor shape.
 
virtual std::vector< float > toVector () const =0
 Copies all elements into a flat vector (row-major order).
 
virtual std::string toString () const =0
 Returns a string representation of the data.
 
virtual std::unique_ptr< Tensor::Implclone () const =0
 Deep copies this implementation.
 
virtual void copyFromHost (const float *data, size_t count)=0
 
virtual void set (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout)=0
 Copies data from rhsImpl with rhsLayout into this with lhsLayout.
 
virtual bool compare (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout) const =0
 Returns true if the data with lhsLayout matches rhsImpl with rhsLayout.
 
virtual std::unique_ptr< Tensor::Impladd (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout) const =0
 Elementwise addition. Returns a new Impl with the result with outLayout.
 
virtual std::unique_ptr< Tensor::Implsub (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout) const =0
 Elementwise subtraction. Returns a new Impl with the result with outLayout.
 
virtual std::unique_ptr< Tensor::Implmul (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout) const =0
 Elementwise multiplication. Returns a new Impl with the result with outLayout.
 
virtual std::unique_ptr< Tensor::Impldiv (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout) const =0
 Elementwise division. Returns a new Impl with the result with outLayout.
 
virtual void iadd (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout)=0
 In-place elementwise addition. Modifies lhsLayout in place.
 
virtual void isub (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout)=0
 In-place elementwise subtraction. Modifies lhsLayout in place.
 
virtual void imul (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout)=0
 In-place elementwise multiplication. Modifies lhsLayout in place.
 
virtual void idiv (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout)=0
 In-place elementwise division. Modifies lhsLayout in place.
 
virtual std::unique_ptr< Tensor::Implsum (const TensorLayout &layout, const TensorLayout &blockLayout, const TensorLayout &outLayout) const =0
 Reduces dimensions [dim, rank) by summation. Output with outLayout.
 
virtual std::unique_ptr< Tensor::Implmin (const TensorLayout &layout, const TensorLayout &blockLayout, const TensorLayout &outLayout) const =0
 Reduces dimensions [dim, rank) by taking the minimum. Output with outLayout.
 
virtual std::unique_ptr< Tensor::Implmax (const TensorLayout &layout, const TensorLayout &blockLayout, const TensorLayout &outLayout) const =0
 Reduces dimensions [dim, rank) by taking the maximum. Output with outLayout.
 
virtual std::unique_ptr< Tensor::Implprod (const TensorLayout &layout, const TensorLayout &blockLayout, const TensorLayout &outLayout) const =0
 Reduces dimensions [dim, rank) by taking the product. Output with outLayout.
 
virtual std::unique_ptr< Tensor::Implnorm (const TensorLayout &layout) const =0
 L2 norm of the tensor described by layout.
 
virtual std::unique_ptr< Tensor::Implmatmul (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout, size_t batch, size_t m, size_t k, size_t p) const =0
 
virtual std::unique_ptr< Tensor::Implless (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout) const =0
 Elementwise less than. Returns a tensor of 0.0 / 1.0 with outLayout.
 
virtual std::unique_ptr< Tensor::ImpllessEqual (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout) const =0
 Elementwise less or equal. Returns a tensor of 0.0 / 1.0 with outLayout.
 
virtual std::unique_ptr< Tensor::Implgreater (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout) const =0
 Elementwise greater than. Returns a tensor of 0.0 / 1.0 with outLayout.
 
virtual std::unique_ptr< Tensor::ImplgreaterEqual (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout) const =0
 Elementwise greater or equal. Returns a tensor of 0.0 / 1.0 with outLayout.
 
virtual std::unique_ptr< Tensor::ImplisClose (const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout, const TensorLayout &outLayout, float tolerance) const =0
 Elementwise closeness within tolerance. Returns a tensor of 0.0 / 1.0 with outLayout.
 

Detailed Description

Abstract interface for backend specific tensor storage and operations.

All data access goes through TensorLayout descriptors, not raw indices.

The caller must ensure layouts are valid, since the implementation trusts that rhsLayout is correct for rhsImpl and lhsLayout is correct for its own memory.

The caller is responsible for broadcasting.

Member Function Documentation

◆ add()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::add ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout 
) const
pure virtual

Elementwise addition. Returns a new Impl with the result with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ clone()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::clone ( ) const
pure virtual

Deep copies this implementation.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ compare()

virtual bool Tensor::Impl::compare ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
) const
pure virtual

Returns true if the data with lhsLayout matches rhsImpl with rhsLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ copyFromHost()

virtual void Tensor::Impl::copyFromHost ( const float *  data,
size_t  count 
)
pure virtual

Copies data from a host float array into this backend's storage.

Parameters
dataSource array (must have at least count elements).
countNumber of elements to copy.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ div()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::div ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout 
) const
pure virtual

Elementwise division. Returns a new Impl with the result with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ fillAll()

virtual void Tensor::Impl::fillAll ( float  value)
pure virtual

Fills all elements with value.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ fillRand()

virtual void Tensor::Impl::fillRand ( )
pure virtual

Fills all elements with random values in [-1, 1].

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ getNumElements()

virtual size_t Tensor::Impl::getNumElements ( ) const
pure virtual

Returns the total number of elements.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ getShape()

virtual Tensor::Shape Tensor::Impl::getShape ( ) const
pure virtual

Returns the tensor shape.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ greater()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::greater ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout 
) const
pure virtual

Elementwise greater than. Returns a tensor of 0.0 / 1.0 with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ greaterEqual()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::greaterEqual ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout 
) const
pure virtual

Elementwise greater or equal. Returns a tensor of 0.0 / 1.0 with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ iadd()

virtual void Tensor::Impl::iadd ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
pure virtual

In-place elementwise addition. Modifies lhsLayout in place.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ idiv()

virtual void Tensor::Impl::idiv ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
pure virtual

In-place elementwise division. Modifies lhsLayout in place.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ imul()

virtual void Tensor::Impl::imul ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
pure virtual

In-place elementwise multiplication. Modifies lhsLayout in place.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ isClose()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::isClose ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout,
float  tolerance 
) const
pure virtual

Elementwise closeness within tolerance. Returns a tensor of 0.0 / 1.0 with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ isub()

virtual void Tensor::Impl::isub ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
pure virtual

In-place elementwise subtraction. Modifies lhsLayout in place.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ less()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::less ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout 
) const
pure virtual

Elementwise less than. Returns a tensor of 0.0 / 1.0 with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ lessEqual()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::lessEqual ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout 
) const
pure virtual

Elementwise less or equal. Returns a tensor of 0.0 / 1.0 with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ matmul()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::matmul ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout,
size_t  batch,
size_t  m,
size_t  k,
size_t  p 
) const
pure virtual

Matrix multiplication. The last two dims of each layout are the matrix dims. batch, m, k, p describe the decomposition of the matmul problem.

2D: (m, k) @ (k, p) => (m, p).

3D: (batch, m, k) @ (batch, k, p) => (batch, m, p).

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ max()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::max ( const TensorLayout layout,
const TensorLayout blockLayout,
const TensorLayout outLayout 
) const
pure virtual

Reduces dimensions [dim, rank) by taking the maximum. Output with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ min()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::min ( const TensorLayout layout,
const TensorLayout blockLayout,
const TensorLayout outLayout 
) const
pure virtual

Reduces dimensions [dim, rank) by taking the minimum. Output with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ mul()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::mul ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout 
) const
pure virtual

Elementwise multiplication. Returns a new Impl with the result with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ norm()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::norm ( const TensorLayout layout) const
pure virtual

L2 norm of the tensor described by layout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ print() [1/2]

virtual void Tensor::Impl::print ( ) const
pure virtual

Prints the entire tensor to stdout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ print() [2/2]

virtual void Tensor::Impl::print ( const std::vector< size_t > &  position) const
pure virtual

Prints the block starting at position to stdout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ prod()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::prod ( const TensorLayout layout,
const TensorLayout blockLayout,
const TensorLayout outLayout 
) const
pure virtual

Reduces dimensions [dim, rank) by taking the product. Output with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ set()

virtual void Tensor::Impl::set ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
pure virtual

Copies data from rhsImpl with rhsLayout into this with lhsLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ sub()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::sub ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout,
const TensorLayout outLayout 
) const
pure virtual

Elementwise subtraction. Returns a new Impl with the result with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ sum()

virtual std::unique_ptr< Tensor::Impl > Tensor::Impl::sum ( const TensorLayout layout,
const TensorLayout blockLayout,
const TensorLayout outLayout 
) const
pure virtual

Reduces dimensions [dim, rank) by summation. Output with outLayout.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ toString()

virtual std::string Tensor::Impl::toString ( ) const
pure virtual

Returns a string representation of the data.

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.

◆ toVector()

virtual std::vector< float > Tensor::Impl::toVector ( ) const
pure virtual

Copies all elements into a flat vector (row-major order).

Implemented in Tensor::CPUImpl, and Tensor::CUDAImpl.


The documentation for this class was generated from the following file: