Skip to content

[Bug] PTODSL-vmi,vchist/vdhist/vscatter 小 VL 用例触发 Histogram layout materialization 错误 #1377

Description

@chenben09

Component

PTO Dialect / ODS (include/PTO/IR)

Description

在测试过程中:pto.vmi.vchist/pto.vmi.vdhist/pto.vmi.vscatter时,两个接口的 source VL=64/128/256 用例可以正常编译和运行,但 source VL=1/2/4/8 用例在 Simulator 的 PTOAS native build 阶段全部失败。

Reproduction (minimal)

@jit_kernel(name, params)
def kernel(
    source_ptr: pto.ptr(pto.ui8, "gm"),
    acc_ptr: pto.ptr(pto.ui16, "gm"),
    out_ptr: pto.ptr(pto.ui16, "gm"),
):
    source_vl = 8
    bins = 256
    active_lanes = 8

    source_ub = pto.castptr(
        pto.i64(0),
        pto.ptr(pto.ui8, "ub"),
    )
    acc_ub = pto.castptr(
        pto.i64(32),
        pto.ptr(pto.ui16, "ub"),
    )
    out_ub = pto.castptr(
        pto.i64(544),
        pto.ptr(pto.ui16, "ub"),
    )

    pto.mte_gm_ub(
        source_ptr,
        source_ub,
        0,
        source_vl,
        nburst=(1, 0, 0),
    )
    pto.mte_gm_ub(
        acc_ptr,
        acc_ub,
        0,
        bins * 2,
        nburst=(1, 0, 0),
    )

    pto.set_flag("MTE2", "V", event_id=0)
    pto.wait_flag("MTE2", "V", event_id=0)

    source = pto.vmi.vload(
        source_ub,
        pto.const(0, dtype=pto.index),
        size=source_vl,
    )
    acc = pto.vmi.vload(
        acc_ub,
        pto.const(0, dtype=pto.index),
        size=bins,
    )
    mask = pto.vmi.create_mask(
        active_lanes,
        size=source_vl,
    )

    result = pto.vmi.vchist(
        acc,
        source,
        mask,
    )

    pto.vmi.vstore(
        result,
        out_ub,
        pto.const(0, dtype=pto.index),
    )

    pto.set_flag("V", "MTE3", event_id=0)
    pto.wait_flag("V", "MTE3", event_id=0)

    pto.mte_ub_gm(
        out_ub,
        out_ptr,
        bins * 2,
        nburst=(1, 0, 0),
    )

Expected behavior

如果 source VL=1/2/4/8 属于 Histogram或者vscatter 接口支持范围,期望:

  1. PTOAS 完成 source layout 到 contiguous layout 的合法转换;
  2. vchist/vdhist 完成 VPTO lowering;
  3. 编译成功;
  4. Simulator 运行成功;
  5. 输出与独立 Golden 完全一致。

如果 Histogram 或者vscatter 明确不支持这些小 VL,期望:

  1. verifier 在前置验证阶段明确拒绝;
  2. 给出稳定、清晰的 unsupported VL/layout 诊断;
  3. 文档中明确列出 vchist/vdhist 支持的 source VL;
  4. 不应在 VPTO emission 阶段因为缺少 ensure_layout materialization 而失败。

Actual behavior / error logs

vchist 代表性错误:
VMI-LAYOUT-CONTRACT:
pto.vmi.vchist operand #1 has type
!pto.vmi.vreg<8xui8,
  #pto.vmi.layout<num_groups = 8, slots = 8>>

but requires:
!pto.vmi.vreg<8xui8,
  #pto.vmi.layout<contiguous>>

pto.vmi.ensure_layout has no registered materialization support:
source/result layouts do not match a supported ensure_layout table row

Error: VPTO emission pipeline failed.

部分失败用例(可在测试框架复现):
vmi_vchist_ui8_i16_b128_vl1_full_seeded
vmi_vdhist_ui8_i16_b128_vl1_full_seeded

Git commit

10883a8

Host platform

Linux (aarch64)

Target Ascend arch (if relevant)

a5

PTOAS build level (if relevant)

None

Activity

  1. mouliangyu commented on Sep 9, 2026

    @mouliangyu
    Collaborator

    vdhist/vchist 只支持特定 lane 数,vscatter 应该允许支持1/2/4/8,但是不应该支持96. 我们的合法 lane 数为 1/2/4/8/64/128/256

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

QAIssues from the QA teambugSomething isn't workingvmi

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions