在测试过程中:pto.vmi.vchist/pto.vmi.vdhist/pto.vmi.vscatter时,两个接口的 source VL=64/128/256 用例可以正常编译和运行,但 source VL=1/2/4/8 用例在 Simulator 的 PTOAS native build 阶段全部失败。
@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),
)
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
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 接口支持范围,期望:
如果 Histogram 或者vscatter 明确不支持这些小 VL,期望:
Actual behavior / error logs
Git commit
10883a8
Host platform
Linux (aarch64)
Target Ascend arch (if relevant)
a5
PTOAS build level (if relevant)
None