Skip to content

[Bug] tload template failed for qwen3 cube kernel #877

Description

@Likai-19

Component

PTO Dialect / ODS (include/PTO/IR)

Description

lib/TileOps/tload_template.py 有两个 Cube 路径的 tload 模板(ND2NZDN2NZ),当源 view 的 valid_shape 为动态(v_row=? / v_col=?)时,两个 constraint 都返回 True,导致 select_kernel() 报二义性错误。

另外,缺少 DN2ZN(DN → transposed NZ,blayout=row_major, slayout=col_major)模板,导致 QK matmul(incore_4)的 K^T 加载失败。该模式在 pto-isa 的 C++ ISA 中已实现(TLoad.hpp:472, TLoadCubeDN2ZN),硬件通过复用 nd2nz 指令 + 行列参数互换来完成,不需要新的硬件指令。

Reproduction (minimal)

cd test/samples/Qwen3DecodeA5

# Cube kernel (tload 二义性)
ptoas qwen3_decode_incore_1.pto --pto-arch=a5 --pto-backend=vpto --pto-level=level3 -o /tmp/test.o
# Error: select_kernel() found multiple highest-priority kernels for tload:
#   tload_gm_to_mat_dn2nz (priority=1) vs tload_gm_to_mat_nd2nz (priority=1)

# QK matmul (缺失 DN2ZN 模板)
ptoas qwen3_decode_incore_4.pto --pto-arch=a5 --pto-backend=vpto --pto-level=level3 -o /tmp/test.o
# Error: select_kernel() found no registered kernel after constraint evaluation for tload

Expected behavior

  • valid_shape 为动态时,通过源 view 的 layout 属性(#pto.layout<nd> / #pto.layout<dn>)来消歧,正确匹配 ND2NZDN2NZ 模板。
  • DM→transposed NZ(blayout=row_major, slayout=col_major)的 Cube 加载应匹配 DN2ZN 模板。

Actual behavior / error logs

Qwen3DecodeA5 的所有 Cube kernel 在 VPTO 路径下编译均失败:

| Kernel | 错误 |
|--------|------|
| incore_1/2/6/10/11 | `multiple highest-priority kernels ... tload_gm_to_mat_dn2nz vs tload_gm_to_mat_nd2nz` |
| incore_4 | `no registered kernel after constraint evaluation for tload` |

根因分析:

1. **ND2NZ/DN2NZ 二义性**:两个 constraint 都要求 `dst.blayout=COL_MAJOR, dst.slayout=ROW_MAJOR`,当 `valid_shape=[null, null]` 时,`_known_eq()` 遇 `None` 返回 `True`,两个 constraint 同时通过,`select_kernel()` 报二义性。

2. **DN2ZN 缺失**:incore_4 的 K tile 需要 `blayout=ROW_MAJOR, slayout=COL_MAJOR`(转置 NZ),不匹配任何现有模板。硬件 C++ ISA 已支持(`TLoadCubeDN2ZN`),它内部复用 `nd2nz` 硬件指令 + 行列参数互换,但 TileOps 模板库缺少对应封装。

Git commit

0

Host platform

None

Target Ascend arch (if relevant)

None

PTOAS build level (if relevant)

None

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions