float32 / int32 tensor (rank 1–6), row-major. Eager: owns a buffer. Symbolic: node in a Func graph (no buffer until run). 更多...
#include <Tensor.h>
Public 成员函数 | |
| Tensor ()=default | |
| Tensor (const int *dims, int rank) | |
| 从 dims[0..rank) 创建 eager 张量。 | |
| Tensor (DType dtype, const int *dims, int rank) | |
| Tensor (int d0) | |
| 按秩创建全零 eager 张量。 | |
| Tensor (int d0, int d1) | |
| Tensor (int d0, int d1, int d2) | |
| Tensor (int d0, int d1, int d2, int d3) | |
| Tensor (int d0, int d1, int d2, int d3, int d4) | |
| Tensor (int d0, int d1, int d2, int d3, int d4, int d5) | |
| bool | isSymbolic () const |
| bool | isEager () const |
| Graph * | graph () const |
| int | nodeId () const |
| int | getRank () const |
| int | getSize () const |
| int | getDim (int axis) const |
| int | getDim0 () const |
| int | getDim1 () const |
| int | getDim2 () const |
| int | getDim3 () const |
| int | getDim4 () const |
| int | getDim5 () const |
| std::string | getDevice () const |
| std::string | getDtype () const |
| DType | dtype () const |
| void | setDtype (DType dtype) |
| bool | isQuantized () const |
| std::vector< float > | dequantized () const |
| const std::vector< float > & | qScales () const |
| int | qGroup () const |
| const std::vector< uint8_t > & | qBytes () const |
| float | get (int flatIndex) const |
| void | set (int flatIndex, float value) |
| float | get1 (int i0) const |
| void | set1 (int i0, float value) |
| float | get2 (int i0, int i1) const |
| void | set2 (int i0, int i1, float value) |
| float | get3 (int i0, int i1, int i2) const |
| void | set3 (int i0, int i1, int i2, float value) |
| float | get4 (int i0, int i1, int i2, int i3) const |
| void | set4 (int i0, int i1, int i2, int i3, float value) |
| float | get5 (int i0, int i1, int i2, int i3, int i4) const |
| void | set5 (int i0, int i1, int i2, int i3, int i4, float value) |
| float | get6 (int i0, int i1, int i2, int i3, int i4, int i5) const |
| void | set6 (int i0, int i1, int i2, int i3, int i4, int i5, float value) |
| void | fill (float value) |
| void | copyFrom (const Tensor *other) |
| Tensor * | clone () const |
| Tensor * | add (const Tensor *other) const |
| Eager 逐元素运算(符号张量会抛异常)。 | |
| Tensor * | sub (const Tensor *other) const |
| Tensor * | multiply (const Tensor *other) const |
| Tensor * | div (const Tensor *other) const |
| Tensor * | addScalar (float s) const |
| Tensor * | subScalar (float s) const |
| Tensor * | mulScalar (float s) const |
| Tensor * | divScalar (float s) const |
| Tensor * | neg () const |
| Tensor * | abs () const |
| Tensor * | sqrt () const |
| Tensor * | exp () const |
| Tensor * | log () const |
| Tensor * | sin () const |
| Tensor * | cos () const |
| Tensor * | tanh () const |
| Tensor * | relu () const |
| Tensor * | sigmoid () const |
| Tensor * | gelu () const |
| Tensor * | silu () const |
| Tensor * | powScalar (float exp) const |
| Tensor * | clamp (float lo, float hi) const |
| Tensor * | maximumScalar (float s) const |
| Tensor * | minimumScalar (float s) const |
| void | addInPlace (const Tensor *other) |
| Eager 原地运算。 | |
| void | multiplyInPlace (const Tensor *other) |
| void | addScalarInPlace (float s) |
| void | mulScalarInPlace (float s) |
| void | reluInPlace () |
| float | reduceSum () const |
| 归约:求和 / 均值 / 最小 / 最大。 | |
| float | reduceMean () const |
| float | reduceMin () const |
| float | reduceMax () const |
| float | dot (const Tensor *other) const |
| Tensor * | matmul (const Tensor *other) const |
| 矩阵乘法 / 转置 / 变形。 | |
| Tensor * | transpose () const |
| Tensor * | permute (const int *order, int rank) const |
| Tensor * | reshape1 (int d0) const |
| Tensor * | reshape2 (int d0, int d1) const |
| Tensor * | reshape3 (int d0, int d1, int d2) const |
| Tensor * | reshape4 (int d0, int d1, int d2, int d3) const |
| Tensor * | reshape5 (int d0, int d1, int d2, int d3, int d4) const |
| Tensor * | reshape6 (int d0, int d1, int d2, int d3, int d4, int d5) const |
| Tensor * | flatten () const |
| float * | data () |
| 原始数据指针(eager)。 | |
| const float * | data () const |
| void | ensureEager (const char *op) const |
静态 Public 成员函数 | |
| static Tensor * | makeSymbolic (Graph *graph, int nodeId, const int *dims, int rank) |
| Symbolic handle into a graph node. | |
| static int | product (const int *dims, int rank) |
静态 Public 属性 | |
| static constexpr int | kMaxRank = 6 |
友元 | |
| class | TF |
| class | Func |
| class | CompiledFunction |
| class | Graph |
详细描述
float32 / int32 tensor (rank 1–6), row-major. Eager: owns a buffer. Symbolic: node in a Func graph (no buffer until run).
构造及析构函数说明
◆ Tensor() [1/9]
|
default |
◆ Tensor() [2/9]
|
explicit |
◆ Tensor() [3/9]
|
explicit |
在文件 Tensor.cpp 第 96 行定义.
引用了 dtype().
◆ Tensor() [4/9]
| eve::tensor::Tensor::Tensor | ( | int | d0 | ) |
◆ Tensor() [5/9]
| eve::tensor::Tensor::Tensor | ( | int | d0, |
| int | d1 | ||
| ) |
在文件 Tensor.cpp 第 101 行定义.
引用了 d , 以及 eve::tensor::Float32.
◆ Tensor() [6/9]
| eve::tensor::Tensor::Tensor | ( | int | d0, |
| int | d1, | ||
| int | d2 | ||
| ) |
在文件 Tensor.cpp 第 105 行定义.
引用了 d , 以及 eve::tensor::Float32.
◆ Tensor() [7/9]
| eve::tensor::Tensor::Tensor | ( | int | d0, |
| int | d1, | ||
| int | d2, | ||
| int | d3 | ||
| ) |
在文件 Tensor.cpp 第 109 行定义.
引用了 d , 以及 eve::tensor::Float32.
◆ Tensor() [8/9]
| eve::tensor::Tensor::Tensor | ( | int | d0, |
| int | d1, | ||
| int | d2, | ||
| int | d3, | ||
| int | d4 | ||
| ) |
在文件 Tensor.cpp 第 113 行定义.
引用了 d , 以及 eve::tensor::Float32.
◆ Tensor() [9/9]
| eve::tensor::Tensor::Tensor | ( | int | d0, |
| int | d1, | ||
| int | d2, | ||
| int | d3, | ||
| int | d4, | ||
| int | d5 | ||
| ) |
在文件 Tensor.cpp 第 117 行定义.
引用了 d , 以及 eve::tensor::Float32.
成员函数说明
◆ abs()
| Tensor * eve::tensor::Tensor::abs | ( | ) | const |
◆ add()
◆ addInPlace()
| void eve::tensor::Tensor::addInPlace | ( | const Tensor * | other | ) |
◆ addScalar()
| Tensor * eve::tensor::Tensor::addScalar | ( | float | s | ) | const |
在文件 Tensor.cpp 第 326 行定义.
引用了 eve::tensor::AddScalar, ensureEager(), s, Tensor() , 以及 eve::tensor::kernels::unaryOp().
◆ addScalarInPlace()
| void eve::tensor::Tensor::addScalarInPlace | ( | float | s | ) |
在文件 Tensor.cpp 第 418 行定义.
引用了 a, ensureEager() , 以及 s.
◆ clamp()
| Tensor * eve::tensor::Tensor::clamp | ( | float | lo, |
| float | hi | ||
| ) | const |
在文件 Tensor.cpp 第 392 行定义.
引用了 eve::tensor::Clamp, ensureEager(), Tensor() , 以及 eve::tensor::kernels::unaryOp().
◆ clone()
| Tensor * eve::tensor::Tensor::clone | ( | ) | const |
在文件 Tensor.cpp 第 281 行定义.
引用了 ensureEager() , 以及 Tensor().
◆ copyFrom()
| void eve::tensor::Tensor::copyFrom | ( | const Tensor * | other | ) |
在文件 Tensor.cpp 第 272 行定义.
引用了 ensureEager().
◆ cos()
| Tensor * eve::tensor::Tensor::cos | ( | ) | const |
◆ data() [1/2]
| float * eve::tensor::Tensor::data | ( | ) |
原始数据指针(eager)。
在文件 Tensor.cpp 第 185 行定义.
引用了 ensureEager() , 以及 isQuantized().
被这些函数引用 eve::tensor::TF::conv1dBias(), eve::tensor::TF::conv2dBias(), eve::tensor::TF::embedding(), eve::tensor::Func::ensureNode(), eve::tensor::TF::layernormWB() , 以及 eve::tensor::TF::sdpaMasked().
◆ data() [2/2]
| const float * eve::tensor::Tensor::data | ( | ) | const |
在文件 Tensor.cpp 第 190 行定义.
引用了 ensureEager() , 以及 isQuantized().
◆ dequantized()
| std::vector< float > eve::tensor::Tensor::dequantized | ( | ) | const |
Dequantize this tensor to float32 (eager only).
在文件 Tensor.cpp 第 210 行定义.
引用了 eve::tensor::q::dequantizeAll(), ensureEager() , 以及 isQuantized().
被这些函数引用 eve::tensor::TF::embedding(), matmul() , 以及 transpose().
◆ div()
在文件 Tensor.cpp 第 324 行定义.
引用了 eve::tensor::Divide.
◆ divScalar()
| Tensor * eve::tensor::Tensor::divScalar | ( | float | s | ) | const |
在文件 Tensor.cpp 第 344 行定义.
引用了 eve::tensor::DivScalar, ensureEager(), s, Tensor() , 以及 eve::tensor::kernels::unaryOp().
◆ dot()
| float eve::tensor::Tensor::dot | ( | const Tensor * | other | ) | const |
在文件 Tensor.cpp 第 464 行定义.
引用了 a, b , 以及 ensureEager().
◆ dtype()
|
inline |
被这些函数引用 setDtype() , 以及 Tensor().
◆ ensureEager()
| void eve::tensor::Tensor::ensureEager | ( | const char * | op | ) | const |
在文件 Tensor.cpp 第 136 行定义.
被这些函数引用 addInPlace(), addScalar(), addScalarInPlace(), clamp(), clone(), copyFrom(), data(), data(), dequantized(), divScalar(), dot(), eve::tensor::Func::ensureNode(), fill(), get(), get2(), get3(), get4(), get5(), get6(), matmul(), maximumScalar(), minimumScalar(), mulScalar(), mulScalarInPlace(), multiplyInPlace(), permute(), powScalar(), reduceMax(), reduceMin(), reduceSum(), reluInPlace(), reshape1(), reshape2(), reshape3(), reshape4(), reshape5(), reshape6(), set(), set2(), set3(), set4(), set5(), set6(), subScalar() , 以及 transpose().
◆ exp()
| Tensor * eve::tensor::Tensor::exp | ( | ) | const |
被这些函数引用 powScalar().
◆ fill()
| void eve::tensor::Tensor::fill | ( | float | value | ) |
在文件 Tensor.cpp 第 267 行定义.
引用了 ensureEager() , 以及 value.
◆ flatten()
| Tensor * eve::tensor::Tensor::flatten | ( | ) | const |
在文件 Tensor.cpp 第 615 行定义.
引用了 reshape1().
◆ gelu()
| Tensor * eve::tensor::Tensor::gelu | ( | ) | const |
◆ get()
| float eve::tensor::Tensor::get | ( | int | flatIndex | ) | const |
在文件 Tensor.cpp 第 196 行定义.
引用了 eve::tensor::q::dequantValue(), ensureEager() , 以及 isQuantized().
被这些函数引用 get1() , 以及 eve::tensor::TF::where().
◆ get1()
| float eve::tensor::Tensor::get1 | ( | int | i0 | ) | const |
在文件 Tensor.cpp 第 218 行定义.
◆ get2()
| float eve::tensor::Tensor::get2 | ( | int | i0, |
| int | i1 | ||
| ) | const |
在文件 Tensor.cpp 第 226 行定义.
引用了 ensureEager(), i0 , 以及 i1.
◆ get3()
| float eve::tensor::Tensor::get3 | ( | int | i0, |
| int | i1, | ||
| int | i2 | ||
| ) | const |
在文件 Tensor.cpp 第 234 行定义.
引用了 ensureEager(), i0, i1 , 以及 i2.
◆ get4()
| float eve::tensor::Tensor::get4 | ( | int | i0, |
| int | i1, | ||
| int | i2, | ||
| int | i3 | ||
| ) | const |
在文件 Tensor.cpp 第 242 行定义.
引用了 ensureEager(), i0, i1 , 以及 i2.
◆ get5()
| float eve::tensor::Tensor::get5 | ( | int | i0, |
| int | i1, | ||
| int | i2, | ||
| int | i3, | ||
| int | i4 | ||
| ) | const |
在文件 Tensor.cpp 第 250 行定义.
引用了 ensureEager(), i0, i1 , 以及 i2.
◆ get6()
| float eve::tensor::Tensor::get6 | ( | int | i0, |
| int | i1, | ||
| int | i2, | ||
| int | i3, | ||
| int | i4, | ||
| int | i5 | ||
| ) | const |
在文件 Tensor.cpp 第 258 行定义.
引用了 ensureEager(), i0, i1 , 以及 i2.
◆ getDevice()
◆ getDim()
| int eve::tensor::Tensor::getDim | ( | int | axis | ) | const |
在文件 Tensor.cpp 第 141 行定义.
被这些函数引用 eve::tensor::TF::embedding(), eve::tensor::TF::sdpaMasked() , 以及 eve::tensor::TF::where().
◆ getDim0()
◆ getDim1()
◆ getDim2()
◆ getDim3()
◆ getDim4()
◆ getDim5()
◆ getDtype()
|
inline |
◆ getRank()
|
inline |
◆ getSize()
|
inline |
◆ graph()
|
inline |
被这些函数引用 eve::tensor::Func::ensureNode() , 以及 makeSymbolic().
◆ isEager()
◆ isQuantized()
|
inline |
True for packed weight-quantization dtypes (bytes_, qScales_).
引用了 eve::tensor::q::isQuantDType().
被这些函数引用 data(), data(), dequantized(), eve::tensor::TF::embedding(), eve::tensor::Func::ensureNode(), get(), matmul(), permute(), set() , 以及 transpose().
◆ isSymbolic()
|
inline |
被这些函数引用 eve::tensor::Func::ensureNode().
◆ log()
| Tensor * eve::tensor::Tensor::log | ( | ) | const |
◆ makeSymbolic()
|
static |
Symbolic handle into a graph node.
在文件 Tensor.cpp 第 122 行定义.
引用了 eve::tensor::Float32, graph(), kMaxRank, nodeId() , 以及 Tensor().
被这些函数引用 eve::tensor::TF::eye().
◆ matmul()
矩阵乘法 / 转置 / 变形。
在文件 Tensor.cpp 第 475 行定义.
引用了 a, b, c, dequantized(), ensureEager(), isQuantized(), m, n , 以及 Tensor().
◆ maximumScalar()
| Tensor * eve::tensor::Tensor::maximumScalar | ( | float | s | ) | const |
在文件 Tensor.cpp 第 356 行定义.
引用了 ensureEager(), eve::tensor::MaximumScalar, s, Tensor() , 以及 eve::tensor::kernels::unaryOp().
◆ minimumScalar()
| Tensor * eve::tensor::Tensor::minimumScalar | ( | float | s | ) | const |
在文件 Tensor.cpp 第 362 行定义.
引用了 ensureEager(), eve::tensor::MinimumScalar, s, Tensor() , 以及 eve::tensor::kernels::unaryOp().
◆ mulScalar()
| Tensor * eve::tensor::Tensor::mulScalar | ( | float | s | ) | const |
在文件 Tensor.cpp 第 338 行定义.
引用了 ensureEager(), eve::tensor::MulScalar, s, Tensor() , 以及 eve::tensor::kernels::unaryOp().
◆ mulScalarInPlace()
| void eve::tensor::Tensor::mulScalarInPlace | ( | float | s | ) |
在文件 Tensor.cpp 第 424 行定义.
引用了 a, ensureEager() , 以及 s.
◆ multiply()
在文件 Tensor.cpp 第 321 行定义.
◆ multiplyInPlace()
| void eve::tensor::Tensor::multiplyInPlace | ( | const Tensor * | other | ) |
在文件 Tensor.cpp 第 409 行定义.
引用了 a, b , 以及 ensureEager().
◆ neg()
| Tensor * eve::tensor::Tensor::neg | ( | ) | const |
◆ nodeId()
|
inline |
被这些函数引用 eve::tensor::Func::ensureNode() , 以及 makeSymbolic().
◆ permute()
| Tensor * eve::tensor::Tensor::permute | ( | const int * | order, |
| int | rank | ||
| ) | const |
在文件 Tensor.cpp 第 545 行定义.
引用了 ensureEager(), isQuantized(), kMaxRank, eve::tensor::kernels::permute() , 以及 Tensor().
被这些函数引用 transpose().
◆ powScalar()
| Tensor * eve::tensor::Tensor::powScalar | ( | float | exp | ) | const |
在文件 Tensor.cpp 第 350 行定义.
引用了 ensureEager(), exp(), eve::tensor::PowScalar, Tensor() , 以及 eve::tensor::kernels::unaryOp().
◆ product()
|
static |
在文件 Tensor.cpp 第 71 行定义.
◆ qBytes()
|
inline |
被这些函数引用 eve::tensor::Func::ensureNode().
◆ qGroup()
|
inline |
被这些函数引用 eve::tensor::Func::ensureNode().
◆ qScales()
|
inline |
Per-group scale vector + group size for quantized tensors.
被这些函数引用 eve::tensor::Func::ensureNode().
◆ reduceMax()
| float eve::tensor::Tensor::reduceMax | ( | ) | const |
在文件 Tensor.cpp 第 456 行定义.
引用了 ensureEager() , 以及 m.
◆ reduceMean()
| float eve::tensor::Tensor::reduceMean | ( | ) | const |
在文件 Tensor.cpp 第 444 行定义.
引用了 reduceSum().
◆ reduceMin()
| float eve::tensor::Tensor::reduceMin | ( | ) | const |
在文件 Tensor.cpp 第 448 行定义.
引用了 ensureEager() , 以及 m.
◆ reduceSum()
| float eve::tensor::Tensor::reduceSum | ( | ) | const |
◆ relu()
| Tensor * eve::tensor::Tensor::relu | ( | ) | const |
◆ reluInPlace()
| void eve::tensor::Tensor::reluInPlace | ( | ) |
在文件 Tensor.cpp 第 430 行定义.
引用了 a , 以及 ensureEager().
◆ reshape1()
| Tensor * eve::tensor::Tensor::reshape1 | ( | int | d0 | ) | const |
◆ reshape2()
| Tensor * eve::tensor::Tensor::reshape2 | ( | int | d0, |
| int | d1 | ||
| ) | const |
在文件 Tensor.cpp 第 569 行定义.
引用了 d, ensureEager() , 以及 Tensor().
◆ reshape3()
| Tensor * eve::tensor::Tensor::reshape3 | ( | int | d0, |
| int | d1, | ||
| int | d2 | ||
| ) | const |
在文件 Tensor.cpp 第 578 行定义.
引用了 d, ensureEager() , 以及 Tensor().
◆ reshape4()
| Tensor * eve::tensor::Tensor::reshape4 | ( | int | d0, |
| int | d1, | ||
| int | d2, | ||
| int | d3 | ||
| ) | const |
在文件 Tensor.cpp 第 587 行定义.
引用了 d, ensureEager() , 以及 Tensor().
◆ reshape5()
| Tensor * eve::tensor::Tensor::reshape5 | ( | int | d0, |
| int | d1, | ||
| int | d2, | ||
| int | d3, | ||
| int | d4 | ||
| ) | const |
在文件 Tensor.cpp 第 596 行定义.
引用了 d, ensureEager() , 以及 Tensor().
◆ reshape6()
| Tensor * eve::tensor::Tensor::reshape6 | ( | int | d0, |
| int | d1, | ||
| int | d2, | ||
| int | d3, | ||
| int | d4, | ||
| int | d5 | ||
| ) | const |
在文件 Tensor.cpp 第 605 行定义.
引用了 d, ensureEager() , 以及 Tensor().
◆ set()
| void eve::tensor::Tensor::set | ( | int | flatIndex, |
| float | value | ||
| ) |
◆ set1()
| void eve::tensor::Tensor::set1 | ( | int | i0, |
| float | value | ||
| ) |
在文件 Tensor.cpp 第 222 行定义.
◆ set2()
| void eve::tensor::Tensor::set2 | ( | int | i0, |
| int | i1, | ||
| float | value | ||
| ) |
在文件 Tensor.cpp 第 230 行定义.
引用了 ensureEager(), i0, i1 , 以及 value.
◆ set3()
| void eve::tensor::Tensor::set3 | ( | int | i0, |
| int | i1, | ||
| int | i2, | ||
| float | value | ||
| ) |
在文件 Tensor.cpp 第 238 行定义.
引用了 ensureEager(), i0, i1, i2 , 以及 value.
◆ set4()
| void eve::tensor::Tensor::set4 | ( | int | i0, |
| int | i1, | ||
| int | i2, | ||
| int | i3, | ||
| float | value | ||
| ) |
在文件 Tensor.cpp 第 246 行定义.
引用了 ensureEager(), i0, i1, i2 , 以及 value.
◆ set5()
| void eve::tensor::Tensor::set5 | ( | int | i0, |
| int | i1, | ||
| int | i2, | ||
| int | i3, | ||
| int | i4, | ||
| float | value | ||
| ) |
在文件 Tensor.cpp 第 254 行定义.
引用了 ensureEager(), i0, i1, i2 , 以及 value.
◆ set6()
| void eve::tensor::Tensor::set6 | ( | int | i0, |
| int | i1, | ||
| int | i2, | ||
| int | i3, | ||
| int | i4, | ||
| int | i5, | ||
| float | value | ||
| ) |
在文件 Tensor.cpp 第 262 行定义.
引用了 ensureEager(), i0, i1, i2 , 以及 value.
◆ setDtype()
◆ sigmoid()
| Tensor * eve::tensor::Tensor::sigmoid | ( | ) | const |
◆ silu()
| Tensor * eve::tensor::Tensor::silu | ( | ) | const |
◆ sin()
| Tensor * eve::tensor::Tensor::sin | ( | ) | const |
◆ sqrt()
| Tensor * eve::tensor::Tensor::sqrt | ( | ) | const |
◆ sub()
在文件 Tensor.cpp 第 320 行定义.
引用了 eve::tensor::Sub.
◆ subScalar()
| Tensor * eve::tensor::Tensor::subScalar | ( | float | s | ) | const |
在文件 Tensor.cpp 第 332 行定义.
引用了 ensureEager(), s, eve::tensor::SubScalar, Tensor() , 以及 eve::tensor::kernels::unaryOp().
◆ tanh()
| Tensor * eve::tensor::Tensor::tanh | ( | ) | const |
◆ transpose()
| Tensor * eve::tensor::Tensor::transpose | ( | ) | const |
在文件 Tensor.cpp 第 528 行定义.
引用了 dequantized(), ensureEager(), f, isQuantized(), permute() , 以及 Tensor().
友元及相关函数文档
◆ CompiledFunction
|
friend |
◆ Func
◆ Graph
◆ TF
类成员变量说明
◆ kMaxRank
|
staticconstexpr |
被这些函数引用 eve::tensor::TF::argmax(), eve::tensor::kernels::binaryOp(), eve::tensor::kernels::broadcastShape(), eve::tensor::TF::cast(), eve::tensor::TF::embedding(), eve::tensor::Func::emitArgMax(), eve::tensor::Func::emitBinary(), eve::tensor::Func::emitConcat(), eve::tensor::Func::emitEmbedding(), eve::tensor::Func::emitPermute(), eve::tensor::Func::emitReduce(), eve::tensor::Func::emitSlice(), eve::tensor::TF::layernorm(), eve::tensor::TF::layernormWB(), eve::tensor::TF::logSoftmax(), makeSymbolic(), eve::tensor::kernels::permute(), permute(), eve::tensor::TF::rmsnorm(), eve::tensor::TF::rmsnormW(), eve::tensor::TF::slice(), eve::tensor::TF::softmax() , 以及 eve::tensor::TF::where().
该类的文档由以下文件生成:
- src/modules/tensor/Tensor.h
- src/modules/tensor/Tensor.cpp