Skip to content

[Bug] PTODSL-vmi, abs interface, Incomplete lowering of pmode="merge" causes type-dependent VPTO emission failures #1331

Description

@chenben09

Component

PTO Dialect / ODS (include/PTO/IR)

Description

在 A5 平台上,使用:
result = pto.vmi.vabs(
source,
mask,
pmode="merge",
)
时,VABS 无法正常完成编译。
当前不同数据类型出现了不同的错误信息:

  • 对于 si8、si16、f16、bf16,报 mask granularity mismatch;
  • 对于 si32、f32,报 VMI residual operation。

Reproduction (minimal)

@jit_kernel(name, params)
def kernel(src_ptr: pto.ptr(dtype, "gm"), out_ptr: pto.ptr(dtype, "gm")):
    src_ub = pto.castptr(pto.i64(0), pto.ptr(dtype, "ub"))
    out_ub = pto.castptr(pto.i64(nbytes), pto.ptr(dtype, "ub"))
    pto.mte_gm_ub(src_ptr, src_ub, 0, nbytes, nburst=(1, 0, 0))
    pto.set_flag("MTE2", "V", event_id=0)
    pto.wait_flag("MTE2", "V", event_id=0)
    source = pto.vmi.vload(src_ub, pto.const(0, dtype=pto.index), size=vl)
    if masked:
        if mask_kind == "group_prefix":
            predicate = pto.vmi.create_mask(active_lanes, size=vl, group=group)
        else:
            predicate = pto.vmi.create_mask(active_lanes, size=vl)
        result = pto.vmi.vabs(source, predicate, pmode=pmode)
    else:
        result = pto.vmi.vabs(source)
    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, nbytes, nburst=(1, 0, 0))

参数信息如下:
- `vl = 256`
- `group = 1`
- `mask_kind = "prefix"`
- `active_lanes = 128`
- `masked = true`
- `pmode = "merge"`

Changing only the data type changes the diagnostic:

- `dtype = bf16`: mask granularity mismatch
- `dtype = f32`: residual VMI operation

Expected behavior

编译成功

Actual behavior / error logs

None

Git commit

e32488c

Host platform

Linux (aarch64)

Target Ascend arch (if relevant)

a5

PTOAS build level (if relevant)

None

Metadata

Metadata

Assignees

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