ITensorCompute 的标量兜底实现。
TensorComputeBase
01 Syntax
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| RequireSameShape | 1 | 要求两个张量形状一致 |
| Wrap | 1 | 由计算结果的一维数组与形状包装出新的张量 |
| MapUnary | 1 | 逐元素一元运算的通用标量实现 |
| MapBinary | 1 | 逐元素二元运算的通用标量实现 |
| Heaviside | 1 | 阶跃函数(Heaviside): 大于 0 的元素取 1, 否则取 0 |
| SpMM | 1 | 稀疏 × 稠密的主机(标量)实现:dense[batch, Rows] · W[Rows, Columns] → [batch, Columns]。 |
| NormalizeAxis | 1 | 把可能为负的轴编号规范到 [0, Rank),并做越界校验 |
| AxisLayout | 1 | 把某根轴上的索引分解成「外层个数 / 轴长度 / 内层连续长度」三元组。 |
| MaskedCrossEntropy | 1 | 带损失掩码的 softmax 交叉熵(CPU 参考实现)。 |
| TryAdamWStep | 1 | 默认后端不提供设备端 AdamW,返回 False 让调用方走主机循环。 |
| PinDevice | 1 | 默认后端不支持钉住,直接返回 False。 |
| UnpinDevice | 1 | 默认后端没有常驻缓冲,返回 False。 |
| IsDevicePinned | 1 | 默认后端没有任何张量被钉住。 |
| SyncFromDevice | 1 | 默认后端没有设备副本,因此无需同步。 |
| ConvOutSize | 1 | 卷积/池化的输出边长: (input + 2*padding - kernel) / stride + 1 |
| RequireRank4 | 1 | 卷积/池化的入参形状校验 |
| ReduceAlongAxis | 1 | 沿指定轴执行规约操作(通用实现) |
| ReduceArgAxis | 1 | 沿指定轴找到极值的索引(argmax / argmin) |
| Add | 1 | |
| Subtract | 1 | |
| Multiply | 1 | |
| Divide | 1 | |
| Maximum | 1 | |
| Minimum | 1 | |
| Exp | 1 | |
| Log | 1 | |
| Sqrt | 1 | |
| Square | 1 | |
| Abs | 1 | |
| Sin | 1 | |
| Cos | 1 | |
| Tanh | 1 | |
| Sigmoid | 1 | |
| Negate | 1 | |
| Reciprocal | 1 | |
| Relu | 1 | |
| LeakyRelu | 1 | |
| Elu | 1 | |
| Gelu | 1 | |
| Swish | 1 | |
| AddScalar | 1 | |
| MultiplyScalar | 1 | |
| DivideScalar | 1 | |
| Pow | 1 | |
| Clip | 1 | |
| MatMul | 1 | |
| Transpose | 1 | |
| Slice | 1 | |
| Concat | 1 | |
| TopK | 1 | |
| Conv2D | 1 | |
| Conv2DBackwardInput | 1 | |
| Conv2DBackwardFilter | 1 | |
| Conv2DBackwardBias | 1 | |
| MaxPool2D | 1 | |
| MaxPool2DBackward | 1 | |
| SumAll | 1 | |
| MeanAll | 1 | |
| Sum | 1 | |
| Mean | 1 | |
| Max | 1 | |
| Min | 1 | |
| Prod | 1 | |
| StdDev | 1 | |
| L2Norm | 1 | |
| ArgMax | 1 | |
| ArgMin | 1 | |
| Softmax | 1 | |
| LogSoftmax | 1 | |
| SigmoidCrossEntropyWithLogits | 1 | |
| MseLoss | 1 | |
| L2Loss | 1 | |
| HuberLoss | 1 |
03 Properties
| Name | Overloads | Summary |
|---|---|---|
| SupportsDeviceResidency | 1 | 默认后端没有"设备常驻"概念。 |
| PinnedDeviceBytes | 1 | 默认后端不占用显存。 |
| Name | 1 |
04 Members
要求两个张量形状一致
Double(), Int32())由计算结果的一维数组与形状包装出新的张量
Func(Of Double, Double))逐元素一元运算的通用标量实现
逐元素二元运算的通用标量实现
阶跃函数(Heaviside): 大于 0 的元素取 1, 否则取 0
稀疏 × 稠密的主机(标量)实现:dense[batch, Rows] · W[Rows, Columns] → [batch, Columns]。
热路径直接操作底层数组,并对 0/1 脉冲输入跳过零源以利用稀疏性。 有 CUDA 内核的后端(CudaTensor)会覆盖本方法。
把可能为负的轴编号规范到 [0, Rank),并做越界校验
Int32(), Int32, Int32, Int32, Int32)把某根轴上的索引分解成「外层个数 / 轴长度 / 内层连续长度」三元组。
行主序下第 axis 维的步长是 innerSize = Π shape(axis+1..), 而 outerSize = Π shape(0..axis-1) 是前面各维的元素总数。 因此 "沿该轴取第 k 段" 就是一次长度为 innerSize 的连续块搬移。
带损失掩码的 softmax 交叉熵(CPU 参考实现)。
CPU 后端保持"逐行三趟循环"的朴素写法:求行最大值 → 求 exp 和 → 归一化。 GPU 后端(CudaTensor)会用"每行一个 block + 共享内存树形归约"的 融合内核覆盖它,把 3300 万次 exp 从主机搬到设备。 两条路径的损失定义与梯度定义必须严格一致,否则 CPU/GPU 结果不可比。
Double, Double, Double, Double, Double, Double, Double)默认后端不提供设备端 AdamW,返回 False 让调用方走主机循环。
默认后端不支持钉住,直接返回 False。
默认后端没有常驻缓冲,返回 False。
默认后端没有任何张量被钉住。
默认后端没有设备副本,因此无需同步。
Int32, Int32, Int32, Int32)卷积/池化的输出边长: (input + 2*padding - kernel) / stride + 1
String)卷积/池化的入参形状校验
沿指定轴执行规约操作(通用实现)
沿指定轴找到极值的索引(argmax / argmin)
默认后端没有"设备常驻"概念。
默认后端不占用显存。
Double)Double)Double)Double)Double)Double)Int32)Nullable(Of Int32))Nullable(Of Int32))Nullable(Of Int32))Int32)Int32)