1#ifndef TENSOR_IMPL_CPU_H
2#define TENSOR_IMPL_CPU_H
4#include "../tensor_impl.h"
5#include "nforge/core/tensor_layout.h"
6#include "nforge/core/tensor_shape.h"
20 void fillAll(
float value)
override;
23 void print()
const override;
24 void print(
const std::vector<size_t>& position)
const override;
31 std::vector<float>
toVector()
const override;
32 std::string
toString()
const override;
34 std::unique_ptr<Tensor::Impl>
clone()
const override;
36 void copyFromHost(
const float* data,
size_t count)
override;
84 std::unique_ptr<Tensor::Impl>
norm(
const TensorLayout& layout)
const override;
90 size_t k,
size_t p)
const override;
116 float tolerance)
const override;
120 std::vector<float> m_data;
122 template <
typename BinaryOp>
123 std::unique_ptr<Tensor::Impl> applyBinaryOp(
const TensorLayout& lhsLayout,
128 template <
typename BinaryOp>
133 template <
typename ReductionOp>
134 std::unique_ptr<Tensor::Impl> applyReductionOp(
const TensorLayout& layout,
137 ReductionOp op)
const;
Definition tensor_impl_CPU.h:14
Tensor::Shape getShape() const override
Returns the tensor shape.
Definition tensor_impl_CPU.cpp:101
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.
Definition tensor_impl_CPU.cpp:151
std::unique_ptr< Tensor::Impl > add(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.
Definition tensor_impl_CPU.cpp:198
std::unique_ptr< Tensor::Impl > div(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.
Definition tensor_impl_CPU.cpp:222
void idiv(const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout) override
In-place elementwise division. Modifies lhsLayout in place.
Definition tensor_impl_CPU.cpp:263
std::unique_ptr< Tensor::Impl > lessEqual(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.
Definition tensor_impl_CPU.cpp:385
std::unique_ptr< Tensor::Impl > greater(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.
Definition tensor_impl_CPU.cpp:393
void isub(const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout) override
In-place elementwise subtraction. Modifies lhsLayout in place.
Definition tensor_impl_CPU.cpp:253
std::unique_ptr< Tensor::Impl > max(const TensorLayout &layout, const TensorLayout &blockLayout, const TensorLayout &outLayout) const override
Reduces dimensions [dim, rank) by taking the maximum. Output with outLayout.
Definition tensor_impl_CPU.cpp:311
void fillRand() override
Fills all elements with random values in [-1, 1].
Definition tensor_impl_CPU.cpp:24
std::unique_ptr< Tensor::Impl > prod(const TensorLayout &layout, const TensorLayout &blockLayout, const TensorLayout &outLayout) const override
Reduces dimensions [dim, rank) by taking the product. Output with outLayout.
Definition tensor_impl_CPU.cpp:318
std::unique_ptr< Tensor::Impl > isClose(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.
Definition tensor_impl_CPU.cpp:409
std::string toString() const override
Returns a string representation of the data.
Definition tensor_impl_CPU.cpp:103
void print() const override
Prints the entire tensor to stdout.
Definition tensor_impl_CPU.cpp:33
void set(const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout) override
Copies data from rhsImpl with rhsLayout into this with lhsLayout.
Definition tensor_impl_CPU.cpp:136
float * dataPtr() const
Returns a raw pointer to the internal data buffer.
Definition tensor_impl_CPU.cpp:130
std::unique_ptr< Tensor::Impl > clone() const override
Deep copies this implementation.
Definition tensor_impl_CPU.cpp:132
void copyFromHost(const float *data, size_t count) override
Definition tensor_impl_CPU.cpp:126
std::unique_ptr< Tensor::Impl > mul(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.
Definition tensor_impl_CPU.cpp:214
std::unique_ptr< Tensor::Impl > less(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.
Definition tensor_impl_CPU.cpp:377
std::unique_ptr< Tensor::Impl > greaterEqual(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.
Definition tensor_impl_CPU.cpp:401
std::unique_ptr< Tensor::Impl > sum(const TensorLayout &layout, const TensorLayout &blockLayout, const TensorLayout &outLayout) const override
Reduces dimensions [dim, rank) by summation. Output with outLayout.
Definition tensor_impl_CPU.cpp:298
void imul(const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout) override
In-place elementwise multiplication. Modifies lhsLayout in place.
Definition tensor_impl_CPU.cpp:258
std::unique_ptr< Tensor::Impl > sub(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.
Definition tensor_impl_CPU.cpp:206
void fillAll(float value) override
Fills all elements with value.
Definition tensor_impl_CPU.cpp:22
size_t getNumElements() const override
Returns the total number of elements.
Definition tensor_impl_CPU.cpp:115
std::unique_ptr< Tensor::Impl > min(const TensorLayout &layout, const TensorLayout &blockLayout, const TensorLayout &outLayout) const override
Reduces dimensions [dim, rank) by taking the minimum. Output with outLayout.
Definition tensor_impl_CPU.cpp:304
std::unique_ptr< 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 override
Definition tensor_impl_CPU.cpp:343
void iadd(const TensorLayout &lhsLayout, const Tensor::Impl *rhsImpl, const TensorLayout &rhsLayout) override
In-place elementwise addition. Modifies lhsLayout in place.
Definition tensor_impl_CPU.cpp:248
std::vector< float > toVector() const override
Copies all elements into a flat vector (row-major order).
Definition tensor_impl_CPU.cpp:124
Definition tensor_impl.h:15
Definition tensor_shape.h:15
Tensor norm() const
L2 norm (scalar tensor equal to sqrt(sum(x^2))).
Definition tensor.cpp:223
Definition tensor_layout.h:15