NPU 算子
本节总结了 SyNAP VS6x0/SL16x0 系列 NPU 和配套软件栈支持的神经网络算子。对于每种算子类型,还记录了支持的张量类型和执行引擎。设计最大化使用 NN 核心执行的算子的网络将提供最佳性能。
执行引擎
| 缩写 | 描述 |
|---|---|
| NN | 神经网络引擎 |
| PPU | 并行处理单元 |
| TP | 张量处理器 |
张量类型
| 缩写 | 描述 |
|---|---|
| asym-u8 | 非对称仿射 uint8 |
| asym-i8 | 非对称仿射 int8 |
| pc-sym-i8 | 每通道对称 int8 |
| fp32 | 32 位浮点数 |
| fp16 | 16 位浮点数 |
| h | 半精度 |
| int16 | 16 位整数 |
| int32 | 32 位整数 |
备注
NN 引擎在乘法运算中支持 int16 动态定点卷积。其他层遵循表格;如果 NN 列中没有 asym-u8,则 int16 也不可用。
基本运算
| 算子 | 输入 | 核 | 输出 | NN | TP | PPU |
|---|---|---|---|---|---|---|
| CONV2D | asym-u8 | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | pc-sym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | fp32 | ✔ | |||
| fp16 | fp16 | fp16 | ✔ | |||
| CONV1D | asym-u8 | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | pc-sym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | fp32 | ✔ | |||
| fp16 | fp16 | fp16 | ✔ | |||
| DECONVOLUTION | asym-u8 | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | pc-sym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | fp32 | ✔ | |||
| fp16 | fp16 | fp16 | ✔ | |||
| DECONVOLUTION1D | asym-u8 | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | pc-sym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | fp32 | ✔ | |||
| fp16 | fp16 | fp16 | ✔ | |||
| GROUPED_CONV2D | asym-u8 | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | pc-sym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | fp32 | ✔ | |||
| fp16 | fp16 | fp16 | ✔ | |||
| FULLY_CONNECTED | asym-u8 | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | pc-sym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | fp32 | ✔ |
备注
卷积仅在满足以下条件时在 NN 引擎中执行:**stride == 1**、**kernel_size <= 15x15**、**dilation size + kernel size <= 15x15**。如果这些条件中的任何一个不满足,卷积将需要 TP 核心的支持,并且运行速度会显著降低。
激活运算
| 算子 | 输入 | 输出 | NN | TP | PPU |
|---|---|---|---|---|---|
| ELU | asym-u8 | asym-u8 | ✔ | ✔ | |
| asym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | ✔ | ✔ | ||
| fp16 | fp16 | ✔ | ✔ | ||
| HARD_SIGMOID | asym-u8 | asym-u8 | ✔ | ✔ | |
| asym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | ✔ | ✔ | ||
| fp16 | fp16 | ✔ | ✔ | ||
| SWISH | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| LEAKY_RELU | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| PRELU | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| RELU | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| RELUN | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| RSQRT | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| SIGMOID | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| SOFTRELU | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| SQRT | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| TANH | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| ABS | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| CLIP | asym-u8 | asym-u8 | ✔ | ✔ | |
| asym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | ✔ | ||
| EXP | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| LOG | asym-u8 | asym-u8 | ✔ | ✔ | |
| asym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | ✔ | ||
| NEG | asym-u8 | asym-u8 | ✔ | ✔ | |
| asym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | ✔ | ||
| MISH | asym-u8 | asym-u8 | ✔ | ✔ | |
| asym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | ✔ | ||
| SOFTMAX | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| LOG_SOFTMAX | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| SQUARE | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| SIN | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| LINEAR | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| ERF | asym-u8 | asym-u8 | ✔ | ✔ | |
| asym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | ✔ | ||
| GELU | asym-u8 | asym-u8 | ✔ | ✔ | |
| asym-i8 | asym-i8 | ✔ | ✔ | ||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | ✔ |
元素运算
| 算子 | 输入 | 输出 | NN | TP | PPU |
|---|---|---|---|---|---|
| ADD | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| SUBTRACT | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| MULTIPLY | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| DIVIDE | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| MAXIMUM | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| MINIMUM | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| POW | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| FLOORDIV | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| MATRIXMUL | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| RELATIONAL_OPS | asym-u8 | bool8 | ✔ | ||
| asym-i8 | bool8 | ✔ | |||
| fp32 | bool8 | ✔ | |||
| fp16 | bool8 | ✔ | |||
| bool8 | bool8 | ✔ | |||
| LOGICAL_OPS | bool8 | bool8 | ✔ | ||
| LOGICAL_NOT | bool8 | bool8 | ✔ | ||
| SELECT | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| bool8 | bool8 | ✔ | |||
| ADDN | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ |
归一化运算
| 算子 | 输入 | 输出 | NN | TP | PPU |
|---|---|---|---|---|---|
| BATCH_NORM | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| LRN2 | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| L2_NORMALIZE | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| LAYER_NORM | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| INSTANCE_NORM | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| BATCHNORM_SINGLE | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| MOMENTS | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| GROUP_NORM | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ |
重塑运算
| 算子 | 输入 | 输出 | NN | TP | PPU |
|---|---|---|---|---|---|
| EXPAND_BROADCAST | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| SLICE | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| SPLIT | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| CONCAT | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| STACK | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 | ✔ | |||
| fp32 | fp32 | ✔ | |||
| fp16 | fp16 | ✔ | |||
| UNSTACK | asym-u8 | asym-u8 | ✔ | ||
| asym-i8 | asym-i8 |