PTOAS Op 状态矩阵¶
行 = 最新 PTOAS 提供的公共及兼容 op。接口基线为 Little-oil/PTOAS main
d852dd2dba3e5bf7a69ce8324eb88afc336e8a33:manual 公共接口 189 个,加当前
PTOOps.td 仍保留的 source-only 兼容/tile 接口 15 个,共 204 个。列状态按
PyPTO 当前源码核实(最后更新 2026-08-14)。后续每加或修改一个 op,只更新本表对应行。
本表包含公共/兼容接口中 PyPTO 级别为 internal 的 op;另有 PTOOps.td 中 32 个仅供
lowering/compiler plumbing 使用的额外内部 op 未纳入,也不列 VPTO、VMI、SIMT 等其他 dialect。
完成判定原则¶
一个 op 是否完成,以最终是否有同名 ST 为准。
pypto 前端✅ + ST❌:未完成;前端或 codegen 已存在,但没有真机同名覆盖。ST✅:活跃tests/st/测试最终生成并执行同名pto.*op。ST✅只表示已经具备真机同名执行证据;尚未真机验证的其他架构继续在备注中记录。ST—:内部原语、编译期辅助或已替代接口,不适合独立 ST;由 codegen/集成测试覆盖。- 高层测试若最终生成其他 PTO op,不算同名覆盖。例如 collective 被拆成
tput/tget/tnotify/twait,不能计为tbroadcast/tgather/tscatter/treduce的 ST。
内存规划视图编译看护(Planner View Compilation Guard)¶
system-tests-a5sim CI 作业使用固定版本的 PTOAS,在安装设备运行时之前运行
fillpad_inplace 的内存规划和视图回归测试:
当 PTOAS 缺失、无法运行或版本低于支持范围时,--require-ptoas 会在测试初始化阶段失败,
避免因编译器缺失而静默跳过原生编译。测试覆盖两个后端的 PTOAS 内存规划路径,以及
PYPTO/DSA_RP 对照路径。此看护检查 MLIR 和生成 C++ 的编译过程;不能替代设备数值测试,
也不代表已穷举验证整个内存规划器。
输入由本地分配支撑时,填充结果使用动态有效范围的 reshape 别名,并显式初始化为完整
tile 范围。这保留了后续 set_validshape 更新,包括运行时边界以及对原填充句柄的使用,
也覆盖为 if/else 结果在函数入口声明的分配。
切片及其他不可修改有效范围的视图输入仍使用静态有效范围,原有的有效范围更新限制保持不变。
公共 EnsureTileViewSsa 辅助函数负责创建类型化别名并显式初始化运行时有效范围。
调用方以物理 tile 坐标传入初始范围;选择完整范围仍属于 fillpad 的算子语义。
需要初始化的可修改别名始终获得独立句柄,即使其类型与源相同,因为当前运行时有效范围
可能不同。现有静态视图调用方保留原有行为。Fillpad 仅在 PTOAS 内存规划路径使用此辅助函数;
PYPTO 和 DSA_RP 保留通过显式地址表示别名的生成方式。
扩展看护时,在 tests/ut/codegen/ 下的回归测试上添加 @pytest.mark.ptoas_compile。
测试必须断言相关的生成代码语义,并实际调用 PTOAS 编译;标记只负责选择测试。
CI 会发现该目录下所有带此标记的测试,因此新增算子或测试文件无须修改工作流。
CI 中应保留 --require-ptoas,确保编译器不可用时失败。
安装运行时之后,同一 CI 作业还会在两个模拟器上显式使用 PTOAS 内存规划,
运行现有的 fillpad_inplace 数值测试:
python -m pytest tests/st/runtime/ops/test_fillpad_inplace.py --memory-planner=ptoas --platform=a2a3sim,a5sim --forked -v
六个基础用例将完整的 [64, 64] 输出与参考结果比较:前 48 行保留输入,
后 16 行分别填充零、正无穷或负无穷。另六个用例覆盖填充后静态或动态更新有效范围,
再通过原填充别名执行填充的场景。额外四个用例覆盖 if/else 两条路径合并后再填充并缩小有效范围。
另两个用例在缩小有效范围后重复相同填充模式,检查源与目标类型相同时仍保留独立的有效范围。
它们为编译看护补充模拟器数值覆盖,
并不代表编译测试中的所有视图组合都已验证设备执行正确性。
Cast 临时空间规划¶
在 A2/A3 上,非饱和的 FP32 -> INT16 和 FP16 -> INT16/INT8/UINT8 转换
需要临时空间(scratch)。PyPTO 和 DSA-RP 在 InitMemRef 中为 PTOAS level 3
生成显式临时空间。使用 PTOAS planner 时,由 level 2 负责分配;codegen 提供
具有静态有效范围的输入、输出 reshape 视图,并保留单输入的 pto.tcvt 形式。
这些视图共享原有缓冲区,保留实际有效形状,包括部分有效的 tile。
pto_ops_cast.cpp 中通过 f_plan_scratch 注册的规则统一决定是否需要临时空间、
容量与类型。InitMemRef 和代码生成都通过
Backend::PlanOpScratch("tile.cast", request) 查询它。InitMemRef 只根据 Required
规格生成临时 tile;不完整的形状返回 Unknown,由调用方在原始算子位置报告错误,
不会被当成无需临时空间。
显式传入 tmp 时会跳过这条自动生成规则,并保留其原有类型和容量。
显式临时空间仍支持一维输入:代码生成会将形状及静态有效范围从 [N]
映射为 [1, N]。
A2/A3 窄化转换遵循分配与代码生成共享的安全规则,使用互不重叠的输入、输出存储, 详见 MemoryReuse。静态有效范围视图保留各自操作数 原有的存储,不会让转换的输入和输出共享同一缓冲区。
只有依赖临时空间的转换(或 A2/A3 上显式传入 tmp 的转换)要求静态有效范围。 原生饱和转换、其他原生转换及 A5 转换保留原有的动态有效范围行为。 A2/A3 上依赖临时空间的转换仍不支持运行时有效范围,会在调用 PTOAS 前给出诊断。
tests/ut/codegen/test_ptoas_planner_views.py 覆盖四组类型转换、两种饱和模式、
两种后端、三种 planner,以及完整和部分有效的 tile;安装 PTOAS 时还会实际编译。
CI 在 A2/A3 模拟器上运行 tests/st/runtime/ops/test_cast_saturation.py,
对比不同 planner 的精确数值结果,并验证部分写回保留有效矩形之外的输出元素。
图例¶
- 级别:PyPTO 注册/生成层级(tile / tensor / tile+tensor / comm / internal)。
- PTOAS接口:✅ = 最新 PTOAS
main提供该 canonical op。 - pypto-tile / -tensor 前端:✅ = 已有对应公共前端;❌ = 未添加;
—= 内部或 comm,不适用。 - ST测试:非 comm op 的同名 ST 状态;comm 见下一列。
- distributed ST测试:comm op 的同名分布式 ST 状态;非 comm 为
—。 - 备注:只记录当前添加/覆盖事实和直接阻塞,不记录未来实施顺序。
| PTOAS op (pto.*) | pto-isa API | 级别 | PTOAS接口 | pypto-tile前端 | pypto-tensor前端 | ST测试 | distributed ST测试 | 备注 |
|---|---|---|---|---|---|---|---|---|
| 指针 / View(13) | ||||||||
| pto.ptrtoint | — | internal | ✅ | — | — | — | — | 编译期/分配辅助,不独立建 ST |
| pto.inttoptr | — | internal | ✅ | — | — | — | — | 编译期/分配辅助,不独立建 ST |
| pto.addptr | — | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.castptr | — | internal | ✅ | — | — | — | — | 编译期/分配辅助,不独立建 ST |
| pto.make_tensor_view | — | tensor | ✅ | ❌ | ✅ | ✅ | — | 由 tensor.view 发射 |
| pto.get_tensor_view_dim | — | internal | ✅ | — | — | — | — | 编译期/分配辅助,不独立建 ST |
| pto.get_tensor_view_stride | — | internal | ✅ | — | — | — | — | 编译期/分配辅助,不独立建 ST |
| pto.partition_view | — | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.alloc_tile | — | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.alloc_multi_tile | — | internal | ✅ | — | — | — | — | 编译期/分配辅助,不独立建 ST |
| pto.multi_tile_get | — | internal | ✅ | — | — | — | — | 编译期/分配辅助,不独立建 ST |
| pto.subview | — | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.set_validshape | .SetValidShape | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| Buffer-ID(2) | ||||||||
| pto.get_buf | get_buf | internal | ✅ | — | — | — | — | 编译期/分配辅助,不独立建 ST |
| pto.rls_buf | rls_buf | internal | ✅ | — | — | — | — | 编译期/分配辅助,不独立建 ST |
| DMA 数据搬运(10) | ||||||||
| pto.tload | TLOAD | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tprefetch | TPREFETCH | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tprefetch_async | TPREFETCH_ASYNC | tile | ✅ | ❌ | ❌ | ✅ | — | 由 pl.prefetch.*(make_context / async_prefetch / session / wait)发射;非 tile/tensor 前端。PTOAS op 可用性不等于 runtime 提供 SDMA workspace;当前由 artifact 自动启用,仅 onboard a2a3 ST 覆盖,无 provider 的平台初始化失败而非 no-op |
| pto.make_prefetch_async_context | pto::PrefetchAsyncContext | internal | ✅ | — | — | — | — | 随 async prefetch 集成验证 |
| pto.get_prefetch_async_session | .session | internal | ✅ | — | — | — | — | 随 async prefetch 集成验证 |
| pto.tstore | TSTORE | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.load | direct pointer load | tensor | ✅ | ❌ | ✅ | ✅ | — | 由 tensor.read 发射;PTOAS 0.64 中替代 pto.load_scalar |
| pto.store | direct pointer store | tensor | ✅ | ❌ | ✅ | ✅ | — | 由 tensor.write 发射;PTOAS 0.64 中替代 pto.store_scalar |
| pto.tmov | TMOV / TMOV_FP | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.ttrans | TTRANS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| 矩阵计算(12) | ||||||||
| pto.tmatmul | TMATMUL | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tmatmul.acc | TMATMUL_ACC | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tmatmul.bias | TMATMUL_BIAS | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tmatmul.mx | TMATMUL_MX | tile | ✅ | ✅ | ✅ | ✅ | — | A5 MXFP8 host-prequant frontend+codegen+ST;FP4 输入仅支持左侧 FP4×右侧 FP8,且必须显式做 FP4→FP8 cast;原生 FP4×FP4 暂缓;见 operators MX 约束 |
| pto.tmatmul.mx.acc | TMATMUL_MX (overload) | tile | ✅ | ✅ | ✅ | ✅ | — | A5 frontend+codegen+ST(tile.matmul_mx_acc) |
| pto.tmatmul.mx.bias | TMATMUL_MX (overload) | tile | ✅ | ✅ | ✅ | ❌ | — | NEW frontend+codegen(tile.matmul_mx_bias);ST 待补 |
| pto.tgemv | TGEMV | tile | ✅ | ✅ | ❌ | ✅ | — | A2/A3 task-submit ST 已通过;A5 真机验证待补 |
| pto.tgemv.acc | TGEMV_ACC | tile | ✅ | ✅ | ❌ | ✅ | — | A2/A3 task-submit ST 已通过;A5 真机验证待补 |
| pto.tgemv.bias | TGEMV_BIAS | tile | ✅ | ✅ | ❌ | ✅ | — | A2/A3 task-submit ST 已通过;A5 真机验证待补 |
| pto.tgemv.mx | TGEMV_MX | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tgemv.mx.acc | TGEMV_MX (overload) | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tgemv.mx.bias | TGEMV_MX (overload) | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| 向量算术与数学(42) | ||||||||
| pto.tadd | TADD | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tsub | TSUB | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tmul | TMUL | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tdiv | TDIV | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机已验证;A5 真机待验证 |
| pto.tmax | TMAX | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tmin | TMIN | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trem | TREM | tile | ✅ | ✅ | ❌ | ✅ | — | A2/A3 FP32 及 ISA 定义域 [-2^24, 2^24] 内的 INT32 同名真机 ST 已通过,覆盖定义域边界、完整与尾部 valid shape;A5 真机待验证 |
| pto.tpartadd | TPARTADD | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tpartmax | TPARTMAX | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tpartmin | TPARTMIN | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tpartargmax | TPARTARGMAX | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tpartargmin | TPARTARGMIN | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tpartmul | TPARTMUL | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tprelu | TPRELU | tile | ✅ | ✅ | ❌ | ✅ | — | 已补齐规范 3 输入链路;A2/A3 真机已验证,A5 真机待验证 |
| pto.tadds | TADDS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tsubs | TSUBS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机已验证;A5 真机待验证 |
| pto.tmuls | TMULS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.taxpy | TAXPY | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tdivs | TDIVS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tmaxs | TMAXS | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tmins | TMINS | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.trems | TREMS | tile | ✅ | ✅ | ❌ | ✅ | — | A2/A3 FP32 及 [-2^24, 2^24] 内的 INT32 scalar 同名真机 ST 已通过,覆盖 INT32 正负边界、负值与尾部 valid shape;A5 真机待验证 |
| pto.taddc | TADD + TADD | tile | ✅ | ✅ | ❌ | ✅ | — | A2/A3 真机已验证,覆盖溢出、完整/尾部 valid shape 及 result/src0 复用与不复用路径;A5 真机待验证 |
| pto.tsubc | TSUB + TADD | tile | ✅ | ✅ | ❌ | ✅ | — | A2/A3 真机已验证,覆盖借位、完整/尾部 valid shape 及 result/src0 复用与不复用路径;A5 真机待验证 |
| pto.taddsc | TADDS + TADD | tile | ✅ | ✅ | ❌ | ✅ | — | A2/A3 真机的完整、列尾及行列组合尾部场景已通过,覆盖 result/src0 复用与不复用路径;PTO ISA v0.57 的全列行尾快速路径严格预期失败;A5 真机待验证 |
| pto.tsubsc | TSUBS + TADD | tile | ✅ | ✅ | ❌ | ✅ | — | A2/A3 真机的完整、列尾及行列组合尾部场景已通过,覆盖 result/src0 复用与不复用路径;PTO ISA v0.57 的全列行尾快速路径严格预期失败;A5 真机待验证 |
| pto.tabs | TABS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tneg | TNEG | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.texp | TEXP | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tlog | TLOG | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机已验证;A5 真机待验证 |
| pto.tsqrt | TSQRT | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.ttri | TTRI | tile | ✅ | ✅ | ❌ | ✅ | — | 前端 + 精确 codegen + 同名 ST;A2/A3 真机 10/10 通过;A5 真机待验证 |
| pto.trsqrt | TRSQRT | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trecip | TRECIP | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trelu | TRELU | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tlrelu | TLRELU | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.taddrelu | VADDRELU | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tfmod | TFMOD | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 FP32 tile-tile 同名真机 ST 已通过,覆盖完整与尾部 valid shape;A5 真机待验证 |
| pto.tfmods | TFMODS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 FP32 scalar 同名真机 ST 已通过,覆盖负值与尾部 valid shape;A5 真机待验证 |
| pto.tpow | TPOW | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tpows | TPOWS | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.trandom | TRANDOM | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | PTOAS source-only 兼容接口 |
| 归约(13) | ||||||||
| pto.trowsum | TROWSUM | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowmax | TROWMAX | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowargmax | TROWARGMAX | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowmin | TROWMIN | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机已验证;A5 真机待验证 |
| pto.trowargmin | TROWARGMIN | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowprod | TROWPROD | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.thistogram | THISTOGRAM | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tcolsum | TCOLSUM | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolmax | TCOLMAX | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolargmax | TCOLARGMAX | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolmin | TCOLMIN | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolargmin | TCOLARGMIN | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolprod | TCOLPROD | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | PTOAS source-only 兼容接口 |
| 广播(17) | ||||||||
| pto.trowexpand | TROWEXPAND | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolexpand | TCOLEXPAND | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolexpandmul | TCOLEXPANDMUL | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolexpandadd | TCOLEXPANDADD | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolexpanddiv | TCOLEXPANDDIV | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolexpandsub | TCOLEXPANDSUB | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolexpandexpdif | TCOLEXPANDEXPDIF | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolexpandmax | TCOLEXPANDMAX | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcolexpandmin | TCOLEXPANDMIN | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowexpandmul | TROWEXPANDMUL | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowexpanddiv | TROWEXPANDDIV | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowexpandsub | TROWEXPANDSUB | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowexpandadd | TROWEXPANDADD | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机已验证;A5 真机待验证 |
| pto.trowexpandexpdif | TROWEXPANDEXPDIF | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowexpandmax | TROWEXPANDMAX | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.trowexpandmin | TROWEXPANDMIN | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.texpands | TEXPANDS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| 比较与选择(4) | ||||||||
| pto.tcmp | TCMP | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tcmps | TCMPS | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tsel | TSEL | tile | ✅ | ✅ | ❌ | ✅ | — | 当某一分支的标量 TSELS 无法承载时,tile.select 也降级到这里 |
| pto.tsels | TSELS | tile | ✅ | ✅ | ❌ | ✅ | — | 已补齐规范 4 输入链路;A2/A3 真机已验证,A5 真机待验证。组合算子 tile.select 的 mask ? tile : scalar 形式降级到这里 —— 它自身没有同名 pto.* 算子 |
| 位运算(11) | ||||||||
| pto.tand | TAND | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机通过有/无符号 8/16 位 pattern 的完整、行尾、列尾及行列组合尾部场景;A5 真机待验证 |
| pto.tor | TOR | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机通过有/无符号 8/16 位 pattern 的完整、行尾、列尾及行列组合尾部场景;A5 真机待验证 |
| pto.txor | TXOR | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机通过有/无符号 8/16 位 pattern、显式 tmp 及四类 shape;IR UT 覆盖 alias 拒绝场景;A5 真机待验证 |
| pto.tshl | TSHL | tile+tensor | ✅ | ✅ | ✅ | ❌ | — | 已有链路;历史 ISA/语义问题,需按当前 pin 复验 |
| pto.tshr | TSHR | tile+tensor | ✅ | ✅ | ✅ | ❌ | — | 已有链路;历史 ISA/语义问题,需按当前 pin 复验 |
| pto.tnot | TNOT | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | 已由既有同名 tile.not ST 覆盖 |
| pto.tands | TANDS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机通过有/无符号 8/16 位 tile、immediate/SSA scalar 及四类 shape;A5 真机待验证 |
| pto.tors | TORS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机通过有/无符号 8/16 位 tile、immediate/SSA scalar 及四类 shape;A5 真机待验证 |
| pto.txors | TXORS | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | A2/A3 真机通过有/无符号 8/16 位 tile、immediate/SSA scalar、显式 tmp 及四类 shape;IR UT 覆盖 alias 拒绝场景;A5 真机待验证 |
| pto.tshls | TSHLS | tile+tensor | ✅ | ✅ | ✅ | ❌ | — | 已有链路;历史 ISA/语义问题,需按当前 pin 复验 |
| pto.tshrs | TSHRS | tile+tensor | ✅ | ✅ | ✅ | ❌ | — | 已有链路;历史 ISA/语义问题,需按当前 pin 复验 |
| 数据重排(15) | ||||||||
| pto.tconcat | TCONCAT | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tconcatidx | TCONCAT (indexed) | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tgather | TGATHER | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tgatherb | TGATHERB | tile | ✅ | ✅ | ❌ | ✅ | — | 32-byte 块偏移前端 + 精确 codegen + 同名 ST;A2/A3 真机 8/8 通过;A5 真机待验证 |
| pto.tscatter | TSCATTER | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.mgather | MGATHER | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | 源仍在 GM 时,通过 pl.gather(src, index=idx) 提供 tensor 层扁平元素 Vec 接口;tile 层保留规范 Vec/Mat overload 及 row/elem coalesce;扩展后的 Vec/Mat 矩阵待验证 |
| pto.mscatter | MSCATTER | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.treshape | TRESHAPE | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tinsert | TINSERT | tile | ✅ | ❌ | ❌ | ✅ | — | 由 tile.assemble / auto matmul lowering 发射 |
| pto.textract | TEXTRACT | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tfillpad | TFILLPAD | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tfillpad_expand | TFILLPAD_EXPAND | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tfillpad_inplace | TFILLPAD_INPLACE | tile | ✅ | ✅ | ❌ | ❌ | — | 发射 pto.tfillpad;PTOAS 内存规划通过 pto.treshape 别名保留目标 pad 和完整有效范围;由本地分配支撑的结果保留运行时有效范围更新能力 |
| pto.textract_fp | TEXTRACT_FP / TEXTRACT | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tinsert_fp | TINSERT_FP / TINSERT | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| 排序(2) | ||||||||
| pto.tsort32 | TSORT32 | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| pto.tmrgsort | TMRGSORT | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| 类型转换(1) | ||||||||
| pto.tcvt | TCVT | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| 整数序列(1) | ||||||||
| pto.tci | TCI | tile+tensor | ✅ | ✅ | ✅ | ✅ | — | |
| 标量元素访问(2) | ||||||||
| pto.tgetval | .GetValue | tile | ✅ | ✅ | ❌ | ✅ | — | 由 tile.read 发射 |
| pto.tsetval | .SetValue | tile | ✅ | ✅ | ❌ | ✅ | — | 由 tile.write 发射 |
| MX 量化(6) | ||||||||
| pto.tget_scale_addr | GetScaleAddr + TASSIGN | tile | ✅ | ✅ | ✅ | ❌ | — | NEW frontend+codegen;Mat→scale tmov 按源序发射,PTOAS PTOA5NormalizeTMovPass 重排为 bind-before-fill;见 operators MX 约束 |
| pto.tmov.fp | TMOV_FP | tile | ✅ | ❌ | ❌ | ❌ | — | 已有 backend hook,缺 IR/Python 前端与 ST |
| pto.tquant | TQUANT | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| pto.tquant.mx | TQUANT (overload) | tile | ✅ | ✅ | ❌ | ✅ | — | A5 仅 MXFP8 独立量化前端+codegen+真机 ST(group_axis A/B);MXFP4 quant 暂缓 |
| pto.tstore_fp | TSTORE_FP | tile | ✅ | ❌ | ❌ | ❌ | — | 当前 backend 发 pto.tstore.fp |
| pto.tdequant | TDEQUANT | tile | ✅ | ❌ | ❌ | ❌ | — | MISSING:缺完整前端/codegen/ST 链路 |
| 同步(8) | ||||||||
| pto.barrier | pipe_barrier / dsb | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.barrier_sync | barrier lowering | internal | ✅ | — | — | — | — | 同步/调度内部原语,不独立建 ST |
| pto.record_event | set_flag lowering | internal | ✅ | — | — | — | — | 同步/调度内部原语,不独立建 ST |
| pto.wait_event | wait_flag lowering | internal | ✅ | — | — | — | — | 同步/调度内部原语,不独立建 ST |
| pto.syncall | SYNCALL | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.sync.set | set_intra_block / FFTS | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.sync.wait | wait_intra_block / wait_flag_dev | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.tsync | TSYNC | internal | ✅ | — | — | — | — | 同步/调度内部原语,不独立建 ST |
| Core Virtualization(2) | ||||||||
| pto.section.cube | — | internal | ✅ | — | — | — | — | 同步/调度内部原语,不独立建 ST |
| pto.section.vector | — | internal | ✅ | — | — | — | — | 同步/调度内部原语,不独立建 ST |
| Frontend Pipe(15) | ||||||||
| pto.reserve_buffer | — | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.import_reserved_buffer | — | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.aic_initialize_pipe | TPipe / internal init | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.aiv_initialize_pipe | TPipe / internal init | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.talloc_to_aiv | TALLOC | internal | ✅ | — | — | — | — | 由 pipe 生命周期集成覆盖 |
| pto.talloc_to_aic | TALLOC | internal | ✅ | — | — | — | — | 由 pipe 生命周期集成覆盖 |
| pto.tpush_to_aiv | TPUSH | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tpush_to_aic | TPUSH | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tpop_from_aic | TPOP | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tpop_from_aiv | TPOP | tile | ✅ | ✅ | ❌ | ✅ | — | |
| pto.tfree_from_aic | TFREE | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.tfree_from_aiv | TFREE | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.tpush | TPUSH | internal | ✅ | — | — | — | — | legacy;由带方向接口替代 |
| pto.tpop | TPOP | internal | ✅ | — | — | — | — | legacy;由带方向接口替代 |
| pto.tfree | TFREE | internal | ✅ | — | — | — | — | legacy;由带方向接口替代 |
| Runtime Intrinsics(4) | ||||||||
| pto.get_block_idx | get_block_idx | tile+tensor | ✅ | ✅ | ✅ | — | — | codegen 转为 wrapper 参数,不发同名 PTO op |
| pto.get_subblock_idx | get_subblockid | tile+tensor | ✅ | ✅ | ✅ | — | — | codegen 转为 wrapper 参数,不发同名 PTO op |
| pto.get_block_num | get_block_num | tile+tensor | ✅ | ✅ | ✅ | — | — | codegen 转为 wrapper 参数,不发同名 PTO op |
| pto.get_subblock_num | get_subblockdim | internal | ✅ | — | — | — | — | codegen 转为 wrapper 参数,不发同名 PTO op |
| 调试(3) | ||||||||
| pto.tprint | TPRINT | tile | ✅ | ❌ | ❌ | ❌ | — | 已有 backend hook,缺 IR/Python 前端与 ST |
| pto.print | cce::printf | internal | ✅ | — | — | — | — | 内部/调试辅助,不独立建 ST |
| pto.trap | trap | internal | ✅ | — | — | — | — | 内部/调试辅助,不独立建 ST |
| 通信(14) | ||||||||
| pto.comm.build_async_session | pto::comm::BuildAsyncSession | comm | ✅ | — | — | — | ❌ | 分布式接口未完成同名 ST |
| pto.comm.tput_async | TPUT_ASYNC | comm | ✅ | — | — | — | ❌ | 分布式接口未完成同名 ST |
| pto.comm.tget_async | TGET_ASYNC | comm | ✅ | — | — | — | ❌ | 分布式接口未完成同名 ST |
| pto.comm.wait_async_event | AsyncEvent.Wait | comm | ✅ | — | — | — | ❌ | 分布式接口未完成同名 ST |
| pto.comm.test_async_event | AsyncEvent.Test | comm | ✅ | — | — | — | ❌ | 分布式接口未完成同名 ST |
| pto.comm.tput | TPUT | comm | ✅ | — | — | — | ✅ | test_l3_put / remote_store |
| pto.comm.tget | TGET | comm | ✅ | — | — | — | ✅ | test_l3_get |
| pto.comm.tnotify | TNOTIFY | comm | ✅ | — | — | — | ✅ | test_l3_notify_wait |
| pto.comm.twait | TWAIT | comm | ✅ | — | — | — | ✅ | test_l3_notify_wait |
| pto.comm.ttest | TTEST | comm | ✅ | — | — | — | ❌ | 分布式接口未完成同名 ST |
| pto.comm.tbroadcast | TBROADCAST | comm | ✅ | — | — | — | ❌ | 高层测试会分解,当前无同名 PTO ST |
| pto.comm.tgather | TGATHER | comm | ✅ | — | — | — | ❌ | 高层测试会分解,当前无同名 PTO ST |
| pto.comm.tscatter | TSCATTER | comm | ✅ | — | — | — | ❌ | 高层测试会分解,当前无同名 PTO ST |
| pto.comm.treduce | TREDUCE | comm | ✅ | — | — | — | ❌ | 高层测试会分解,当前无同名 PTO ST |
| 栈局部 Array / Struct(6) | ||||||||
| pto.declare_local_array | — | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.local_array_get | — | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.local_array_set | — | internal | ✅ | — | — | ✅ | — | compiler/system lowering 自动发射 |
| pto.declare_struct | — | internal | ✅ | — | — | — | — | 内部/调试辅助,不独立建 ST |
| pto.struct_get | — | internal | ✅ | — | — | — | — | 内部/调试辅助,不独立建 ST |
| pto.struct_set | — | internal | ✅ | — | — | — | — | 内部/调试辅助,不独立建 ST |
| 源码兼容 / 手动模式(1) | ||||||||
| pto.tassign | TASSIGN | internal | ✅ | — | — | — | — | 失活 backend hook,不独立建 ST |
统计:共 204 个 PTOAS 公共/兼容 op;pypto tile 前端 113 个,tensor 前端 75 个
(另有 pl.prefetch.* 一族 4 个非 tile/tensor op);同名 ST 覆盖 121 个
(普通 ST 117,distributed ST 4);无同名 ST 51 个(普通 41,distributed 10);
其余 32 个 op 不适合独立 ST。