Skip to content

epic(tilelang-dsl): complete cube matrix tileop templates and ST coverage #337

@Zhendong404

Description

@Zhendong404

背景

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

任务拆分

  • 任务1: tload/tstore

范围:

  • 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 路径覆盖

交付标准:

  • tload/tstore 能稳定覆盖 matrix/cube 需要的数据搬运主路径

  • cube ST 不再需要依赖手写裸 VPTO cube load/store 作为主 authoring 手段

  • lit/ST 能把支持边界和非法组合固定下来

  • 跑通pto-isa仓上对应的st cases

  • 任务2: matmul

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/ScaleAcc -> Mat/Vec 对应的 DSL template / expand / lowering
  • 梳理 fppreQuantScalarreluPreModeaccToVecMode 等参数在 cube 路径下的支持边界
  • tmov 增加独立 lit/ST,而不是只通过 matmul 间接覆盖
  • 对齐 pto-isa 已有 tmov 相关 ST 目录,至少能稳定映射和跑通对应 case

交付标准:

  • tmov 的 cube 相关主路径都能通过 TileLang/PTO IR authoring 表达

  • L1/Mat -> L0Acc -> 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/RightAcc -> Mat/VecVec -> Vec/Mat 的子窗口抽取职责
  • 梳理 indexRow/indexColfppreQuantScalar、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 -> MatAcc -> MatAcc -> Vec 等回填/插入场景边界,不和 tmov/textract 重叠
  • 梳理 indexRow/indexColfppreQuantScalarreluPreModeaccToVecMode 等关键参数在 cube 路径下的支持边界
  • tinsert 补齐独立 lit/ST,覆盖正向 expand、负向诊断、参数边界和 matcher 选择
  • 对齐 pto-isa 已有 tinsert 相关 ST 目录,补足当前上层 authoring 还没承接的部分

交付标准:

  • tinsert 在 cube 路径下具备独立、清晰且稳定的 authoring surface

  • tinsert 的插入/回填语义由单独的 lit/ST 固定下来,而不是继续并入 tmovtextract 的大任务

  • 跑通 pto-isa 仓上这一组对应的 ST cases

  • 任务7: img2col/fmatrix cube 准备类

范围:

  • TIMG2COL

工作项:

  • 明确这些 op 在 DSL / PTO IR 中是否暴露为独立 surface,还是作为高阶 tileop 的内部 lowering 细节
  • 如果需要暴露 authoring surface,补齐 template、约束、诊断和示例
  • 如果不直接暴露,至少要补齐从上层 tileop 到这组 pto-isa op 的 lowering 契约测试
  • 梳理它们与 tload/tmov/textracttmatmul 之间的数据流关系,避免后续 conv 场景重复设计
  • 补齐最小必要 lit/ST,验证 fmatrix / img2col 相关参数不会在 lowering 过程中丢失或错配

交付标准:

  • img2col/fmatrix 相关能力在上层 IR/DSL 里有明确归属,不再处于“pto-isa 有实现,但上层没人接”的状态
  • 至少有一条稳定的 authoring -> lowering -> ST 验证链路覆盖这组 op
  • 跑通 pto-isa 仓上这一组对应的 ST cases

-[] 任务8: ttrans

范围:

  • TTRANS

共同约束与收口要求

任务并行时建议遵守以下约束,避免后面再统一返工:

  • 新增 tileop 必须同时带最小必要 lit,关键路径要有 ST,而不是只补 template
  • 负向诊断要尽量前置,避免非法组合在后端才暴露
  • vector 与 cube 路径的 matcher/expand 不能互相串线
  • 新增 ST 尽量按独立 testcase 目录组织,避免把 matrix 场景继续散落在其他 op 的间接覆盖里
  • 最终版本的ST用例需要使用tload/tstore打通

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions