文件最后提交记录最后更新时间
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 天前
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!9523 天前
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: 统一头文件 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 天前