| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(test): resolve A2 platform test segfaults by fixing cleanup order and FLT_TRUE_MIN compatibility Co-authored-by: Zhang Hua<1302896824@qq.com> # message auto-generated for no-merge-commit merge: !184 merge fix/fill-h-flt-true-min into master fix(test): resolve A2 platform test segfaults by fixing cleanup order and FLT_TRUE_MIN compatibility Created-by: zhanghua145 Commit-by: Zhang Hua Merged-by: cann-robot Description: ## 描述 修复 A2(ascend910_93)平台编译不通过以及BLAS 算子测试 Segmentation fault问题。 **根因**:A2 编译器不支持 FLT_TRUE_MIN;测试清理阶段 aclrtDestroyStream 在 aclblasDestroy 之前调用,而 aclblasDestroy 内部调用 aclrtSynchronizeStream(h->stream),导致在已销毁的 stream 上执行同步操作,在 A2 平台触发 segfault。 **修复内容**: 1. 将 16 个测试文件中的清理顺序统一改为 aclblasDestroy → aclrtDestroyStream(含 blas_test.h 框架和 15 个独立测试文件) 2. 将 fill.h 中 FLT_TRUE_MIN 替换为 std::numeric_limits<float>::denorm_min()(A2 编译器不支持 FLT_TRUE_MIN) **影响范围**:仅修改 test/ 目录下 16 个文件,不涉及算子源码和库代码。 ## 关联的Issue [#176](https://gitcode.com/cann/ops-blas/issues/176) ## 测试 在 A2 Docker 环境中使用 bash build.sh --soc=ascend910_93 --run 全量构建测试通过,覆盖全部算子测试。  在 A5 Docker 环境中使用 bash build.sh --soc=ascend950 --run 全量构建测试通过,覆盖全部算子测试。  ## 文档更新 无 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-blas!184 | 12 天前 | |
修复6个算子的代码结构问题 Co-authored-by: xutianze<xutianze2@huawei.com> # message auto-generated for no-merge-commit merge: !178 merge refactor/six-ops-cleanup into master 修复6个算子的代码结构问题 Created-by: xutianze Commit-by: xutianze Merged-by: cann-robot Description: ## 描述 修复 6 个算子的代码结构问题,包括冗余 include、重复定义的核心数获取函数、不准确的错误信息、wrapper 中缺少返回值校验,以及纯搬运算子的 TQue/TQueBind 冗余开销。 ### 修改内容 **公共函数提取** - 在 host_utils.h 中新增公共 GetAivCoreCount 函数,供所有算子复用 **sswap (#169)** - 删除冗余 include(acl/acl.h、cann_ops_blas_common.h) - 替换本地 GetVectorCoreCount 为公共 GetAivCoreCount - 错误信息改为 "GetAivCoreCount failed" - wrapper 补全 aclrtSynchronizeDevice 和 aclrtMemcpy D2H 返回值校验 - kernel 使用 TBuf 替代 TQueBind,消除队列管理开销 **sgemv (#168)** - 删除冗余 include(acl/acl.h、cann_ops_blas_common.h) - 替换本地 GetVectorCoreCount 为公共 GetAivCoreCount - 错误信息改为 "GetAivCoreCount failed" **stpmv (#170)** - 删除冗余 include(acl/acl.h、cann_ops_blas_common.h) - 替换本地 GetVectorCoreCount 为公共 GetAivCoreCount - 错误信息改为 "GetAivCoreCount failed" **stpttr (#171)** - 删除冗余 include(acl/acl.h、cann_ops_blas_common.h) - wrapper 补全 aclrtSynchronizeDevice 和 aclrtMemcpy D2H 返回值校验 - kernel 使用 TBuf 替代 TQue,消除队列管理开销 **strttp (#172)** - 删除冗余 include(acl/acl.h、cann_ops_blas_common.h) - wrapper 补全 aclrtSynchronizeDevice 和 aclrtMemcpy D2H 返回值校验 - kernel 使用 TBuf 替代 TQue,消除队列管理开销 **sgeqrf_batched (#173)** - 删除冗余 include(acl/acl.h、cann_ops_blas_common.h、tiling/platform/platform_ascendc.h) - 替换本地 GetAivCoreCount 为公共版本 - 错误信息改为 "GetAivCoreCount failed" - wrapper 补全 aclrtSynchronizeDevice 返回值校验 ### 性能优化效果 对纯搬运算子使用 TBuf 替代 TQue/TQueBind,消除队列管理开销(AllocTensor/EnQue/DeQue/FreeTensor): | 算子 | 测试用例 | 优化前 (us) | 优化后 (us) | 提升 | |------|---------|------------|------------|------| | sswap | n=8192 | 12.75 | 9.57 | **24.9%** | | stpttr | n=10240 | 969.06 | 663.04 | **31.6%** | | strttp | n=10240 | 975.03 | 672.45 | **31.0%** | **stpmv 未优化**:使用双缓冲流水线(CopyIn/Compute/CopyOut 三阶段重叠),TQue 提供了真正的流水线并行收益,替换为 TBuf 会丢失重叠。 ## 关联的Issue - [#168](https://gitcode.com/cann/ops-blas/issues/168) - sgemv 算子 host 代码冗余 - [#169](https://gitcode.com/cann/ops-blas/issues/169) - sswap 算子 host 代码冗余及 wrapper 缺少返回值校验 - [#170](https://gitcode.com/cann/ops-blas/issues/170) - stpmv 算子 host 代码冗余 - [#171](https://gitcode.com/cann/ops-blas/issues/171) - stpttr 算子 host 代码冗余及 wrapper 缺少返回值校验 - [#172](https://gitcode.com/cann/ops-blas/issues/172) - strttp 算子 host 代码冗余及 wrapper 缺少返回值校验 - [#173](https://gitcode.com/cann/ops-blas/issues/173) - sgeqrf_batched 算子 host 代码冗余及 wrapper 缺少返回值校验 ## 测试 Ascend 950PR 实板验证,6 个算子全部通过(0 失败,0 跳过): - sswap: 42/42 - sgemv: 64/64 - stpmv: 65/65 - stpttr: 56/56 - strttp: 56/56 - sgeqrf_batched: 42/42 ## 文档更新 无 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-blas!178 | 10 天前 | |
Feat: 新增面向arch35的aclblasSswap接口 Co-authored-by: xutianze<xutianze2@huawei.com> # message auto-generated for no-merge-commit merge: !96 merge aclSswap into master Feat: 新增面向arch35的aclblasSswap接口 Created-by: xutianze Commit-by: xutianze Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增 aclblasSswap 的 arch35(Ascend950PR / DAV_3510)实现。 **主要改动:** 1. **新增 arch35 kernel 实现**(blas/swap/sswap/arch35/) - sswap_host.cpp:host 侧参数校验、动态获取 Vector Core 数、Tiling 计算与 kernel 调度 - sswap_kernel.cpp:kernel 侧多核并行 + GM↔UB 交叉写回实现向量交换,采用 Single Buffer + DataCopyPad 处理对齐与尾部 - sswap_tiling_data.h:Tiling 数据结构定义 2. **API 签名优化**(include/cann_ops_blas.h) - aclblasSswap 签名从 (handle, int64_t, uint8_t*, int64_t, uint8_t*, int64_t) 改为 (handle, int, float*, int, float*, int),类型更安全、语义更清晰 - arch22 host 实现同步适配新签名 3. **新增 arch35 精度 ST**(test/swap/sswap/arch35/) - CSV 驱动的 GTest 参数化测试,覆盖 28 个用例(边界、常规、特殊值、错误码) - 精度验证模式为 EXACT(位精确) 4. **新增 arch22 测试适配**(test/swap/sswap/arch22/sswap_test.cpp) - 适配新 API 签名(float* / int) ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 无 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **arch22(Ascend910B)**:bash build.sh --ops=sswap --soc=ascend910b --run,n=16384 精度验证通过 - **arch35(Ascend950PR)**:bash build.sh --ops=sswap --soc=ascend950 --run,28 条 CSV 用例全部通过(精度模式 EXACT) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 新增 blas/swap/sswap/README.md,包含算子概述、接口说明、参数约束、编译运行、调用示例、实现要点及与 arch22 的差异对比。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-blas!96 | 1 个月前 | |
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 均成功)  - [x] 所有项目头文件(358 个)均已使用 #pragma once - [x] 无遗漏的 include guard 宏 - [x] CI lint 脚本测试通过(正确拒绝 #ifndef guard,放行 #pragma once,仅检查 PR 变更文件) ## 类型标签 - [ ] Bug 修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:代码风格统一重构 See merge request: cann/ops-blas!173 | 18 天前 | |
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 均成功)  - [x] 所有项目头文件(358 个)均已使用 #pragma once - [x] 无遗漏的 include guard 宏 - [x] CI lint 脚本测试通过(正确拒绝 #ifndef guard,放行 #pragma once,仅检查 PR 变更文件) ## 类型标签 - [ ] Bug 修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:代码风格统一重构 See merge request: cann/ops-blas!173 | 18 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 12 天前 | ||
| 10 天前 | ||
| 1 个月前 | ||
| 18 天前 | ||
| 18 天前 |