已关闭
[Requirement|需求建议]: arch35 下 sasum/snrm2/srot/srotg/sscal/scalex 测试适配混合容差精度标准 #320
陈思创建于  7月18日关闭于  7月18日
陈思
陈思成员
7月18日 创建

一、Background(背景信息)

ops-blas 仓库 arch35 测试中,sasumsnrm2srotsrotgsscalscalex 这 6 个算子的精度校验逻辑分散写在各自测试文件中,存在以下问题:

  1. 校验模式不统一:各算子手写不同的判定分支

    • sasum:按 isinf / isnan / golden==0 分流到 ABS 或 REL 模式
    • snrm2:同样手写 isinf/isnan 分流 + REL 模式
    • srotg:使用 MERE_MARE 模式,硬编码 mereThreshold = 1.0/8192.0mareMultiplier = 10.0
    • srot / sscal / scalex:各自硬编码 VerifyConfig 参数
  2. 与社区精度标准不对齐:上述手写阈值无法自适应 FP16/BF16 等混合精度场景下的数据范围与精度位宽,与生态算子开源精度标准(MIXED_TOLERANCE)存在偏差。

  3. 重复代码isinf / isnan 判空等逻辑在多个算子测试中重复出现,维护成本高。

二、Origin(信息来源)

对齐 test/frame 框架已引入的 applyMixedTolerance 接口(由 PR #283 引入 MIXED_TOLERANCE 混合容差精度测试框架,commit 2a0ca68 "feat(frame): 加入混合容差精度测试" 落地)。本需求延续 7c1df1c "feat(arch35/sbmv,spmv,symv,trmv,tbmv): 适配混合容差精度标准" 的工作流,将剩余 6 个算子迁移至统一接口。

三、Benefit / Necessity(价值/作用)

  • 统一精度校验逻辑:6 个算子统一调用 applyMixedTolerance(cfg, ACL_FLOAT, golden),消除各测试文件中重复手写的 isinf/isnan/ABS/REL/MERE_MARE 分支
  • 对齐精度标准:与生态算子开源精度标准(experimental_standard.md §2.1)保持一致,提升混合精度场景下校验的准确性
  • 降低维护成本:精度阈值由框架统一管理,后续调参无需逐文件修改

四、Design(设计方案)

在每个算子测试中,将手写的 VerifyConfig 配置替换为统一调用:

VerifyConfig cfg;
applyMixedTolerance(cfg, ACL_FLOAT, golden);
EXPECT_TRUE(Verifier::verifyScalar(result, golden, cfg, caseName));

具体改动范围:

  • test/asum/sasum/arch35/sasum_test.cpp:删除 isinf/isnan/ABS/REL 分流,统一改用 applyMixedTolerance
  • test/nrm2/snrm2/arch35/snrm2_test.cpp:同上
  • test/rot/srot/arch35/srot_test.cpp:替换硬编码 VerifyConfig
  • test/rotg/srotg/arch35/srotg_test.cpp:抽取 VerifySrotgResult 辅助函数,内部调用 applyMixedTolerance,消除 device/host 两处重复的 MERE_MARE 配置
  • test/scal/sscal/arch35/sscal_test.cpp:替换硬编码 VerifyConfig
  • test/scalex/arch35/scalex_test.cpp:替换硬编码 VerifyConfig
  • 同步清理对应 _test.csv 中不再需要的精度参数列

关联 PR:https://gitcode.com/cann/ops-blas/pull/294

likedislike
陈思陈思成员
7月18日 添加了label:requirement
CANN-robotCANN-robot成员
7月18日 关闭了 issue
CANN-robotCANN-robot成员
7月18日 添加了label:resolved
wangzitaowangzitao成员
7月18日 将 chensi79 设为负责人