NForge
Tensor library
Loading...
Searching...
No Matches
Tensor::CPUImpl Class Reference

#include <tensor_impl_CPU.h>

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

Public Member Functions

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

Detailed Description

CPU implementation of Tensor::Impl, backed by std::vector<float>.

All operations iterate over the data using TensorLayout descriptors. The caller is responsible for layout validity, see Tensor::Impl.

Overridden methods follow the same semantics documented in Tensor::Impl.

Member Function Documentation

◆ add()

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

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

Implements Tensor::Impl.

◆ clone()

std::unique_ptr< Tensor::Impl > Tensor::CPUImpl::clone ( ) const
overridevirtual

Deep copies this implementation.

Implements Tensor::Impl.

◆ compare()

bool Tensor::CPUImpl::compare ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
) const
overridevirtual

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

Implements Tensor::Impl.

◆ copyFromHost()

void Tensor::CPUImpl::copyFromHost ( const float *  data,
size_t  count 
)
overridevirtual

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.

Implements Tensor::Impl.

◆ div()

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

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

Implements Tensor::Impl.

◆ fillAll()

void Tensor::CPUImpl::fillAll ( float  value)
overridevirtual

Fills all elements with value.

Implements Tensor::Impl.

◆ fillRand()

void Tensor::CPUImpl::fillRand ( )
overridevirtual

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

Implements Tensor::Impl.

◆ getNumElements()

size_t Tensor::CPUImpl::getNumElements ( ) const
overridevirtual

Returns the total number of elements.

Implements Tensor::Impl.

◆ getShape()

Tensor::Shape Tensor::CPUImpl::getShape ( ) const
overridevirtual

Returns the tensor shape.

Implements Tensor::Impl.

◆ greater()

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

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

Implements Tensor::Impl.

◆ greaterEqual()

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

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

Implements Tensor::Impl.

◆ iadd()

void Tensor::CPUImpl::iadd ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
overridevirtual

In-place elementwise addition. Modifies lhsLayout in place.

Implements Tensor::Impl.

◆ idiv()

void Tensor::CPUImpl::idiv ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
overridevirtual

In-place elementwise division. Modifies lhsLayout in place.

Implements Tensor::Impl.

◆ imul()

void Tensor::CPUImpl::imul ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
overridevirtual

In-place elementwise multiplication. Modifies lhsLayout in place.

Implements Tensor::Impl.

◆ isClose()

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

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

Implements Tensor::Impl.

◆ isub()

void Tensor::CPUImpl::isub ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
overridevirtual

In-place elementwise subtraction. Modifies lhsLayout in place.

Implements Tensor::Impl.

◆ less()

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

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

Implements Tensor::Impl.

◆ lessEqual()

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

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

Implements Tensor::Impl.

◆ matmul()

std::unique_ptr< Tensor::Impl > Tensor::CPUImpl::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
overridevirtual

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).

Implements Tensor::Impl.

◆ max()

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

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

Implements Tensor::Impl.

◆ min()

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

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

Implements Tensor::Impl.

◆ mul()

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

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

Implements Tensor::Impl.

◆ norm()

std::unique_ptr< Tensor::Impl > Tensor::CPUImpl::norm ( const TensorLayout layout) const
overridevirtual

L2 norm of the tensor described by layout.

Implements Tensor::Impl.

◆ print() [1/2]

void Tensor::CPUImpl::print ( ) const
overridevirtual

Prints the entire tensor to stdout.

Implements Tensor::Impl.

◆ print() [2/2]

void Tensor::CPUImpl::print ( const std::vector< size_t > &  position) const
overridevirtual

Prints the block starting at position to stdout.

Implements Tensor::Impl.

◆ prod()

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

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

Implements Tensor::Impl.

◆ set()

void Tensor::CPUImpl::set ( const TensorLayout lhsLayout,
const Tensor::Impl rhsImpl,
const TensorLayout rhsLayout 
)
overridevirtual

Copies data from rhsImpl with rhsLayout into this with lhsLayout.

Implements Tensor::Impl.

◆ sub()

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

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

Implements Tensor::Impl.

◆ sum()

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

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

Implements Tensor::Impl.

◆ toString()

std::string Tensor::CPUImpl::toString ( ) const
overridevirtual

Returns a string representation of the data.

Implements Tensor::Impl.

◆ toVector()

std::vector< float > Tensor::CPUImpl::toVector ( ) const
overridevirtual

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

Implements Tensor::Impl.


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