Summary
背景
C++ Cube API 的 TExtractToACompact(dst, src, indexRow, indexCol, validRow, validCol) 支持从源 tile 的偏移位置开始提取子 tile,indexRow 和 indexCol 传到底层硬件指令的 start-position 配置。
当前 PTO-ISA 的 Cube wrapper op mte_l1_l0a / mte_l1_l0b 没有 start-position 参数,只有 source, destination, m, k/n, transpose。在 VPTOExpandWrapperOps.cpp 的 ExpandLeftLoadPattern/ExpandRightLoadPattern 中,mte_l1_l0a/l0b expand 为 load_cbuf_to_ca/cb 时,deriveLoadCbufToCaControl 函数硬编码 mStart=0, kStart=0:
// VPTOExpandWrapperOps.cpp:772
return LoadCbufToCbControl{zero, zero, mStep, kStep, stride, stride};
// mStart=0 kStart=0
然而,硬件层指令 load_cbuf_to_ca 已经有 m_start, k_start 参数(VPTOOps.td:1142-1164),这意味着硬件本身支持 start-position,只是 wrapper op 没有把能力暴露出来。
问题
由于 mte_l1_l0a/l0b 无法传递 start-position,使用 TileLang DSL 编写的 TEXTRACT 模板无法实现与 C++ TExtractToA/TExtractToATransCompact 对等的偏移提取功能。当用户传入 indexRow/indexCol != 0 时,偏移信息被静默丢弃,导致提取结果错误。
建议方案
为 mte_l1_l0a 和 mte_l1_l0b 增加 start_row / start_col keyword 参数(与 transpose keyword 采用相同的设计模式),默认值 0。具体改动:
- VPTOOps.td:
MteL1L0aOp / MteL1L0bOp 增加 Optional<I64>:$start_row 和 Optional<I64>:$start_col(默认值 0)
- semantic.py:
_analyze_mte_stage_load 增加 start_row/start_col keyword 解析
- frontend_ast.py:
mte_l1_l0a/l0b 的 allowed keywords 增加 start_row, start_col
- VPTOExpandWrapperOps.cpp:
deriveLoadCbufToCaControl / deriveLoadCbufToCbControl 接收 start_row/start_col 参数,传给 LoadCbufToCaOp / LoadCbufToCbOp 的 m_start/k_start,替代当前硬编码的 zero
影响范围
- 仅影响
mte_l1_l0a / mte_l1_l0b 两个 wrapper op 及其 expand 逻辑
start_row/start_col 默认值为 0,不影响现有使用 mte_l1_l0a/l0b 的其他模板(向后兼容)
- Fix-pipe 路径
mte_l0c_l1 不涉及此问题(C++ FP 实现也不使用 indexRow/indexCol 做偏移,硬件 fix-pipe 是 whole-tile extraction)
Motivation / use case
同上
Proposed API / behavior
No response
Alternatives considered
No response
Additional context
No response
Summary
背景
C++ Cube API 的
TExtractToACompact(dst, src, indexRow, indexCol, validRow, validCol)支持从源 tile 的偏移位置开始提取子 tile,indexRow和indexCol传到底层硬件指令的 start-position 配置。当前 PTO-ISA 的 Cube wrapper op
mte_l1_l0a/mte_l1_l0b没有 start-position 参数,只有source, destination, m, k/n, transpose。在VPTOExpandWrapperOps.cpp的ExpandLeftLoadPattern/ExpandRightLoadPattern中,mte_l1_l0a/l0bexpand 为load_cbuf_to_ca/cb时,deriveLoadCbufToCaControl函数硬编码mStart=0, kStart=0:然而,硬件层指令
load_cbuf_to_ca已经有m_start, k_start参数(VPTOOps.td:1142-1164),这意味着硬件本身支持 start-position,只是 wrapper op 没有把能力暴露出来。问题
由于
mte_l1_l0a/l0b无法传递 start-position,使用 TileLang DSL 编写的 TEXTRACT 模板无法实现与 C++TExtractToA/TExtractToATransCompact对等的偏移提取功能。当用户传入indexRow/indexCol != 0时,偏移信息被静默丢弃,导致提取结果错误。建议方案
为
mte_l1_l0a和mte_l1_l0b增加start_row/start_colkeyword 参数(与transposekeyword 采用相同的设计模式),默认值 0。具体改动:MteL1L0aOp / MteL1L0bOp增加Optional<I64>:$start_row和Optional<I64>:$start_col(默认值 0)_analyze_mte_stage_load增加start_row/start_colkeyword 解析mte_l1_l0a/l0b的 allowed keywords 增加start_row, start_colderiveLoadCbufToCaControl / deriveLoadCbufToCbControl接收start_row/start_col参数,传给LoadCbufToCaOp / LoadCbufToCbOp的m_start/k_start,替代当前硬编码的zero影响范围
mte_l1_l0a/mte_l1_l0b两个 wrapper op 及其 expand 逻辑start_row/start_col默认值为 0,不影响现有使用mte_l1_l0a/l0b的其他模板(向后兼容)mte_l0c_l1不涉及此问题(C++ FP 实现也不使用 indexRow/indexCol 做偏移,硬件 fix-pipe 是 whole-tile extraction)Motivation / use case
同上
Proposed API / behavior
No response
Alternatives considered
No response
Additional context
No response