Skip to content

[PTO 0.58.6] B.FPATR None 路径固定发 RNE,矩阵全族被合规模型拒绝 #62

Description

@zhoubot

问题概述

TileOP API linx@05662833bd7bf71420b15b8f7ba8727a4569e897 的矩阵公共头
PTO_MATMUL_HEADER 无条件发出:

B.DATR <DataTypeB>, byte0, Zero, RNE, NOSAT

B.FPATR.PreQuantMode=None(0) 时,这违反 PTO ISA 0.58.6 的 must-default
规则,导致 TMATMUL/TGEMV 及 FIXP float-output 路径在合规模型中被 fail-closed 拒绝。

当前代码证据

include/jcore/template_asm.hpp

#define PTO_MATMUL_HEADER(...)
  B.DATR %D[DataTypeB], byte0, Zero, RNE, NOSAT

该宏被 TMATMUL、TMATMUL.ACC/BIAS/MX、TGEMV 及多种 FIXP overload 共用,
上层调用无法覆盖这里的字面量 RNE

规范依据

PTO-SPEC main@dea0b75e803cffa873982c90f9aa0cd17c6d243b

https://github.com/PTO-ISA/pto-spec/blob/dea0b75e803cffa873982c90f9aa0cd17c6d243b/asl/block/attributes/B.FPATR.asl#L215-L234

其中 BundleFPATRDATRFieldsLegal 明确规定:

PreQuantMode == 0 => RMode == NONE && Sat == 0

因此模型断言不是应当放宽的实现限制;首个错误边界在 API lowering。

复现

完整复现及受影响算子见:
https://github.com/LinxISA/SuperScalarModel/issues/560#gfrun-1--bfpatr-nonecube-matmul-%E5%85%A8%E6%97%8F--fixp-float-%E8%BE%93%E5%87%BA%E6%97%8F%E5%B4%A9

典型命令:

bash microbenchmark/tileop-guard/run_guard.sh cube tmatmul
bash microbenchmark/tileop-guard/run_guard.sh fixp chain

模型拒绝:

B.FPATR None requires B.DATR RMode=NONE and Sat=0

建议 owner

  • include/jcore/template_asm.hpp 矩阵/FIXP lowering 维护者
  • 对应 LLVM B.DATR alias 维护者参与验证

最小修复方向

FixpAttr.PreQuant 生成 B.DATR:

  • PreQuant=None:发 RMode=NONE, Sat=0
  • shift/fixed-rounding/可选 rounding 模式:严格按 BundleFPATRDATRFieldsLegal 分支;
  • 不要通过放宽 gfrun/ASL 检查接受非法组合。

验收条件

  1. 覆盖 plain/ACC/BIAS/MX、TGEMV 和 FIXP keep-acc 的最小编译测试。
  2. 反汇编逐位确认 PreQuant=0 时 RMode/Sat 为零。
  3. 至少一个 TMATMUL 与一个 FIXP case 在 gfrun/gfsim 上使用同一 ELF 运行并比对 golden。
  4. 增加 negative test,确保 PreQuant=0 + RNE 被拒绝。
  5. 完整 make check 通过。

关联汇总 issue:
https://github.com/LinxISA/SuperScalarModel/issues/560

Activity

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions