背景
cube dsl 的基础设施已经基本落地:@pto.ckernel、cube surface、VPTO bridge lowering、pto.tmatmul 的首个 cube template,以及基础 lit/ST 链路都已经打通。
相关基础工作已经在 PR #336 :
@pto.ckernel frontend / semantic / lowering
cube raw ops 与 bridge lowering
lib/TileOps/tmatmul_template.py
test/tilelang_st/npu/a5/src/st/testcase/tmatmul/
当前缺口
1. tload/tstore 的问题本质上是 matrix MemorySpace 支持没补齐
tload/tstore 目前还没有把 vec 之外的 MemorySpace 版本实现完整补齐 ,尤其是 matrix/cube 需要的 mat / acc 等路径。因此在 ST 用例里,很多 matrix/cube 数据流现在还只能直接写裸 VPTO cube 指令,没法通过完整的 matrix tileop authoring 路径表达。
当前现状:
lib/TileOps/tload_template.py / lib/TileOps/tstore_template.py 仍主要覆盖 vector 路径
缺少面向 matrix/cube 使用场景的完整 MemorySpace 实现、匹配与约束
结果就是 cube ST 里仍需要直接写 raw VPTO cube op 才能完成关键数据流
2. matrix tileop 的实现与 ST 覆盖都还不完整
目前只有 tmatmul 是这一轮新增的 cube ST,但它更接近一个 demo,而不是 matrix tileop 已经全面可用的证明。
具体来说:
tmatmul 现有实现和测试还没有把各种 layout / dtype / valid-shape / 约束边界补完整
docs/PTO_IR_manual.md 里还有一批 matrix op 已经列出,但还没有对应实现与 ST 收口
当前应纳入这轮范围的 matrix op 至少包括:
TMOV2LEFT
TMOV2BIAS
TMOV2VEC
TMOV2RIGHT
TMOV2SCALE
TMOV_FP
TEXTRACT(CUBE)
TEXTRACT_FP
TINSERT(CUBE类)
TINSERT_FP
TLOAD.MAT
TSTORE.MAT
TSTORE.ACC
TSTORE_FP
TIMG2COL
任务拆分
范围:
TLOAD.MAT
TSTORE.MAT
TSTORE.ACC
TSTORE_FP
把 matrix 数据搬运路径打通,让 cube/matrix authoring 不再依赖手写裸 VPTO 指令。
工作项:
为 tload/tstore 补齐 vec 之外的 MemorySpace 实现,重点覆盖 matrix/cube 需要的 mat / acc 路径
梳理 PartitionTensorView <-> tile_buf<mat/...>、tile_buf<acc/...> -> PartitionTensorView 的合法匹配规则
补齐 template matcher / constraint / semantic check / diagnostic,使 vector 与 cube 路径能正确分流
明确不同 layout、dtype、valid-shape 在 cube/matrix 路径下的支持边界
让 ST 可以通过 pto.tload / pto.tstore 表达 cube 数据流,而不是直接写 raw cube op
补齐对应 lit:正向 expand、负向诊断、vector/cube matcher 不串线
补齐对应 ST:
独立 tload cube testcase
独立 tstore cube testcase
关键 GM <-> MAT、ACC -> GM 路径覆盖
交付标准:
把 tmatmul 家族从“能跑 demo”补成“约束和测试相对完整的一组 matrix tileop”。
范围:
TMATMUL
TMATMUL.ACC
TMATMUL.BIAS
TMATMUL.MX
工作项:
在现有 tmatmul cube template 基础上补齐家族化实现
梳理并固化各变体的输入/输出 loc、layout、dtype、valid-shape、bias/scale operand 约束
补齐 expand 结果与底层 cube op 契约之间的映射验证
增加负向诊断用例,避免看起来“能匹配”但语义上不合法的组合漏过去
补齐 lit/ST,覆盖普通、acc、bias、mx 等关键变体
对现有 tmatmul demo/ST 做增强,避免只验证最窄 happy path
交付标准:
tmatmul 家族主要 public 变体都有可用 template 和稳定约束
每个变体至少有基本 lit 覆盖,关键变体有独立 ST
已知 layout/dtype/valid-shape 限制能通过诊断或测试明确表达
跑通pto-isa仓上对应的st cases
任务3: tgemv 类
补齐第二组 matrix compute tileop,避免整个 matrix 能力只停留在 matmul 家族。
范围:
TGEMV_MX
TGEMV
TGEMV_ACC
TGEMV_BIAS
TGEMV
TGEMV.ACC
TGEMV.BIAS
工作项:
为 tgemv 家族编写 cube/matrix template
梳理 GEMV 特有的 shape、layout、loc、dtype、bias/scale 约束
对接 tload/tstore 已打通的数据搬运路径,确保 authoring 链路闭环
补齐 lit:正向 expand + 负向诊断
补齐 ST:普通、acc、bias、mx 的关键代表场景
明确哪些限制与 tmatmul 可共用,哪些是 GEMV 特有约束
交付标准:
tgemv 家族主要 public 变体具备可用 template
tgemv 不依赖额外手写 raw cube op 才能完成基本 ST authoring
关键 shape/layout 约束由 lit/ST 固定下来
跑通pto-isa仓上对应的st cases
任务4: tmov bridge 类
把 cube authoring 里 L1/Mat -> L0/Left/Right/Bias/Scale 以及 Acc -> Vec/Mat 中由 tmov 承担的 bridge 语义单独收口。tmov 既是最常见的 cube bridge surface 之一,也和 tmatmul/tgemv 主数据流高度耦合,适合独立派工。
范围:
TMOV2LEFT
TMOV2BIAS
TMOV2VEC
TMOV2RIGHT
TMOV2SCALE
TMOV_FP
工作项:
明确 pto.tmov / pto.tmov.fp 在 cube 路径下的 surface 设计与 matcher 分流
补齐 Mat -> Left/Right/Bias/Scale、Acc -> Mat/Vec 对应的 DSL template / expand / lowering
梳理 fp、preQuantScalar、reluPreMode、accToVecMode 等参数在 cube 路径下的支持边界
为 tmov 增加独立 lit/ST,而不是只通过 matmul 间接覆盖
对齐 pto-isa 已有 tmov 相关 ST 目录,至少能稳定映射和跑通对应 case
交付标准:
tmov 的 cube 相关主路径都能通过 TileLang/PTO IR authoring 表达
L1/Mat -> L0、Acc -> Mat/Vec 的关键 bridge 场景不再依赖手写裸 VPTO 指令拼接
对应 lit/ST 能固定 surface 选择、参数约束和非法组合诊断
跑通 pto-isa 仓上这一组对应的 ST cases
任务5: textract cube 类
范围:
TEXTRACT(CUBE)
TEXTRACT(Vec-Vec)
TEXTRACT_FP
工作项:
单独梳理 pto.textract 在 cube 路径下的 surface 语义,不和 tmov/tinsert 混做一个子任务
明确 textract 在哪些场景下承担 Mat -> Left/Right、Acc -> Mat/Vec、Vec -> Vec/Mat 的子窗口抽取职责
梳理 indexRow/indexCol、fp、preQuantScalar、layout、transpose/compact/mx 等关键约束
为 textract 补齐独立 lit/ST,覆盖正向 expand、负向诊断、参数边界和 matcher 选择
对齐 pto-isa 已有 textract 相关 ST 目录,补足当前上层 authoring 还没承接的部分
交付标准:
textract 在 cube 路径下具备独立、清晰且稳定的 authoring surface
textract 的约束和 bridge 语义由单独的 lit/ST 固定下来,而不是继续寄生在 tmov/tinsert 或 matmul demo 上
跑通 pto-isa 仓上这一组对应的 ST cases
任务6: tinsert cube 类
范围:
TINSERT(CUBE类)
TINSERT(VEC-VEC)
TINSERT_FP
工作项:
单独梳理 pto.tinsert 在 cube 路径下的 surface 语义
明确 tinsert 负责的 Vec -> Mat、Acc -> Mat、Acc -> Vec 等回填/插入场景边界,不和 tmov/textract 重叠
梳理 indexRow/indexCol、fp、preQuantScalar、reluPreMode、accToVecMode 等关键参数在 cube 路径下的支持边界
为 tinsert 补齐独立 lit/ST,覆盖正向 expand、负向诊断、参数边界和 matcher 选择
对齐 pto-isa 已有 tinsert 相关 ST 目录,补足当前上层 authoring 还没承接的部分
交付标准:
tinsert 在 cube 路径下具备独立、清晰且稳定的 authoring surface
tinsert 的插入/回填语义由单独的 lit/ST 固定下来,而不是继续并入 tmov 或 textract 的大任务
跑通 pto-isa 仓上这一组对应的 ST cases
任务7: img2col/fmatrix cube 准备类
范围:
工作项:
明确这些 op 在 DSL / PTO IR 中是否暴露为独立 surface,还是作为高阶 tileop 的内部 lowering 细节
如果需要暴露 authoring surface,补齐 template、约束、诊断和示例
如果不直接暴露,至少要补齐从上层 tileop 到这组 pto-isa op 的 lowering 契约测试
梳理它们与 tload/tmov/textract、tmatmul 之间的数据流关系,避免后续 conv 场景重复设计
补齐最小必要 lit/ST,验证 fmatrix / img2col 相关参数不会在 lowering 过程中丢失或错配
交付标准:
img2col/fmatrix 相关能力在上层 IR/DSL 里有明确归属,不再处于“pto-isa 有实现,但上层没人接”的状态
至少有一条稳定的 authoring -> lowering -> ST 验证链路覆盖这组 op
跑通 pto-isa 仓上这一组对应的 ST cases
-[] 任务8: ttrans类
范围:
共同约束与收口要求
任务并行时建议遵守以下约束,避免后面再统一返工:
新增 tileop 必须同时带最小必要 lit,关键路径要有 ST,而不是只补 template
负向诊断要尽量前置,避免非法组合在后端才暴露
vector 与 cube 路径的 matcher/expand 不能互相串线
新增 ST 尽量按独立 testcase 目录组织,避免把 matrix 场景继续散落在其他 op 的间接覆盖里
最终版本的ST用例需要使用tload/tstore打通
背景
cube dsl的基础设施已经基本落地:@pto.ckernel、cube surface、VPTO bridge lowering、pto.tmatmul的首个 cube template,以及基础 lit/ST 链路都已经打通。相关基础工作已经在 PR #336 :
@pto.ckernelfrontend / semantic / loweringlib/TileOps/tmatmul_template.pytest/tilelang_st/npu/a5/src/st/testcase/tmatmul/当前缺口
1.
tload/tstore的问题本质上是 matrix MemorySpace 支持没补齐tload/tstore目前还没有把vec之外的MemorySpace版本实现完整补齐,尤其是 matrix/cube 需要的mat/acc等路径。因此在 ST 用例里,很多 matrix/cube 数据流现在还只能直接写裸 VPTO cube 指令,没法通过完整的 matrix tileop authoring 路径表达。当前现状:
lib/TileOps/tload_template.py/lib/TileOps/tstore_template.py仍主要覆盖 vector 路径MemorySpace实现、匹配与约束2. matrix tileop 的实现与 ST 覆盖都还不完整
目前只有
tmatmul是这一轮新增的 cube ST,但它更接近一个 demo,而不是 matrix tileop 已经全面可用的证明。具体来说:
tmatmul现有实现和测试还没有把各种 layout / dtype / valid-shape / 约束边界补完整docs/PTO_IR_manual.md里还有一批 matrix op 已经列出,但还没有对应实现与 ST 收口当前应纳入这轮范围的 matrix op 至少包括:
任务拆分
tload/tstore范围:
把 matrix 数据搬运路径打通,让 cube/matrix authoring 不再依赖手写裸 VPTO 指令。
工作项:
tload/tstore补齐vec之外的MemorySpace实现,重点覆盖 matrix/cube 需要的mat/acc路径PartitionTensorView <-> tile_buf<mat/...>、tile_buf<acc/...> -> PartitionTensorView的合法匹配规则pto.tload/pto.tstore表达 cube 数据流,而不是直接写 raw cube optloadcube testcasetstorecube testcase交付标准:
tload/tstore能稳定覆盖 matrix/cube 需要的数据搬运主路径cube ST 不再需要依赖手写裸 VPTO cube load/store 作为主 authoring 手段
lit/ST 能把支持边界和非法组合固定下来
跑通pto-isa仓上对应的st cases
任务2:
matmul类把
tmatmul家族从“能跑 demo”补成“约束和测试相对完整的一组 matrix tileop”。范围:
工作项:
tmatmulcube template 基础上补齐家族化实现tmatmuldemo/ST 做增强,避免只验证最窄 happy path交付标准:
tmatmul家族主要 public 变体都有可用 template 和稳定约束每个变体至少有基本 lit 覆盖,关键变体有独立 ST
已知 layout/dtype/valid-shape 限制能通过诊断或测试明确表达
跑通pto-isa仓上对应的st cases
任务3:
tgemv类补齐第二组 matrix compute tileop,避免整个 matrix 能力只停留在 matmul 家族。
范围:
工作项:
tgemv家族编写 cube/matrix templatetload/tstore已打通的数据搬运路径,确保 authoring 链路闭环tmatmul可共用,哪些是 GEMV 特有约束交付标准:
tgemv家族主要 public 变体具备可用 templatetgemv不依赖额外手写 raw cube op 才能完成基本 ST authoring关键 shape/layout 约束由 lit/ST 固定下来
跑通pto-isa仓上对应的st cases
任务4:
tmovbridge 类把 cube authoring 里
L1/Mat -> L0/Left/Right/Bias/Scale以及Acc -> Vec/Mat中由tmov承担的 bridge 语义单独收口。tmov既是最常见的 cube bridge surface 之一,也和tmatmul/tgemv主数据流高度耦合,适合独立派工。范围:
TMOV2LEFTTMOV2BIASTMOV2VECTMOV2RIGHTTMOV2SCALETMOV_FP工作项:
pto.tmov/pto.tmov.fp在 cube 路径下的 surface 设计与 matcher 分流Mat -> Left/Right/Bias/Scale、Acc -> Mat/Vec对应的 DSL template / expand / loweringfp、preQuantScalar、reluPreMode、accToVecMode等参数在 cube 路径下的支持边界tmov增加独立 lit/ST,而不是只通过 matmul 间接覆盖pto-isa已有tmov相关 ST 目录,至少能稳定映射和跑通对应 case交付标准:
tmov的 cube 相关主路径都能通过 TileLang/PTO IR authoring 表达L1/Mat -> L0、Acc -> Mat/Vec的关键 bridge 场景不再依赖手写裸 VPTO 指令拼接对应 lit/ST 能固定 surface 选择、参数约束和非法组合诊断
跑通
pto-isa仓上这一组对应的 ST cases任务5:
textractcube 类范围:
工作项:
pto.textract在 cube 路径下的 surface 语义,不和tmov/tinsert混做一个子任务textract在哪些场景下承担Mat -> Left/Right、Acc -> Mat/Vec、Vec -> Vec/Mat的子窗口抽取职责indexRow/indexCol、fp、preQuantScalar、layout、transpose/compact/mx 等关键约束textract补齐独立 lit/ST,覆盖正向 expand、负向诊断、参数边界和 matcher 选择pto-isa已有textract相关 ST 目录,补足当前上层 authoring 还没承接的部分交付标准:
textract在 cube 路径下具备独立、清晰且稳定的 authoring surfacetextract的约束和 bridge 语义由单独的 lit/ST 固定下来,而不是继续寄生在tmov/tinsert或 matmul demo 上跑通
pto-isa仓上这一组对应的 ST cases任务6:
tinsertcube 类范围:
工作项:
pto.tinsert在 cube 路径下的 surface 语义tinsert负责的Vec -> Mat、Acc -> Mat、Acc -> Vec等回填/插入场景边界,不和tmov/textract重叠indexRow/indexCol、fp、preQuantScalar、reluPreMode、accToVecMode等关键参数在 cube 路径下的支持边界tinsert补齐独立 lit/ST,覆盖正向 expand、负向诊断、参数边界和 matcher 选择pto-isa已有tinsert相关 ST 目录,补足当前上层 authoring 还没承接的部分交付标准:
tinsert在 cube 路径下具备独立、清晰且稳定的 authoring surfacetinsert的插入/回填语义由单独的 lit/ST 固定下来,而不是继续并入tmov或textract的大任务跑通
pto-isa仓上这一组对应的 ST cases任务7:
img2col/fmatrixcube 准备类范围:
TIMG2COL工作项:
pto-isaop 的 lowering 契约测试tload/tmov/textract、tmatmul之间的数据流关系,避免后续 conv 场景重复设计交付标准:
img2col/fmatrix相关能力在上层 IR/DSL 里有明确归属,不再处于“pto-isa 有实现,但上层没人接”的状态pto-isa仓上这一组对应的 ST cases-[] 任务8:
ttrans类范围:
共同约束与收口要求
任务并行时建议遵守以下约束,避免后面再统一返工: