PTO ISA 与当前编译器 C++ API 表达完备性对比
目的:以 SuperNPUBench/benchmark-ptoisa/kernels/ 下全部 24 个 PTO 一层编程算子用到的 29 条 PTO ISA 指令为基准,逐条检查当前编译器(Linx-TileOP-API tileop_api.hpp)的 C++ 接口能否完整表达 PTO ISA 文档定义的语义,同时标注 Linx ISA(https://linxisa.github.io/isa/ )是否有对应硬件指令。只关注 API 签名层面的表达力差异(参数、名称、行为语义),不涉及后端实现方式。
排序规则:完全缺失 → 需要修改 → 名称和核心参数一致。
汇总列表
| # |
类别 |
PTO ISA 指令 |
使用算子 |
当前编译器 |
Linx ISA |
差异要点(编译器 / Linx ISA vs PTO ISA) |
| 1 |
编译器缺失 + Linx 缺失 |
TINSERT |
vec_019, vec_039 |
无 |
❌ 不存在 |
编译器无 API / Linx ISA 无此指令,仅有反向 TEXTRACT |
| 2 |
编译器缺失 + Linx 有 |
TREMS |
broadcast_pto |
无 |
✅ 存在 |
编译器无 API / Linx 有但缺 PTO 的 tmp+PrecisionType |
| 3 |
|
TCOLMAX |
reducemax_colvec×2 |
无 |
✅ 存在 |
编译器无 API / Linx 功能一致 |
| 4 |
|
TCOLPROD |
reduceprod_colvec |
无 |
✅ 存在 |
编译器无 API / Linx 功能一致 |
| 5 |
|
TCOLSUM |
reducesum_colvec×3 |
无 |
✅ 存在 |
编译器无 API / Linx 有但缺 PTO 的 tmp+isBinary 重载 |
| 6 |
|
TROWPROD |
reduceprod_rowvec |
无 |
✅ 存在 |
编译器无 API / Linx 有但缺 PTO 的 tmp |
| 7 |
|
TMOV |
concat×2, transpose, reducesum_rowvec_single, reducemax_rowvec_single |
无 |
✅ 存在 |
编译器仅有专用 TMOV_DN2NZ / Linx 有 Layout 变换但缺 PTO 的 ReLU/量化/Acc→Vec 变体 |
| 8 |
需要修改 |
MGATHER |
broadcast_pto, concat_gather, gather, transpose |
template_asm.h (部分) |
✅ 存在 |
编译器缺 Coalesce/GatherOOB / Linx 缺 Coalesce 模式,仅有 PadValue,索引为字节偏移非元素索引 |
| 9 |
|
MSCATTER |
concat_scatter |
template_asm.h (部分) |
✅ 存在 |
编译器缺 Coalesce/ScatterAtomicOp/ScatterOOB/ScatterConflict / Linx 均无,OOB 直接跳过 |
| 10 |
|
TCVT |
gelu_pto |
TCVT (缺参数) |
✅ 存在 |
编译器缺 RoundMode/SaturationMode/tmp / Linx 有 RMode(8种)+Sat(比 PTO 更丰富),但无 tmp |
| 11 |
|
TDIVS |
broadcast_pto, concat×2, transpose |
TDIVS (缺参数) |
✅ 存在 |
编译器缺 PrecisionType+反向重载 / Linx 均无 |
| 12 |
|
TEXP |
gelu_pto |
TEXP (缺参数) |
✅ 存在 |
编译器缺 PrecisionType / Linx 无 |
| 13 |
|
TRECIP |
gelu_pto |
TRECIP (缺参数) |
✅ 存在 |
编译器缺 PrecisionType / Linx 无 |
| 14 |
|
TROWMAX |
reducemax_rowvec×2 |
TROWMAX (缺 tmp) |
✅ 存在 |
编译器缺 tmp / Linx 无 tmp |
| 15 |
|
TROWSUM |
reducesum_rowvec×2 |
TROWSUM (缺 tmp) |
✅ 存在 |
编译器缺 tmp / Linx 无 tmp |
| 16 |
|
TTRANS |
transpose, transpose_vector_007 |
TTRANS (缺 tmp) |
✅ 存在 |
编译器缺 tmp / Linx 无 tmp,但有 DepSrc/Dst 依赖槽(PTO 用 WaitEvents) |
| 17 |
|
TLOAD |
全部算子 |
TCOPYIN (名不同) |
✅ 存在 |
编译器名称不同 / Linx 有 Layout(NORM/ND2NZ/…)+Stride+DepSrc/Dst(PTO 无) |
| 18 |
|
TSTORE |
全部算子 |
TCOPYOUT (名不同) |
✅ 存在 |
编译器名称不同,缺 AtomicType/preQuantScalar / Linx 有 Layout+Stride+DepSrc/Dst,但无原子/量化 |
| 19 |
|
TEXPANDS |
全部算子 |
TEXPANDSCALAR (名不同) |
✅ 存在 |
编译器名称不同 / Linx 功能一致 |
| 20 |
|
TROWEXPAND |
vec_07 |
TEXPANDROW (名不同) |
✅ 存在 |
编译器名称不同 / Linx 基本功能一致,PTO 有 ADD/SUB/MUL/DIV/MAX/MIN/EXPDIF 融合变体 |
| 21 |
一致 |
TCI |
broadcast_pto, concat×2, transpose |
TCI |
❌ 不存在 |
编译器 API 一致 / Linx ISA 无此指令,编译器当前用 __vec__ 模拟 |
| 22 |
|
TADD |
broadcast_pto, concat×2, transpose, reduction×4, gelu_pto |
TADD |
✅ 存在 |
无差异 |
| 23 |
|
TADDS |
gelu_pto |
TADDS |
✅ 存在 |
无差异 |
| 24 |
|
TMAX |
reducemax_rowvec×2, reducemax_colvec×2 |
TMAX |
✅ 存在 |
无差异 |
| 25 |
|
TMAXS |
gelu_pto |
TMAXS |
✅ 存在 |
无差异 |
| 26 |
|
TMINS |
gelu_pto |
TMINS |
✅ 存在 |
无差异 |
| 27 |
|
TMUL |
gelu_pto, reduceprod×2 |
TMUL |
✅ 存在 |
无差异 |
| 28 |
|
TMULS |
broadcast_pto, concat×2, gelu_pto, transpose |
TMULS |
✅ 存在 |
无差异 |
| 29 |
|
TSUB |
concat×2, transpose |
TSUB |
✅ 存在 |
无差异 |
统计:
- 编译器 vs PTO ISA:完全缺失 7 条 · 需要修改 13 条 · 一致 9 条
- Linx ISA vs PTO ISA:缺失 2 条(TCI/TINSERT) · 存在差异 14 条 · 完全相同 13 条
- 关键结论:编译器"缺失"的 7 条中,5 条是 Linx ISA 有但编译器未实现(TREMS/TCOLMAX/TCOLPROD/TCOLSUM/TROWPROD),1 条是 Linx ISA 有但仅有专用形式(TMOV),仅 1 条是 Linx ISA 本身就没有(TINSERT)。TCI 编译器有 API 但 Linx ISA 无硬件指令。
§1 完全缺失(当前编译器无对应 API)
1.1 TINSERT — tile 子区域写入
使用算子:broadcast_vec_019_pto.hpp, broadcast_vec_039_pto.hpp
PTO ISA 签名:
template <typename DstTileData, typename SrcTileData, typename... WaitEvents>
PTO_INST RecordEvent TINSERT(DstTileData &dst, SrcTileData &src,
uint16_t indexRow, uint16_t indexCol,
WaitEvents &... events);
行为:dst[indexRow+i, indexCol+j] = src[i,j]
当前编译器:无 TINSERT。仅有反向操作 TEXTRACT(dst, src, offset_i, offset_j)(从大 tile 中读取子区域),无写入子区域的操作。
Linx ISA 状态:❌ 不存在。Linx ISA 张量指令集中无 TINSERT,也无类似子区域写入指令。
影响:这是ISA 级缺口——Linx ISA 和编译器都没有。broadcast_vec_019/039 使用 TINSERT 将输入 tile 插入输出 tile 的多个列偏移位置。替代方案:用 TMOV + 手动地址偏移,或用 MGATHER 从 GM 直接取数。
需补充:编译器需用其他指令组合模拟(Linx ISA 无硬件指令支持)。
1.2 TREMS — 标量取余
使用算子:broadcast_pto.hpp
PTO ISA 签名:
template <auto PrecisionType = RemSAlgorithm::DEFAULT,
typename TileDataDst, typename TileDataSrc,
typename TileDataTmp, typename... WaitEvents>
PTO_INST RecordEvent TREMS(TileDataDst &dst, TileDataSrc &src,
typename TileDataSrc::DType scalar,
TileDataTmp &tmp, WaitEvents &... events);
当前编译器:无 TREMS。最接近的是 TREM(dst, src0, src1)(tile-tile),但:
| 维度 |
PTO ISA TREMS |
当前编译器 TREM |
| 操作形式 |
tile ÷ 标量 |
tile ÷ tile |
tmp 参数 |
有 |
无 |
PrecisionType |
有(DEFAULT / HIGH_PRECISION) |
无 |
| 支持类型 |
A5: float, int32, uint32, half, int16, uint16 |
仅 int32, int16(不支持 uint32) |
Linx ISA 状态:✅ 存在。Linx ISA 有 TREMS 指令(BSTART.TEPL TREMS, DataType),基本功能 dst[i] = src[i] % scalar 完整,支持 b64/b32/b16/b8 全类型(含 uint32)。
PTO vs Linx ISA 差异:
| 维度 |
PTO ISA |
Linx ISA |
| 基本功能 |
dst[i] = src[i] % scalar |
同 — 一致 |
tmp 参数 |
有(A2A3 路径需要) |
无 |
PrecisionType |
DEFAULT / HIGH_PRECISION |
无 |
| 支持类型 |
A5: float, int32, uint32, half, int16, uint16 |
b64/b32/b16/b8 全类型(更广) |
PTO 多出功能的应用场景:
tmp:A2A3 平台取余实现路径需要临时 tile。当前算子 broadcast_pto 未显式使用,但 A2A3 后端实现需要。
PrecisionType::HIGH_PRECISION:数值敏感场景的取余精度选择。当前算子未用。
需补充:直接按 Linx ISA 的 TREMS 指令编码实现编译器 API(Linx ISA 已有硬件指令,编译器只是没实现)。
1.3 TCOLMAX — 列向最大值归约
使用算子:reducemax_colvec.hpp, reducemax_colvec_unalign_120_8.hpp
PTO ISA 签名:
template <typename TileDataOut, typename TileDataIn, typename... WaitEvents>
PTO_INST RecordEvent TCOLMAX(TileDataOut &dst, TileDataIn &src,
WaitEvents &... events);
行为:dst[0, j] = max(src[i, j]) for all i(沿列方向取 max)
当前编译器:无 TCOLMAX。有行向 TROWMAX 但无列向对应。template_asm.h 有 TCOLMAX_TEPL 内联汇编但不在标准 API 中。
Linx ISA 状态:✅ 存在。Linx ISA 有 TCOLMAX 指令(BSTART.TEPL TCOLMAX, DataType),功能与 PTO ISA 完全一致。
需补充:直接按 Linx ISA 指令实现编译器 API。
1.4 TCOLPROD — 列向乘积归约
使用算子:reduceprod_colvec.hpp
PTO ISA 签名:
template <typename TileDataOut, typename TileDataIn, typename... WaitEvents>
PTO_INST RecordEvent TCOLPROD(TileDataOut &dst, TileDataIn &src,
WaitEvents &... events);
行为:dst[0, j] = prod(src[i, j]) for all i(沿列方向取乘积)
当前编译器:无 TCOLPROD。归约类只有 TROWSUM/TROWMAX。
Linx ISA 状态:✅ 存在。Linx ISA 有 TCOLPROD 指令,功能与 PTO ISA 完全一致。
需补充:直接按 Linx ISA 指令实现编译器 API。
1.5 TCOLSUM — 列向求和归约
使用算子:reducesum_colvec.hpp, reducesum_colvec_unalign_120_8.hpp, reducesum_colvec_single_tree.hpp
PTO ISA 签名(两个重载):
// 简单形式
template <typename TileDataOut, typename TileDataIn, typename... WaitEvents>
PTO_INST RecordEvent TCOLSUM(TileDataOut &dst, TileDataIn &src,
WaitEvents &... events);
// 带 tmp + isBinary 的重载
template <typename TileDataOut, typename TileDataIn, typename TileDataTmp, typename... WaitEvents>
PTO_INST RecordEvent TCOLSUM(TileDataOut &dst, TileDataIn &src,
TileDataTmp &tmp, bool isBinary,
WaitEvents &... events);
行为:dst[0, j] = sum(src[i, j]) for all i(沿列方向求和)
当前编译器:无 TCOLSUM。有行向 TROWSUM 但无列向对应。template_asm.h 有 TCOLSUM_TEPL 内联汇编但不在标准 API 中。
Linx ISA 状态:✅ 存在。Linx ISA 有 TCOLSUM 指令(BSTART.TEPL TCOLSUM, DataType),基本功能完整。
PTO vs Linx ISA 差异:
| 维度 |
PTO ISA |
Linx ISA |
| 基本功能 |
列向求和 |
同 — 一致 |
tmp+isBinary 重载 |
有(A2A3 路径需要临时 tile + 二进制树求和标志) |
无 |
PTO 多出功能的应用场景:
tmp+isBinary:A2A3 平台的树形归约优化路径。当前算子未显式使用。
需补充:按 Linx ISA 指令实现编译器 API,可选支持 PTO 的 tmp+isBinary 重载。
1.6 TROWPROD — 行向乘积归约
使用算子:reduceprod_rowvec.hpp
PTO ISA 签名:
template <typename TileDataOut, typename TileDataIn, typename TileDataTmp, typename... WaitEvents>
PTO_INST RecordEvent TROWPROD(TileDataOut &dst, TileDataIn &src,
TileDataTmp &tmp, WaitEvents &... events);
行为:dst[i, 0] = prod(src[i, j]) for all j(沿行方向取乘积)
当前编译器:无 TROWPROD。有 TROWSUM/TROWMAX 但无 TROWPROD。
Linx ISA 状态:✅ 存在。Linx ISA 有 TROWPROD 指令,基本功能完整。
PTO vs Linx ISA 差异:
| 维度 |
PTO ISA |
Linx ISA |
| 基本功能 |
行向乘积归约 |
同 — 一致 |
tmp 参数 |
有(A2A3 路径需要) |
无 |
需补充:按 Linx ISA 指令实现编译器 API。
1.7 TMOV — 通用 tile 拷贝/转换
使用算子:concat_gather.hpp, concat_scatter.hpp, transpose.hpp, reducesum_rowvec_single_tree.hpp, reducemax_rowvec_single_tree.hpp
PTO ISA 签名(6 个变体,核心形式):
// Variant 1: Standard Move (纯拷贝)
template <typename DstTileData, typename SrcTileData, typename... WaitEvents>
PTO_INST RecordEvent TMOV(DstTileData &dst, SrcTileData &src,
WaitEvents &... events);
// Variant 2: ReLU Move
TMOV<..., reluMode>(dst, src, events...);
// Variant 3: Accumulator-to-Vector
TMOV<..., mode, reluMode>(dst, src, events...);
// Variant 4: Vector-Quant Move (通过 fix-pipe 量化)
TMOV<..., FpTileData, mode, reluMode>(dst, src, fp, events...);
// Variant 5: Scalar-Quant Move
TMOV<..., reluMode>(dst, src, preQuantScalar, events...);
// Variant 6: Fix-Pipe Move (TMOV_FP)
TMOV_FP(dst, src, fp, events...);
行为:通用 tile 间数据拷贝/转换,支持 ReLU、量化、Acc→Vec 转换等多种模式。
当前编译器:无通用 TMOV。jcore/template_asm.hpp 仅有专用布局转换变体(TMOV_DN2NZ, TMOV_DN2ZN, TMOV_NZ2DN 等),不支持通用 tile 间拷贝。TCOPY(dst, src) 仅支持同类型同布局拷贝。
Linx ISA 状态:✅ 存在。Linx ISA 有 TMOV 指令(BSTART.TMA TMOV, DataType),支持 Layout 变换(NORM/NZ2ND/NZ2ZN 等)和 PadValue。
PTO vs Linx ISA 差异:
| 维度 |
PTO ISA |
Linx ISA |
| 标准拷贝 |
✅ Variant 1 |
✅ Layout=NORM |
| 布局变换 |
❌ 无(PTO 用独立指令 TMOV_DN2NZ 等) |
✅ Layout=ND2NZ 等 |
| ReLU 拷贝 |
✅ Variant 2 |
❌ 无 |
| Acc→Vec 转换 |
✅ Variant 3 |
❌ 无 |
| 量化拷贝 |
✅ Variant 4/5/6 |
❌ 无 |
PTO 多出功能的应用场景:
TMOV ReLU 变体:矩阵乘输出后 ReLU 激活(融合,省一条指令)。当前算子未用。
TMOV Acc→Vec:GEMM 输出从 Acc 转 Vec 再做后处理。当前算子未用。
TMOV 量化变体:量化推理中 Acc→int8 的融合量化路径。当前算子未用。
注:Linx ISA 的 TMOV 有 Layout 变换功能,PTO ISA 文档中布局变换用独立指令(TMOV_DN2NZ 等)。双方各有对方没有的功能。
需补充:编译器可直接按 Linx ISA 的 TMOV 指令实现通用拷贝 API;ReLU/量化变体需编译器扩展(Linx ISA 无对应硬件功能,可能需 fix-pipe 路径)。
§2 需要修改(API 存在但名称或参数不完整)
2.1 MGATHER — 按索引从 global memory 取数
使用算子:broadcast_pto, concat_gather, gather_pto, transpose
| 维度 |
PTO ISA |
当前编译器 (template_asm.h) |
Linx ISA |
| Coalesce 模式 |
Row(按行 gather)/ Elem(逐元素 gather) |
无选择 |
无 — 只有一种模式 |
| GatherOOB |
Undefined / Clamp / Wrap / Zero |
无 |
PadValue(Null/Zero/Max/Min) |
| 索引语义 |
Row: 行索引;Elem: 元素索引 |
字节偏移 |
字节偏移(u16/u32/u64) |
| OOB 语义 |
Clamp 钳位、Wrap 取模、Zero 填零、Undefined 不检查 |
无 |
PadValue 填固定值,无 Clamp/Wrap |
PTO vs Linx ISA 关键差异:Linx ISA 的 MGATHER 仅有字节偏移模式,无 Coalesce 模式选择。PTO ISA 的 Coalesce::Row(按行索引取整行,DMA 合并)和 Coalesce::Elem(逐元素索引)在 Linx ISA 中无法表达。
PTO 多出功能的应用场景:
| PTO 多出的功能 |
作用 |
当前算子是否用到 |
其他应用场景 |
Coalesce::Row |
一个行索引取整行,DMA 合并 |
✅ gather_pto |
Embedding lookup、KV-cache 读取 |
Coalesce::Elem |
每个元素独立索引 |
✅ broadcast_pto、concat_gather、transpose |
随机索引取数 |
GatherOOB::Clamp |
越界索引钳到合法范围 |
❌ |
Embedding lookup 中 padding 处理 |
GatherOOB::Wrap |
越界索引取模绕回 |
❌ |
循环缓冲区读取、哈希表查找 |
GatherOOB::Zero |
越界位置填零 |
❌ |
变长序列 padding(attention mask) |
| 元素索引语义 |
调用方无需手动乘 sizeof |
✅ 全部用 MGATHER 的算子 |
所有逐元素 gather 场景 |
需修改:增加 Coalesce/GatherOOB 模板参数;增加 Coalesce::Row 和 Coalesce::Elem 模式;统一索引语义(元素索引)。其中 Coalesce 模式是 PTO ISA 独有的,Linx ISA 无对应硬件功能,编译器需在软件层模拟或扩展硬件。
2.2 MSCATTER — 按索引写回 global memory
使用算子:concat_scatter.hpp
| 维度 |
PTO ISA |
当前编译器 (template_asm.h) |
Linx ISA |
| Coalesce 模式 |
Row / Elem |
无 |
无 |
| ScatterAtomicOp |
None / Add / Max / Min |
无 |
无 |
| ScatterOOB |
Undefined / Skip / Clamp / Wrap |
无 |
OOB 直接跳过(等价 Skip) |
| ScatterConflict (A5) |
Last / Default |
无 |
无 |
| 索引语义 |
行索引或元素索引 |
字节偏移 |
字节偏移 |
PTO 多出功能的应用场景:
| PTO 多出的功能 |
作用 |
当前算子是否用到 |
其他应用场景 |
ScatterAtomicOp::Add |
原子加法 scatter |
❌ |
梯度累积(分布式训练中多个 worker 向同一参数 buffer 原子累加梯度) |
ScatterAtomicOp::Max |
原子取最大 scatter |
❌ |
NMS(非极大值抑制)中按索引更新最大值 |
ScatterAtomicOp::Min |
原子取最小 scatter |
❌ |
距离场计算中按索引更新最小值 |
ScatterConflict::Last |
确定性冲突解决 |
❌ |
A5 SIMT 并行 scatter 需要确定性结果 |
Coalesce::Row |
按行 scatter |
❌ |
反向 embedding lookup、KV-cache 更新 |
需修改:增加模式参数;统一索引语义。ScatterAtomicOp/ScatterConflict 是 PTO ISA 独有,Linx ISA 无对应硬件功能。
2.3 TCVT — 类型转换
使用算子:gelu_pto.hpp
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| 签名 |
4 个重载(带/不带 tmp × 带/不带 SaturationMode) |
TCVT(dst, src) 仅一种 |
有完整 RMode+Sat |
| RoundMode |
CAST_RINT/CAST_ROUND/CAST_FLOOR/CAST_CEIL/CAST_TRUNC(5种) |
无 |
RNONE/RNE/RTZ/RDN/RUP/RNA/RTO/RHB(8种,更丰富) |
| SaturationMode |
ON / OFF(可选) |
无 |
Sat 标志(功能一致) |
| tmp 参数 |
有(可选重载) |
无 |
无 |
PTO vs Linx ISA 关键差异:Linx ISA 的 RMode 比 PTO ISA RoundMode 多 3 种(RNONE/RNA/RTO/RHB),表达力更强。PTO ISA 多出 tmp 参数(A2A3 路径需要)。
PTO 多出功能的应用场景:
tmp 参数:A2A3 平台 fp16↔fp32 转换需要临时 tile。✅ gelu_pto 直接使用(fp16↔fp32)。
需修改:增加 RoundMode(必选,可直接映射 Linx ISA 的 RMode)、SaturationMode(可选)、tmp(可选重载)。
2.4 TDIVS — 标量整除
使用算子:broadcast_pto, concat_gather, concat_scatter, transpose
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| PrecisionType |
DivAlgorithm::DEFAULT / HIGH_PRECISION |
无 |
无 |
| 反向重载 |
有:TDIVS(dst, scalar, src0)(scalar ÷ tile) |
无 |
无 |
PTO 多出功能的应用场景:
HIGH_PRECISION:需要数值精度的场景(如 LayerNorm 中的均值/方差计算)。当前算子未用。
- 反向重载:归一化中
scale / x 的场景。当前算子未用。
需修改:增加 PrecisionType 模板参数;增加反向重载。Linx ISA 无 PrecisionType,编译器需在软件层模拟高精度模式。
2.5 TEXP — 指数运算
使用算子:gelu_pto.hpp
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| PrecisionType |
ExpAlgorithm::DEFAULT / HIGH_PRECISION |
无 |
无 |
PTO 多出功能的应用场景:
HIGH_PRECISION:GELU/Softmax 中 exp 的精度影响数值稳定性。当前算子 gelu_pto 使用默认精度。
需修改:增加 PrecisionType 模板参数。Linx ISA 无此参数,编译器需在软件层模拟。
2.6 TRECIP — 倒数
使用算子:gelu_pto.hpp
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| PrecisionType |
RecipAlgorithm::DEFAULT / HIGH_PRECISION |
无 |
无 |
PTO 多出功能的应用场景:
HIGH_PRECISION:1/x 计算中避免精度损失(如 softmax 分母 1/(1+exp))。当前算子 gelu_pto 使用默认精度。
需修改:增加 PrecisionType 模板参数。Linx ISA 无此参数。
2.7 TROWMAX — 行向最大值归约
使用算子:reducemax_rowvec.hpp, reducemax_rowvec_single_tree.hpp
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| 签名 |
TROWMAX(dst, src, tmp, events...) |
TROWMAX(dst, src) |
TROWMAX(dst, src) — 无 tmp |
| tmp 参数 |
有:TileDataTmp &tmp |
无 |
无 |
PTO vs Linx ISA 差异:PTO ISA 有 tmp 参数(A2A3 路径需要临时 tile 存中间结果),Linx ISA 无。
PTO 多出功能的应用场景:
tmp:A2A3 平台归约需要临时 tile。当前算子未显式传 tmp。A5 平台 tmp 接受但不参与约束。
需修改:增加 tmp 参数。Linx ISA 无此参数,编译器对 A2A3 需自行分配临时 tile。
2.8 TROWSUM — 行向求和归约
使用算子:reducesum_rowvec.hpp, reducesum_rowvec_single_tree.hpp
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| 签名 |
TROWSUM(dst, src, tmp, events...) |
TROWSUM(dst, src) |
TROWSUM(dst, src) — 无 tmp |
| tmp 参数 |
有 |
无 |
无 |
同 TROWMAX,PTO 多出 tmp(A2A3 路径)。需修改:增加 tmp 参数。
2.9 TTRANS — 转置
使用算子:transpose.hpp, transpose_vector_007.hpp
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| 签名 |
TTRANS(dst, src, tmp, events...) |
TTRANS(dst, src) |
TTRANS(dst, src) — 无 tmp |
| tmp 参数 |
有 |
无 |
无 |
| 依赖槽 |
用 WaitEvents |
无 |
有 DepSrc/Dst 依赖槽 |
PTO vs Linx ISA 差异:PTO 有 tmp,Linx 无。Linx 有 DepSrc/Dst 依赖槽(PTO 用 WaitEvents 代替)。
需修改:增加 tmp 参数。
2.10 TLOAD — 从 global memory 加载到 tile
使用算子:全部 24 个算子
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| 函数名 |
TLOAD |
TCOPYIN |
TLOAD |
| 核心参数 |
(dst, src) |
(dst, src) — 一致 |
(dst, src) + Layout + Stride + DepSrc/Dst |
| Layout 变换 |
无(PTO 用独立指令) |
无 |
NORM/ND2NZ/ND2ZN/DN2NZ/DN2ZN |
| Stride |
无 |
无 |
RegSrc1 跨步参数 |
PTO vs Linx ISA 差异:Linx ISA 的 TLOAD 功能更丰富——支持加载时做布局变换(ND2NZ 等)和跨步访存,PTO ISA 无这些功能。
需修改:重命名为 TLOAD(保留 TCOPYIN 为 deprecated 别名)。编译器可利用 Linx ISA 的 Layout/Stride 增强功能。
2.11 TSTORE — tile 写回 global memory
使用算子:全部 24 个算子
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| 函数名 |
TSTORE |
TCOPYOUT |
TSTORE |
| AtomicType |
AtomicNone(默认)/ 原子写 |
无 |
无 |
| preQuantScalar |
有重载 |
无 |
无 |
| Layout 变换 |
无 |
无 |
NORM/NZ2ND/ZN2ND |
| Stride |
无 |
无 |
RegSrc1 跨步 |
PTO vs Linx ISA 差异:双方各有对方没有的功能。PTO 有 AtomicType/preQuantScalar(Linx 无);Linx 有 Layout/Stride(PTO 无)。
PTO 多出功能的应用场景:
AtomicType:原子更新参数(分布式训练)、原子累加输出。当前算子未用。
preQuantScalar:量化推理中 fp32→int8 写回时融合量化,减少一次单独量化 pass。当前算子未用。
需修改:重命名为 TSTORE;增加 AtomicType/preQuantScalar(Linx ISA 无对应硬件功能)。
2.12 TEXPANDS — 标量广播填充 tile
使用算子:全部 24 个算子
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| 函数名 |
TEXPANDS |
TEXPANDSCALAR |
TEXPANDS |
| 核心参数 |
(dst, scalar) |
(dst, s) — 一致 |
(dst, scalar) — 一致 |
| 行为 |
dst[i,j] = scalar |
同 |
同 |
Linx ISA 状态:✅ 存在,功能完全一致。
需修改:重命名为 TEXPANDS(保留旧名别名)。
2.13 TROWEXPAND — 行广播
使用算子:broadcast_vec_07_pto.hpp
| 维度 |
PTO ISA |
当前编译器 |
Linx ISA |
| 函数名 |
TROWEXPAND |
TEXPANDROW |
TROWEXPAND |
| 核心参数 |
(dst, src) |
(dst, src) — 一致 |
(dst, src) — 一致 |
| 行为 |
dst[i,j] = src[i,0] |
同 |
同 |
| 融合变体 |
TROWEXPANDADD/SUB/MUL/DIV/MAX/MIN/EXPDIF |
无 |
Linx ISA 导航显示有同名变体 |
PTO 多出功能的应用场景:
| PTO 多出的功能 |
作用 |
当前算子是否用到 |
其他应用场景 |
TROWEXPANDADD |
广播+加法融合:dst[i,j] = src0[i,j] + src1[i,0] |
❌ |
Softmax 中行最大值广播+减法、LayerNorm 中均值广播+减法 |
TROWEXPANDMUL |
广播+乘法融合 |
❌ |
Softmax 中行求和广播+除法、scale 乘法 |
TROWEXPANDEXPDIF |
广播+exp(差)融合 |
❌ |
Softmax 中 exp(x - row_max) 一步完成 |
注:这些融合变体对 Softmax/LayerNorm 等归约+广播模式算子非常有价值,可将"归约→广播→逐元素运算"三步融合为两步。
需修改:重命名为 TROWEXPAND;可选支持融合变体。
§3 名称和核心参数一致
以下 9 条指令的函数名、核心参数列表、行为语义与 PTO ISA 文档一致,不需要修改:
| # |
指令 |
PTO ISA 签名 |
当前编译器签名 |
Linx ISA |
行为 |
| 1 |
TCI |
TCI(dst, start) <int descending> |
TCI(dst, s) <int descending> |
❌ 不存在 |
dst[i] = start + i(升序) |
| 2 |
TADD |
TADD(dst, src0, src1) |
TADD(dst, src0, src1) |
✅ 存在 |
dst[i] = src0[i] + src1[i] |
| 3 |
TADDS |
TADDS(dst, src0, scalar) |
TADDS(dst, src, s) |
✅ 存在 |
dst[i] = src[i] + scalar |
| 4 |
TMAX |
TMAX(dst, src0, src1) |
TMAX(dst, src0, src1) |
✅ 存在 |
dst[i] = max(src0[i], src1[i]) |
| 5 |
TMAXS |
TMAXS(dst, src, scalar) |
TMAXS(dst, src, s) |
✅ 存在 |
dst[i] = max(src[i], scalar) |
| 6 |
TMINS |
TMINS(dst, src, scalar) |
TMINS(dst, src, s) |
✅ 存在 |
dst[i] = min(src[i], scalar) |
| 7 |
TMUL |
TMUL(dst, src0, src1) |
TMUL(dst, src0, src1) |
✅ 存在 |
dst[i] = src0[i] * src1[i] |
| 8 |
TMULS |
TMULS(dst, src0, scalar) |
TMULS(dst, src, s) |
✅ 存在 |
dst[i] = src[i] * scalar |
| 9 |
TSUB |
TSUB(dst, src0, src1) |
TSUB(dst, src0, src1) |
✅ 存在 |
dst[i] = src0[i] - src1[i] |
TCI 特殊说明:编译器 API 与 PTO ISA 一致,但 Linx ISA 无此硬件指令。编译器当前用 __vec__ 块模拟实现(jcore/TCI.hpp)。若要真正一层化,需用其他 Linx ISA 指令组合(如 TEXPANDS + TADDS 迭代)或扩展硬件 ISA。
Linx ISA 通用特性:Linx ISA 张量指令普遍有 PadValue(OOB 填充值:Null/Zero/Max/Min)参数,PTO ISA 文档未显式提及此参数。PadValue 是 Linx ISA 的通用机制,不改变核心计算语义。
§4 修改优先级
P0 — 阻塞算子表达(无法写出 PTO 代码)
| 指令 |
问题 |
Linx ISA 是否有 |
阻塞的算子 |
TREMS |
编译器无 API |
✅ 有 |
broadcast_pto |
TINSERT |
编译器无 API |
❌ 无(ISA 级缺口) |
broadcast_vec_019, broadcast_vec_039 |
TCOLMAX |
编译器无 API |
✅ 有 |
reducemax_colvec×2 |
TCOLSUM |
编译器无 API |
✅ 有 |
reducesum_colvec×3 |
TCOLPROD |
编译器无 API |
✅ 有 |
reduceprod_colvec |
TROWPROD |
编译器无 API |
✅ 有 |
reduceprod_rowvec |
TMOV |
编译器无通用 API |
✅ 有(Layout 变换版) |
concat×2, transpose, reducesum_rowvec_single, reducemax_rowvec_single |
TCVT |
缺 RoundMode |
✅ 有(RMode+Sat) |
gelu_pto |
MGATHER |
缺 Coalesce 模式 + 索引语义不同 |
✅ 有(但无 Coalesce) |
broadcast_pto, concat_gather, gather, transpose |
MSCATTER |
缺 Coalesce 模式 + 索引语义不同 |
✅ 有(但无 Coalesce) |
concat_scatter |
P1 — 语义不完整(可写但表达力受限)
| 指令 |
问题 |
Linx ISA 是否有 |
TLOAD/TSTORE/TEXPANDS/TROWEXPAND |
名称不同,PTO 代码无法直接编译 |
✅ 有(名称一致) |
TDIVS/TEXP/TRECIP |
缺 PrecisionType |
✅ 有(但无 PrecisionType) |
TROWMAX/TROWSUM/TTRANS |
缺 tmp 参数 |
✅ 有(但无 tmp) |
TSTORE |
缺 AtomicType/preQuantScalar |
✅ 有(但无原子/量化) |
P2 — PTO ISA 独有功能扩展(Linx ISA 无对应硬件功能)
| PTO 多出的功能 |
应用场景 |
Linx ISA 状态 |
MGATHER::Coalesce (Row/Elem) |
gather、broadcast、concat、transpose — 当前算子直接使用 |
❌ 无 |
MSCATTER::ScatterAtomicOp (Add/Max/Min) |
梯度累积、NMS、距离场 |
❌ 无 |
MSCATTER::ScatterConflict |
A5 并行 scatter 确定性 |
❌ 无 |
TSTORE::preQuantScalar |
量化推理融合写回 |
❌ 无 |
TROWEXPAND 融合变体 (ADD/SUB/MUL/EXPDIF) |
Softmax、LayerNorm 归约+广播融合 |
需验证 |
TMOV ReLU/量化变体 |
GEMM 后处理融合 |
❌ 无 |
PrecisionType (TEXP/TRECIP/TDIVS) |
数值敏感场景(Softmax/LayerNorm/GELU) |
❌ 无 |
TCI |
索引序列生成 — broadcast_pto 直接使用 |
❌ 无(ISA 级缺口) |
TINSERT |
tile 子区域写入 — vec_019/039 直接使用 |
❌ 无(ISA 级缺口) |
§5 统计总结
| 统计项 |
数量 |
| PTO 算子使用指令总数 |
29 |
| 编译器 vs PTO ISA:完全缺失(需新增 API) |
7 |
| 编译器 vs PTO ISA:需要修改(名称或参数不完整) |
13 |
| 编译器 vs PTO ISA:一致 |
9 |
| Linx ISA vs PTO ISA:缺失(ISA 级缺口) |
2(TCI/TINSERT) |
| Linx ISA vs PTO ISA:存在差异 |
14 |
| Linx ISA vs PTO ISA:完全相同 |
13 |
| 编译器缺失中 Linx ISA 有的(可直接实现) |
6(TREMS/TCOLMAX/TCOLPROD/TCOLSUM/TROWPROD/TMOV) |
| 编译器缺失中 Linx ISA 也没有的(ISA 级缺口) |
1(TINSERT) |
| 编译器有 API 但 Linx ISA 无硬件指令的 |
1(TCI) |
| PTO ISA 独有功能(Linx ISA 无对应) |
Coalesce/ScatterAtomicOp/PrecisionType/tmp/融合变体/AtomicType/preQuantScalar |
| 涉及的算子文件总数 |
24 |
PTO ISA 与当前编译器 C++ API 表达完备性对比
汇总列表
TINSERTTEXTRACTTREMStmp+PrecisionTypeTCOLMAXTCOLPRODTCOLSUMtmp+isBinary重载TROWPRODtmpTMOVTMOV_DN2NZ/ Linx 有Layout变换但缺 PTO 的 ReLU/量化/Acc→Vec 变体MGATHERCoalesce/GatherOOB/ Linx 缺Coalesce模式,仅有PadValue,索引为字节偏移非元素索引MSCATTERCoalesce/ScatterAtomicOp/ScatterOOB/ScatterConflict/ Linx 均无,OOB 直接跳过TCVTTCVT(缺参数)RoundMode/SaturationMode/tmp/ Linx 有RMode(8种)+Sat(比 PTO 更丰富),但无tmpTDIVSTDIVS(缺参数)PrecisionType+反向重载 / Linx 均无TEXPTEXP(缺参数)PrecisionType/ Linx 无TRECIPTRECIP(缺参数)PrecisionType/ Linx 无TROWMAXTROWMAX(缺 tmp)tmp/ Linx 无tmpTROWSUMTROWSUM(缺 tmp)tmp/ Linx 无tmpTTRANSTTRANS(缺 tmp)tmp/ Linx 无tmp,但有DepSrc/Dst依赖槽(PTO 用WaitEvents)TLOADTCOPYIN(名不同)Layout(NORM/ND2NZ/…)+Stride+DepSrc/Dst(PTO 无)TSTORETCOPYOUT(名不同)AtomicType/preQuantScalar/ Linx 有Layout+Stride+DepSrc/Dst,但无原子/量化TEXPANDSTEXPANDSCALAR(名不同)TROWEXPANDTEXPANDROW(名不同)TCITCI__vec__模拟TADDTADDTADDSTADDSTMAXTMAXTMAXSTMAXSTMINSTMINSTMULTMULTMULSTMULSTSUBTSUB§1 完全缺失(当前编译器无对应 API)
1.1 TINSERT — tile 子区域写入
使用算子:broadcast_vec_019_pto.hpp, broadcast_vec_039_pto.hpp
PTO ISA 签名:
行为:
dst[indexRow+i, indexCol+j] = src[i,j]当前编译器:无
TINSERT。仅有反向操作TEXTRACT(dst, src, offset_i, offset_j)(从大 tile 中读取子区域),无写入子区域的操作。Linx ISA 状态:❌ 不存在。Linx ISA 张量指令集中无 TINSERT,也无类似子区域写入指令。
影响:这是ISA 级缺口——Linx ISA 和编译器都没有。broadcast_vec_019/039 使用 TINSERT 将输入 tile 插入输出 tile 的多个列偏移位置。替代方案:用
TMOV+ 手动地址偏移,或用MGATHER从 GM 直接取数。需补充:编译器需用其他指令组合模拟(Linx ISA 无硬件指令支持)。
1.2 TREMS — 标量取余
使用算子:broadcast_pto.hpp
PTO ISA 签名:
当前编译器:无
TREMS。最接近的是TREM(dst, src0, src1)(tile-tile),但:TREMSTREMtmp参数PrecisionTypeDEFAULT/HIGH_PRECISION)Linx ISA 状态:✅ 存在。Linx ISA 有
TREMS指令(BSTART.TEPL TREMS, DataType),基本功能dst[i] = src[i] % scalar完整,支持 b64/b32/b16/b8 全类型(含 uint32)。PTO vs Linx ISA 差异:
dst[i] = src[i] % scalartmp参数PrecisionTypeDEFAULT/HIGH_PRECISIONPTO 多出功能的应用场景:
tmp:A2A3 平台取余实现路径需要临时 tile。当前算子 broadcast_pto 未显式使用,但 A2A3 后端实现需要。PrecisionType::HIGH_PRECISION:数值敏感场景的取余精度选择。当前算子未用。需补充:直接按 Linx ISA 的
TREMS指令编码实现编译器 API(Linx ISA 已有硬件指令,编译器只是没实现)。1.3 TCOLMAX — 列向最大值归约
使用算子:reducemax_colvec.hpp, reducemax_colvec_unalign_120_8.hpp
PTO ISA 签名:
行为:
dst[0, j] = max(src[i, j]) for all i(沿列方向取 max)当前编译器:无
TCOLMAX。有行向TROWMAX但无列向对应。template_asm.h有TCOLMAX_TEPL内联汇编但不在标准 API 中。Linx ISA 状态:✅ 存在。Linx ISA 有
TCOLMAX指令(BSTART.TEPL TCOLMAX, DataType),功能与 PTO ISA 完全一致。需补充:直接按 Linx ISA 指令实现编译器 API。
1.4 TCOLPROD — 列向乘积归约
使用算子:reduceprod_colvec.hpp
PTO ISA 签名:
行为:
dst[0, j] = prod(src[i, j]) for all i(沿列方向取乘积)当前编译器:无
TCOLPROD。归约类只有TROWSUM/TROWMAX。Linx ISA 状态:✅ 存在。Linx ISA 有
TCOLPROD指令,功能与 PTO ISA 完全一致。需补充:直接按 Linx ISA 指令实现编译器 API。
1.5 TCOLSUM — 列向求和归约
使用算子:reducesum_colvec.hpp, reducesum_colvec_unalign_120_8.hpp, reducesum_colvec_single_tree.hpp
PTO ISA 签名(两个重载):
行为:
dst[0, j] = sum(src[i, j]) for all i(沿列方向求和)当前编译器:无
TCOLSUM。有行向TROWSUM但无列向对应。template_asm.h有TCOLSUM_TEPL内联汇编但不在标准 API 中。Linx ISA 状态:✅ 存在。Linx ISA 有
TCOLSUM指令(BSTART.TEPL TCOLSUM, DataType),基本功能完整。PTO vs Linx ISA 差异:
tmp+isBinary重载PTO 多出功能的应用场景:
tmp+isBinary:A2A3 平台的树形归约优化路径。当前算子未显式使用。需补充:按 Linx ISA 指令实现编译器 API,可选支持 PTO 的
tmp+isBinary重载。1.6 TROWPROD — 行向乘积归约
使用算子:reduceprod_rowvec.hpp
PTO ISA 签名:
行为:
dst[i, 0] = prod(src[i, j]) for all j(沿行方向取乘积)当前编译器:无
TROWPROD。有TROWSUM/TROWMAX但无TROWPROD。Linx ISA 状态:✅ 存在。Linx ISA 有
TROWPROD指令,基本功能完整。PTO vs Linx ISA 差异:
tmp参数需补充:按 Linx ISA 指令实现编译器 API。
1.7 TMOV — 通用 tile 拷贝/转换
使用算子:concat_gather.hpp, concat_scatter.hpp, transpose.hpp, reducesum_rowvec_single_tree.hpp, reducemax_rowvec_single_tree.hpp
PTO ISA 签名(6 个变体,核心形式):
行为:通用 tile 间数据拷贝/转换,支持 ReLU、量化、Acc→Vec 转换等多种模式。
当前编译器:无通用
TMOV。jcore/template_asm.hpp仅有专用布局转换变体(TMOV_DN2NZ,TMOV_DN2ZN,TMOV_NZ2DN等),不支持通用 tile 间拷贝。TCOPY(dst, src)仅支持同类型同布局拷贝。Linx ISA 状态:✅ 存在。Linx ISA 有
TMOV指令(BSTART.TMA TMOV, DataType),支持Layout变换(NORM/NZ2ND/NZ2ZN等)和PadValue。PTO vs Linx ISA 差异:
Layout=NORMLayout=ND2NZ等PTO 多出功能的应用场景:
TMOVReLU 变体:矩阵乘输出后 ReLU 激活(融合,省一条指令)。当前算子未用。TMOVAcc→Vec:GEMM 输出从 Acc 转 Vec 再做后处理。当前算子未用。TMOV量化变体:量化推理中 Acc→int8 的融合量化路径。当前算子未用。需补充:编译器可直接按 Linx ISA 的
TMOV指令实现通用拷贝 API;ReLU/量化变体需编译器扩展(Linx ISA 无对应硬件功能,可能需 fix-pipe 路径)。§2 需要修改(API 存在但名称或参数不完整)
2.1 MGATHER — 按索引从 global memory 取数
使用算子:broadcast_pto, concat_gather, gather_pto, transpose
Row(按行 gather)/Elem(逐元素 gather)Undefined/Clamp/Wrap/ZeroPadValue(Null/Zero/Max/Min)PTO vs Linx ISA 关键差异:Linx ISA 的 MGATHER 仅有字节偏移模式,无
Coalesce模式选择。PTO ISA 的Coalesce::Row(按行索引取整行,DMA 合并)和Coalesce::Elem(逐元素索引)在 Linx ISA 中无法表达。PTO 多出功能的应用场景:
Coalesce::RowCoalesce::ElemGatherOOB::ClampGatherOOB::WrapGatherOOB::Zero需修改:增加
Coalesce/GatherOOB模板参数;增加Coalesce::Row和Coalesce::Elem模式;统一索引语义(元素索引)。其中Coalesce模式是 PTO ISA 独有的,Linx ISA 无对应硬件功能,编译器需在软件层模拟或扩展硬件。2.2 MSCATTER — 按索引写回 global memory
使用算子:concat_scatter.hpp
Row/ElemNone/Add/Max/MinUndefined/Skip/Clamp/WrapSkip)Last/DefaultPTO 多出功能的应用场景:
ScatterAtomicOp::AddScatterAtomicOp::MaxScatterAtomicOp::MinScatterConflict::LastCoalesce::Row需修改:增加模式参数;统一索引语义。
ScatterAtomicOp/ScatterConflict是 PTO ISA 独有,Linx ISA 无对应硬件功能。2.3 TCVT — 类型转换
使用算子:gelu_pto.hpp
TCVT(dst, src)仅一种RMode+SatCAST_RINT/CAST_ROUND/CAST_FLOOR/CAST_CEIL/CAST_TRUNC(5种)RNONE/RNE/RTZ/RDN/RUP/RNA/RTO/RHB(8种,更丰富)ON/OFF(可选)Sat标志(功能一致)PTO vs Linx ISA 关键差异:Linx ISA 的
RMode比 PTO ISARoundMode多 3 种(RNONE/RNA/RTO/RHB),表达力更强。PTO ISA 多出tmp参数(A2A3 路径需要)。PTO 多出功能的应用场景:
tmp参数:A2A3 平台 fp16↔fp32 转换需要临时 tile。✅ gelu_pto 直接使用(fp16↔fp32)。需修改:增加
RoundMode(必选,可直接映射 Linx ISA 的RMode)、SaturationMode(可选)、tmp(可选重载)。2.4 TDIVS — 标量整除
使用算子:broadcast_pto, concat_gather, concat_scatter, transpose
DivAlgorithm::DEFAULT/HIGH_PRECISIONTDIVS(dst, scalar, src0)(scalar ÷ tile)PTO 多出功能的应用场景:
HIGH_PRECISION:需要数值精度的场景(如 LayerNorm 中的均值/方差计算)。当前算子未用。scale / x的场景。当前算子未用。需修改:增加
PrecisionType模板参数;增加反向重载。Linx ISA 无PrecisionType,编译器需在软件层模拟高精度模式。2.5 TEXP — 指数运算
使用算子:gelu_pto.hpp
ExpAlgorithm::DEFAULT/HIGH_PRECISIONPTO 多出功能的应用场景:
HIGH_PRECISION:GELU/Softmax 中 exp 的精度影响数值稳定性。当前算子 gelu_pto 使用默认精度。需修改:增加
PrecisionType模板参数。Linx ISA 无此参数,编译器需在软件层模拟。2.6 TRECIP — 倒数
使用算子:gelu_pto.hpp
RecipAlgorithm::DEFAULT/HIGH_PRECISIONPTO 多出功能的应用场景:
HIGH_PRECISION:1/x 计算中避免精度损失(如 softmax 分母1/(1+exp))。当前算子 gelu_pto 使用默认精度。需修改:增加
PrecisionType模板参数。Linx ISA 无此参数。2.7 TROWMAX — 行向最大值归约
使用算子:reducemax_rowvec.hpp, reducemax_rowvec_single_tree.hpp
TROWMAX(dst, src, tmp, events...)TROWMAX(dst, src)TROWMAX(dst, src)— 无 tmpTileDataTmp &tmpPTO vs Linx ISA 差异:PTO ISA 有
tmp参数(A2A3 路径需要临时 tile 存中间结果),Linx ISA 无。PTO 多出功能的应用场景:
tmp:A2A3 平台归约需要临时 tile。当前算子未显式传 tmp。A5 平台 tmp 接受但不参与约束。需修改:增加
tmp参数。Linx ISA 无此参数,编译器对 A2A3 需自行分配临时 tile。2.8 TROWSUM — 行向求和归约
使用算子:reducesum_rowvec.hpp, reducesum_rowvec_single_tree.hpp
TROWSUM(dst, src, tmp, events...)TROWSUM(dst, src)TROWSUM(dst, src)— 无 tmp同 TROWMAX,PTO 多出
tmp(A2A3 路径)。需修改:增加tmp参数。2.9 TTRANS — 转置
使用算子:transpose.hpp, transpose_vector_007.hpp
TTRANS(dst, src, tmp, events...)TTRANS(dst, src)TTRANS(dst, src)— 无 tmpWaitEventsDepSrc/Dst依赖槽PTO vs Linx ISA 差异:PTO 有
tmp,Linx 无。Linx 有DepSrc/Dst依赖槽(PTO 用WaitEvents代替)。需修改:增加
tmp参数。2.10 TLOAD — 从 global memory 加载到 tile
使用算子:全部 24 个算子
TLOADTCOPYINTLOAD(dst, src)(dst, src)— 一致(dst, src)+Layout+Stride+DepSrc/DstNORM/ND2NZ/ND2ZN/DN2NZ/DN2ZNRegSrc1跨步参数PTO vs Linx ISA 差异:Linx ISA 的 TLOAD 功能更丰富——支持加载时做布局变换(ND2NZ 等)和跨步访存,PTO ISA 无这些功能。
需修改:重命名为
TLOAD(保留TCOPYIN为 deprecated 别名)。编译器可利用 Linx ISA 的Layout/Stride增强功能。2.11 TSTORE — tile 写回 global memory
使用算子:全部 24 个算子
TSTORETCOPYOUTTSTOREAtomicNone(默认)/ 原子写NORM/NZ2ND/ZN2NDRegSrc1跨步PTO vs Linx ISA 差异:双方各有对方没有的功能。PTO 有
AtomicType/preQuantScalar(Linx 无);Linx 有Layout/Stride(PTO 无)。PTO 多出功能的应用场景:
AtomicType:原子更新参数(分布式训练)、原子累加输出。当前算子未用。preQuantScalar:量化推理中 fp32→int8 写回时融合量化,减少一次单独量化 pass。当前算子未用。需修改:重命名为
TSTORE;增加AtomicType/preQuantScalar(Linx ISA 无对应硬件功能)。2.12 TEXPANDS — 标量广播填充 tile
使用算子:全部 24 个算子
TEXPANDSTEXPANDSCALARTEXPANDS(dst, scalar)(dst, s)— 一致(dst, scalar)— 一致dst[i,j] = scalarLinx ISA 状态:✅ 存在,功能完全一致。
需修改:重命名为
TEXPANDS(保留旧名别名)。2.13 TROWEXPAND — 行广播
使用算子:broadcast_vec_07_pto.hpp
TROWEXPANDTEXPANDROWTROWEXPAND(dst, src)(dst, src)— 一致(dst, src)— 一致dst[i,j] = src[i,0]TROWEXPANDADD/SUB/MUL/DIV/MAX/MIN/EXPDIFPTO 多出功能的应用场景:
TROWEXPANDADDdst[i,j] = src0[i,j] + src1[i,0]TROWEXPANDMULTROWEXPANDEXPDIFexp(x - row_max)一步完成需修改:重命名为
TROWEXPAND;可选支持融合变体。§3 名称和核心参数一致
以下 9 条指令的函数名、核心参数列表、行为语义与 PTO ISA 文档一致,不需要修改:
TCITCI(dst, start)<int descending>TCI(dst, s)<int descending>dst[i] = start + i(升序)TADDTADD(dst, src0, src1)TADD(dst, src0, src1)dst[i] = src0[i] + src1[i]TADDSTADDS(dst, src0, scalar)TADDS(dst, src, s)dst[i] = src[i] + scalarTMAXTMAX(dst, src0, src1)TMAX(dst, src0, src1)dst[i] = max(src0[i], src1[i])TMAXSTMAXS(dst, src, scalar)TMAXS(dst, src, s)dst[i] = max(src[i], scalar)TMINSTMINS(dst, src, scalar)TMINS(dst, src, s)dst[i] = min(src[i], scalar)TMULTMUL(dst, src0, src1)TMUL(dst, src0, src1)dst[i] = src0[i] * src1[i]TMULSTMULS(dst, src0, scalar)TMULS(dst, src, s)dst[i] = src[i] * scalarTSUBTSUB(dst, src0, src1)TSUB(dst, src0, src1)dst[i] = src0[i] - src1[i]§4 修改优先级
P0 — 阻塞算子表达(无法写出 PTO 代码)
TREMSTINSERTTCOLMAXTCOLSUMTCOLPRODTROWPRODTMOVTCVTRoundModeRMode+Sat)MGATHERCoalesce模式 + 索引语义不同MSCATTERCoalesce模式 + 索引语义不同P1 — 语义不完整(可写但表达力受限)
TLOAD/TSTORE/TEXPANDS/TROWEXPANDTDIVS/TEXP/TRECIPPrecisionTypeTROWMAX/TROWSUM/TTRANStmp参数TSTOREAtomicType/preQuantScalarP2 — PTO ISA 独有功能扩展(Linx ISA 无对应硬件功能)
MGATHER::Coalesce(Row/Elem)MSCATTER::ScatterAtomicOp(Add/Max/Min)MSCATTER::ScatterConflictTSTORE::preQuantScalarTROWEXPAND融合变体 (ADD/SUB/MUL/EXPDIF)TMOVReLU/量化变体PrecisionType(TEXP/TRECIP/TDIVS)TCITINSERT§5 统计总结