文件最后提交记录最后更新时间
[bugfix] 标杆数据调整 Co-authored-by: justsheldon<taoxudong@huawei.com> # message auto-generated for no-merge-commit merge: !191 merge fix_precision into master [bugfix] 标杆数据调整 Created-by: justsheldon Commit-by: justsheldon Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复 BLAS 单精度(s 前缀)系列算子在 arch35 架构下的 CPU 标杆数据精度问题: 1. **标杆数据对齐标准 BLAS**:dot/scal/asum 等算子的 golden 从手动实现改为统一调用 Netlib BLAS(通过 cblas_compat.h),消除负步长处理、累积精度等行为与标准参考的差异 2. **补齐测试驱动**:为 sbmv、spmv、symv 等算子补齐 golden 实现(golden.h)、参数解析(param.h)、NPU 封装(npu_wrapper.h)和 CSV 用例(test.csv) 3. **Host 侧实现整改**:Tiling data 改为 const 引用值传递,workspace 统一复用 handle 的 effective workspace 4. **文档更新**:各算子 README 补充测试结构与测试用例覆盖说明,测试输出格式统一为 [PASS] {op}_test 涉及算子(共 12 个):sasum、sdot、gemv_batched、sger、srotm、ssbmv、sscal、scalex、sspmv、ssymv、stbmv、strmv ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> - #189 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 基于 GTest + CSV 参数化驱动框架 - golden 调用标准 Netlib BLAS(cblas_sdot / cblas_sscal 等) - 测试输出:[PASS] {op}_test ![image.png](https://raw.gitcode.com/user-images/assets/8916851/6ee91373-0ce7-4682-8edf-31882df6b2a7/image.png 'image.png') ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 更新 blas/{asum,dot,gemv_batched,ger,rotm,sbmv,scal,scalex,spmv,symv,tbmv,trmv}/README.md,补充测试结构与测试用例覆盖说明 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-blas!19114 小时前
Refact:重构算子目录结构为家族格式 Co-authored-by: xutianze<xutianze2@huawei.com> # message auto-generated for no-merge-commit merge: !95 merge refact_dir_arc into master Refact:重构算子目录结构为家族格式 Created-by: xutianze Commit-by: xutianze Merged-by: cann-robot Description: ## 描述 将 blas/ 和 test/ 中扁平结构的算子目录重构为 family/operator/archXX/ 家族格式,统一仓内目录规范。 **目录变更:** - blas/: gbmv/sbmv/syr/syr2 移入家族子目录(如 blas/gbmv/arch35/blas/gbmv/sgbmv/arch35/) - test/: gbmv/sbmv/sspmv/ssymv/syr/syr2/stpttr/strttp 移入家族子目录(如 test/sspmv/test/spmv/sspmv/) - 测试文件重命名匹配算子名(如 gbmv_test.cppsgbmv_test.cpp) - 算子 README 从 test/ 移动到 blas/ 对应算子目录下(34 个文件) **构建系统适配:** - test/CMakeLists.txt: 支持家族嵌套路径解析,自动查找 test/family/op/ 结构 - build.sh: 新增 expand_family_ops() 函数,支持 --ops=gbmv 自动展开为具体算子(如 sgbmv);自动发现功能支持家族嵌套目录;测试二进制路径解析适配嵌套结构 **文档更新:** - docs/QUICKSTART.md: scopy 路径更新为 blas/copy/scopy/ - docs/zh/install/dir_structure.md: 目录结构说明更新为 family/operator/archXX/ 格式 - docs/zh/develop/st_develop_guide.md: 测试文件清单更新为 test/<family>/<op>/ 格式 - agent/agents/developer.mdagent/agents/tester.md: 路径模板更新为 {family}/{operator_name} 格式 - agent/skills/blas-new-op-workflow/references/task-prompts.md: 输出路径更新 ## 关联的Issue [#56](https://gitcode.com/cann/ops-blas/issues/56) ## 测试 双平台验证,全部通过,0 失败。 ### arch22 平台 (ascend910b3) **自动发现验证:** bash bash build.sh --run --soc=ascend910b3 **结果:** 自动发现 34 个算子,23 passed / 11 skipped / 0 failed ✅ **通过的算子 (23个):** | 命令 | 结果 | |------|------| | bash build.sh --ops=sasum --soc=ascend910b3 --run | sasum: passed ✅ | | bash build.sh --ops=caxpy --soc=ascend910b3 --run | caxpy: passed ✅ | | bash build.sh --ops=scopy --soc=ascend910b3 --run | scopy: passed ✅ | | bash build.sh --ops=cdot --soc=ascend910b3 --run | cdot: passed ✅ | | bash build.sh --ops=sdot --soc=ascend910b3 --run | sdot: passed ✅ | | bash build.sh --ops=snrm2 --soc=ascend910b3 --run | snrm2: passed ✅ | | bash build.sh --ops=csrot --soc=ascend910b3 --run | csrot: passed ✅ | | bash build.sh --ops=srotm --soc=ascend910b3 --run | srotm: passed ✅ | | bash build.sh --ops=cscal --soc=ascend910b3 --run | cscal: passed ✅ | | bash build.sh --ops=sscal --soc=ascend910b3 --run | sscal: passed ✅ | | bash build.sh --ops=cswap --soc=ascend910b3 --run | cswap: passed ✅ | | bash build.sh --ops=sswap --soc=ascend910b3 --run | sswap: passed ✅ | | bash build.sh --ops=cgemv --soc=ascend910b3 --run | cgemv: passed ✅ | | bash build.sh --ops=cgemv_batched --soc=ascend910b3 --run | cgemv_batched: passed ✅ | | bash build.sh --ops=sger --soc=ascend910b3 --run | sger: passed ✅ | | bash build.sh --ops=cgerc --soc=ascend910b3 --run | cgerc: passed ✅ | | bash build.sh --ops=sspmv --soc=ascend910b3 --run | sspmv: passed ✅ | | bash build.sh --ops=ssymv --soc=ascend910b3 --run | ssymv: passed ✅ | | bash build.sh --ops=stbmv --soc=ascend910b3 --run | stbmv: passed ✅ | | bash build.sh --ops=stpmv --soc=ascend910b3 --run | stpmv: passed ✅ | | bash build.sh --ops=ctrmv --soc=ascend910b3 --run | ctrmv: passed ✅ | | bash build.sh --ops=strmv --soc=ascend910b3 --run | strmv: passed ✅ | | bash build.sh --ops=strsv --soc=ascend910b3 --run | strsv: passed ✅ | **跳过的算子 (11个):** | 算子 | 跳过原因 | |------|---------| | sgbmv, ssbmv, ssyr, ssyr2, stpsv, stpttr, strttp | 仅 arch35 实现 (ascend950) | | blasLtMatmul | 需要 asc-devkit >= 9.1,当前 9.0 | | colwise_mul, complex_mat_dot, iamax | arch22 无实现 | ### arch35 平台 (ascend950) **单算子验证:** | 命令 | 结果 | |------|------| | bash build.sh --ops=gbmv --soc=ascend950 --run | sgbmv: 51 tests passed ✅ | | bash build.sh --ops=sbmv --soc=ascend950 --run | ssbmv: 29 tests passed ✅ | | bash build.sh --ops=syr --soc=ascend950 --run | ssyr: 23 tests passed ✅ | | bash build.sh --ops=syr2 --soc=ascend950 --run | ssyr2: 34 tests passed ✅ | | bash build.sh --ops=spmv --soc=ascend950 --run | sspmv: 20 tests passed ✅ | | bash build.sh --ops=symv --soc=ascend950 --run | ssymv: 20 tests passed ✅ | | bash build.sh --ops=tpttr --soc=ascend950 --run | stpttr: 56 tests passed ✅ | | bash build.sh --ops=trttp --soc=ascend950 --run | strttp: 56 tests passed ✅ | **家族名展开验证:** | 命令 | 展开结果 | 结果 | |------|---------|------| | bash build.sh --ops=gbmv --soc=ascend950 --run | gbmv → sgbmv | 51 tests passed ✅ | | bash build.sh --ops=sbmv --soc=ascend950 --run | sbmv → ssbmv | 29 tests passed ✅ | | bash build.sh --ops=syr --soc=ascend950 --run | syr → ssyr | 23 tests passed ✅ | | bash build.sh --ops=gbmv,sbmv,syr --soc=ascend950 --run | gbmv,sbmv,syr → sgbmv,ssbmv,ssyr | 3 passed, 0 failed ✅ | **自动发现验证:** bash bash build.sh --soc=ascend950 --run **结果:** 自动发现 33 个算子,11 passed / 22 skipped / 0 failed ✅ **Rebase cann/master 后验证:** bash git rebase cann/master # rebase 到 cb1184d bash build.sh --ops=gbmv,sbmv,syr,syr2,spmv,symv,tpttr,trttp --soc=ascend950 --run **结果:** 8 passed, 0 skipped, 0 failed ✅ ### 验证总结 | 平台 | 通过算子数 | 测试用例数 | 失败数 | |------|-----------|-----------|--------| | arch22 (ascend910b3) | 23 | - | 0 | | arch35 (ascend950) | 8 | 289 | 0 | | **总计** | **31** | **289+** | **0** | ## 文档更新 - docs/QUICKSTART.md: scopy 路径更新 - docs/zh/install/dir_structure.md: 目录结构说明更新 - docs/zh/develop/st_develop_guide.md: 测试文件清单更新 - agent/agents/developer.mdagent/agents/tester.md: 路径模板更新 - agent/skills/blas-new-op-workflow/references/task-prompts.md: 输出路径更新 - 34 个算子 README 从 test/ 移动到 blas/ 对应目录 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:目录结构重构 See merge request: cann/ops-blas!9524 天前
refactor: 重构测试框架数据填充模式,统一为参数化命名体系 Co-authored-by: xutianze<xutianze2@huawei.com> # message auto-generated for no-merge-commit merge: !140 merge refactor/fill-unify-desc-params into master refactor: 重构测试框架数据填充模式,统一为参数化命名体系 Created-by: xutianze Commit-by: xutianze Merged-by: cann-robot Description: ## 描述 重构测试框架 fill.hcsv_loader.h,将离散的 BlasDataFill 枚举替换为参数化的 BlasFillMode 结构体,统一数据填充模式的命名和管理。 **核心变更:** 1. fill.h — 枚举→结构体 + Strategy 模式:BlasFillMode 结构体(method/pattern/val1/val2),ValueGenerator 策略接口 + 5 个具体策略 + createGenerator 工厂,新增 P_BANDED 支持带状矩阵自描述填充,新增 parseFill 接口 2. csv_loader.h — 新增泛型 parseEnum<EnumT> 模板,所有枚举解析(parseFillMode/parseDiagType/parseSideMode/parseOpTrans/parseComputeType/parseStatus)从 if-else 改为 static map + parseEnum 3. 所有 *_param.hBlasDataFillBlasFillModeparseDataFillparseFill,视觉风格统一 4. 所有 *_test.cpp — 删除 desc 字符串参数和 kBlasSentinel 冗余参数,删除 stbmv/stpsv/strmv 本地 helper 函数,统一使用 fill.h 5. 所有 CSV — fill 列值替换为新命名(如 ZEROSVALUE_NORM_0UPPER_TRIRANDOM_UPPER 等) **命名规则:** METHOD_PATTERN_VAL...,从某位开始可不填(后续取默认值),不允许跳位。 **修复的 Bug:** 之前 description 字段包含 "large"/"neg"/"inf"/"nan"/"extr" 时会意外触发 fill 覆盖(desc 子串匹配),现已彻底消除。 ## 关联的Issue [#134](https://gitcode.com/cann/ops-blas/issues/134) ## 测试 ### 静态验证 - 全量 grep 验证:仓库内所有 *.cpp/*.h/*.csv 中不再存在 BlasDataFillparseDataFill 引用 - 全量 grep 验证:所有 CSV 中不再存在小写 fill 值(random/zeros/ones 等) - git diff 检查:确认无非相关格式化改动混入,仅涉及 test/agent/ 目录 ### 编译验证 - 平台:Ascend950 (arch35),CANN 9.1.0 - 编译 21 个 arch35 测试目标,20 个编译通过 - blasLtMatmul_test 编译失败:TEST_DEVICE_ID 未定义(cann/master 预存问题,非本次引入) ### 上板运行验证 #### Ascend950 (arch35) 在 Ascend950 NPU 上运行全部 20 个编译通过的测试,结果如下: | 测试 | 用例数 | 结果 | |------|:---:|:---:| | sasum_test | 35 | ✅ PASS | | sdot_test | 12 | ✅ PASS | | sgbmv_test | 51 | ✅ PASS | | gemv_batched_test | 71 | ✅ PASS | | sgemv_test | 64 | ✅ PASS | | aclblasSgeqrfBatched_test | 42 | ✅ PASS | | sgetrfBatched_test | 33 | ✅ PASS | | sspmv_test | 20 | ✅ PASS | | sswap_test | 42 | ✅ PASS | | ssymv_test | 20 | ✅ PASS | | ssyr2_test | 44 | ✅ PASS | | ssyr_test | 45 | ✅ PASS | | stbmv_test | 37 | ✅ PASS | | stpmv_test | 65 | ✅ PASS | | stpsv_test | 30 | ✅ PASS | | stpttr_test | 56 | ✅ PASS | | strmv_test | 40 | ✅ PASS | | strsv_test | 44 | ✅ PASS | | strttp_test | 56 | ✅ PASS | | ssbmv_test | 20 | ✅ PASS | **结论:20/20 全部通过,本次重构未引入任何功能回归。** #### Ascend910B (arch22) 在 Ascend910B3 NPU 上运行全部 22 个有 arch22 实现的测试,结果如下: | 测试 | 用例数 | 结果 | |------|:---:|:---:| | sasum_test | 1 | ✅ PASS | | caxpy_test | 1 | ✅ PASS | | scopy_test | 2 | ✅ PASS | | cdot_test | 2 | ✅ PASS | | sdot_test | 1 | ✅ PASS | | cgemv_test | 2 | ✅ PASS | | sger_test | 1 | ✅ PASS | | cgerc_test | 1 | ✅ PASS | | snrm2_test | 2 | ✅ PASS | | csrot_test | 1 | ✅ PASS | | cscal_test | 1 | ✅ PASS | | sscal_test | 2 | ✅ PASS | | sspmv_test | 2 | ✅ PASS | | cswap_test | 1 | ✅ PASS | | sswap_test | 1 | ✅ PASS | | ssymv_test | 2 | ✅ PASS | | stbmv_test | 2 | ✅ PASS | | stpmv_test | 2 | ✅ PASS | | ctrmv_test | 2 | ✅ PASS | | strmv_test | 4 | ✅ PASS | | srotm_test | 36 | ✅ PASS | | strsv_test | 6 | ✅ PASS | **结论:22/22 全部通过,本次重构未引入任何功能回归。** ## 文档更新 - agent/skills/blas-ST-develop/SKILL.md:枚举表更新为 BlasFillMode 结构体文档 + 命名规则表 + 常用写法示例 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-blas!14015 天前