文件最后提交记录最后更新时间
refactor: 统一头文件 include guard 为 #pragma once 并添加 CI lint 规则 Co-authored-by: Zhang Hua<1302896824@qq.com> # message auto-generated for no-merge-commit merge: !173 merge unify-include-guards into master refactor: 统一头文件 include guard 为 #pragma once 并添加 CI lint 规则 Created-by: zhanghua145 Commit-by: Zhang Hua Merged-by: cann-robot Description: ## 描述 统一仓库中所有头文件的 include guard 风格为 #pragma once,解决当前 #ifndef/#define/#endif#pragma once 混用导致的风格不一致问题。 ## 关联 Issue 关联 Issue #162 ## 变更内容 ### 1. 统一现有头文件(125 个文件,+456/-698) | 类别 | 数量 | 说明 | |------|------|------| | #ifndef#pragma once | 215 个 | 传统宏保护替换为 #pragma once | | 补充 #pragma once | 1 个 | cgerc_kernel_impl.h 原先缺少 include guard | | agent 模板同步 | 2 个 | 模板文件同步转换 | | **净减少行数** | **242 行** | 456 行增加,698 行删除 | ### 2. 添加 CI lint 检查脚本 新增 scripts/ci/check_pragma_once.sh,用于检查 PR 中新增/修改的 .h/.hpp 文件是否使用 #pragma once。 **调用方式**(与现有 scripts/ci/run_example.sh 一致,接收 PR 文件列表): bash bash scripts/ci/check_pragma_once.sh <pr_filelist.txt> pr_filelist.txt 格式为每行一个文件路径(相对仓库根目录),仅检查 .h/.hpp 文件,其他文件类型自动跳过。 **检查规则**: - 必须使用 #pragma once,拒绝 #ifndef include guard 和无 guard 的文件 - 自动跳过第三方目录(.opencode/asc-devkit/ 等) ## ⚠️ 需要维护者操作:接入 CI 流水线 本 PR 提供了 scripts/ci/check_pragma_once.sh 检查脚本,但**尚未接入 CI 流水线**。需要维护者在 GitCode 平台侧的流水线配置中新增一个步骤,在编译前调用该脚本。 建议的接入方式(参考现有 run_example.sh 的调用模式): yaml # CI 流水线中新增 lint 步骤(在编译步骤之前) - name: check-pragma-once script: | # pr_filelist.txt 由平台自动生成,包含 PR 变更文件列表 bash scripts/ci/check_pragma_once.sh pr_filelist.txt 在维护者接入流水线之前,该脚本也可通过以下方式手动使用: - **本地验证**:bash scripts/ci/check_pragma_once.sh <文件列表> - **pre-commit hook**:已集成到 .pre-commit-config.yaml(需开发者自行安装 pre-commit) ## 关于 Issue 中提到的 3 个缺少 guard 的头文件 Issue #162 提到有 3 个头文件缺少标准 include guard。经逐 commit 追溯历史,原始 3 个文件为: | # | 文件 | 当前状态 | |---|------|----------| | 1 | blas/gerc/cgerc/arch22/cgerc_kernel_impl.h | 仍存在,**本次已修复** | | 2 | blas/cgerc/cgerc_kernel_impl.h | 已被删除(cgerc 目录重构,迁移至 blas/gerc/cgerc/arch22/) | | 3 | blas/common/kernel_launch/aclblas_kernel_do.h | 已被删除(commit cc4d43c "del common kernel launch header") | 第 2、3 个文件已在其他 PR 的重构过程中被删除,因此本次只需修复第 1 个文件。 ## 未修改的 #ifndef 仓库中剩余约 114 处 #ifndef 均为**条件编译**(非 include guard),保持不变: - #ifndef __CCE_AICORE__ — 区分 Host/Device 编译目标 - #ifndef TEST_DEVICE_ID — 测试设备 ID 默认值 - #ifndef __force_inline__ — 编译器特性检测 - #ifndef ACLBLAS_OPERATION_DECLARED — 枚举声明保护 这些是功能性的编译条件判断,不属于 include guard,不在本次修改范围内。 ## 验证 - [x] 测试通过(bash build.sh --run --soc=ascend950,ops_blas + ops_blasLt 均成功) ![64c25ba46bac29e59e1321e4e20794de.png](https://raw.gitcode.com/user-images/assets/8916851/3a139d2c-bc45-49b0-b648-2a8b35f0e4c5/64c25ba46bac29e59e1321e4e20794de.png '64c25ba46bac29e59e1321e4e20794de.png') - [x] 所有项目头文件(358 个)均已使用 #pragma once - [x] 无遗漏的 include guard 宏 - [x] CI lint 脚本测试通过(正确拒绝 #ifndef guard,放行 #pragma once,仅检查 PR 变更文件) ## 类型标签 - [ ] Bug 修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:代码风格统一重构 See merge request: cann/ops-blas!1736 天前
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!14014 天前
feat(sasum): 新增 A5 sasum 算子实现并统一接口签名 Co-authored-by: chensi79@huawei.com<chensi79@huawei.com> # message auto-generated for no-merge-commit merge: !54 merge blas/asum into master feat(sasum): 新增 A5 sasum 算子实现并统一接口签名 Created-by: chensi79 Commit-by: chensi79@huawei.com Merged-by: cann-robot Description: ## 描述 sasum 算子适配 A5芯片,同时统一 aclblasSasum 接口签名。 ### 改动原因 sasum 算子原有实现仅支持 arch22 (Atlas A2/A3),需扩展至 arch35 (Ascend 950) 以覆盖 A5 系列硬件。原接口使用 uint8_t* + int64_t 参数,竞品不对标,借此适配机会统一为 const float* + int 的强类型签名。 ### 改动方法 **1. 新增 arch35 算子实现(3个文件)** - sasum_host.cpp: Host 侧入口 aclblasSasum,动态获取 AIV 核数,按元素均分构造 TilingData(值传递,无需 GM 分配),incx≠1 时自动分配 workspace - sasum_kernel.cpp: Kernel 侧实现,含三个 kernel: - sasum_aiv_kernel: incx=1 路径,多核并行 Abs+ReduceSum,原子加累加 - sasum_simt_kernel: incx≠1 路径第一阶段,SIMT 多线程按步长跨步访问,线程内树形归约 - sasum_reduce_kernel: incx≠1 路径第二阶段,单核归约 workspace 部分和 - sasum_tiling_data.h: Tiling 数据结构,最大支持 64 核 **2. 统一接口签名(3个文件)** - cann_ops_blas.h: aclblasSasum 签名从 (handle, int64_t, uint8_t*, int64_t, uint8_t*) 改为 (handle, int, const float*, int, float*) - arch22/sasum_host.cpp: 适配新签名,内部增加类型转换兼容原有 uint8_t* 调用 - aclblas_kernel_do.h: 新增 arch35 风格 sasum_kernel_do 重载(TilingData 值传递),保留 arch22 风格重载 **3. 新增 arch35 测试(5个文件)** - sasum_test.cpp: GTest 框架,CSV 驱动 + NullHandle 异常测试 - sasum_test.csv: 30 条用例,覆盖错误路径、AIV/SIMT 路径、边界值、特殊值 - sasum_npu_wrapper.h: NPU 端到端封装 - sasum_golden.h: CPU 参考实现 - sasum_param.h: 测试参数解析 **4. 更新文档与构建** - README.md: 新增 arch35 产品支持、双路径实现说明、--soc 编译参数 - CMakeLists.txt: arch35 使用 GTest,arch22 保持原有方式 ## 关联的Issue - https://gitcode.com/cann/ops-blas/issues/120 ## 测试 arch35 测试用例覆盖: - 错误路径:null handle、n<0、incx=0、null x(4条) - AIV 路径 (incx=1):n=1/2/5/7/8/17/32/33/64/100/128/256(12条) - SIMT 路径 (incx≠1):incx=2/3/5/7/11(8条) - 特殊值:全零、全负、混合符号、inf(4条) - arch22 现有测试兼容新签名 ## 文档更新 更新 blas/asum/sasum/README.md,新增 arch35 平台支持说明、双路径实现描述、--soc 编译参数表 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-blas!5417 天前