ops-blas 仓库 arch35 测试中,sasum、snrm2、srot、srotg、sscal、scalex 这 6 个算子的精度校验逻辑分散写在各自测试文件中,存在以下问题:
sasum
snrm2
srot
srotg
sscal
scalex
校验模式不统一:各算子手写不同的判定分支
isinf
isnan
golden==0
MERE_MARE
mereThreshold = 1.0/8192.0
mareMultiplier = 10.0
VerifyConfig
与社区精度标准不对齐:上述手写阈值无法自适应 FP16/BF16 等混合精度场景下的数据范围与精度位宽,与生态算子开源精度标准(MIXED_TOLERANCE)存在偏差。
重复代码:isinf / isnan 判空等逻辑在多个算子测试中重复出现,维护成本高。
对齐 test/frame 框架已引入的 applyMixedTolerance 接口(由 PR #283 引入 MIXED_TOLERANCE 混合容差精度测试框架,commit 2a0ca68 "feat(frame): 加入混合容差精度测试" 落地)。本需求延续 7c1df1c "feat(arch35/sbmv,spmv,symv,trmv,tbmv): 适配混合容差精度标准" 的工作流,将剩余 6 个算子迁移至统一接口。
applyMixedTolerance
2a0ca68
7c1df1c
applyMixedTolerance(cfg, ACL_FLOAT, golden)
在每个算子测试中,将手写的 VerifyConfig 配置替换为统一调用:
VerifyConfig cfg; applyMixedTolerance(cfg, ACL_FLOAT, golden); EXPECT_TRUE(Verifier::verifyScalar(result, golden, cfg, caseName));
具体改动范围:
test/asum/sasum/arch35/sasum_test.cpp
test/nrm2/snrm2/arch35/snrm2_test.cpp
test/rot/srot/arch35/srot_test.cpp
test/rotg/srotg/arch35/srotg_test.cpp
VerifySrotgResult
test/scal/sscal/arch35/sscal_test.cpp
test/scalex/arch35/scalex_test.cpp
_test.csv
关联 PR:https://gitcode.com/cann/ops-blas/pull/294
一、Background(背景信息)
ops-blas 仓库 arch35 测试中,
sasum、snrm2、srot、srotg、sscal、scalex这 6 个算子的精度校验逻辑分散写在各自测试文件中,存在以下问题:校验模式不统一:各算子手写不同的判定分支
sasum:按isinf/isnan/golden==0分流到 ABS 或 REL 模式snrm2:同样手写 isinf/isnan 分流 + REL 模式srotg:使用MERE_MARE模式,硬编码mereThreshold = 1.0/8192.0、mareMultiplier = 10.0srot/sscal/scalex:各自硬编码VerifyConfig参数与社区精度标准不对齐:上述手写阈值无法自适应 FP16/BF16 等混合精度场景下的数据范围与精度位宽,与生态算子开源精度标准(MIXED_TOLERANCE)存在偏差。
重复代码:
isinf/isnan判空等逻辑在多个算子测试中重复出现,维护成本高。二、Origin(信息来源)
对齐 test/frame 框架已引入的
applyMixedTolerance接口(由 PR #283 引入 MIXED_TOLERANCE 混合容差精度测试框架,commit2a0ca68"feat(frame): 加入混合容差精度测试" 落地)。本需求延续7c1df1c"feat(arch35/sbmv,spmv,symv,trmv,tbmv): 适配混合容差精度标准" 的工作流,将剩余 6 个算子迁移至统一接口。三、Benefit / Necessity(价值/作用)
applyMixedTolerance(cfg, ACL_FLOAT, golden),消除各测试文件中重复手写的 isinf/isnan/ABS/REL/MERE_MARE 分支四、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 分流,统一改用applyMixedTolerancetest/nrm2/snrm2/arch35/snrm2_test.cpp:同上test/rot/srot/arch35/srot_test.cpp:替换硬编码VerifyConfigtest/rotg/srotg/arch35/srotg_test.cpp:抽取VerifySrotgResult辅助函数,内部调用applyMixedTolerance,消除 device/host 两处重复的 MERE_MARE 配置test/scal/sscal/arch35/sscal_test.cpp:替换硬编码VerifyConfigtest/scalex/arch35/scalex_test.cpp:替换硬编码VerifyConfig_test.csv中不再需要的精度参数列关联 PR:https://gitcode.com/cann/ops-blas/pull/294