文件最后提交记录最后更新时间
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;测试清理阶段 aclrtDestroyStreamaclblasDestroy 之前调用,而 aclblasDestroy 内部调用 aclrtSynchronizeStream(h->stream),导致在已销毁的 stream 上执行同步操作,在 A2 平台触发 segfault。 **修复内容**: 1. 将 16 个测试文件中的清理顺序统一改为 aclblasDestroyaclrtDestroyStream(含 blas_test.h 框架和 15 个独立测试文件) 2. 将 fill.hFLT_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 全量构建测试通过,覆盖全部算子测试。 ![image.png](https://raw.gitcode.com/user-images/assets/8916851/81e7b94b-b5a7-4ded-85b4-efe08ac3d4fa/image.png 'image.png') 在 A5 Docker 环境中使用 bash build.sh --soc=ascend950 --run 全量构建测试通过,覆盖全部算子测试。 ![image.png](https://raw.gitcode.com/user-images/assets/8916851/fc14ac97-0f0a-460e-b898-62f09c67d679/image.png 'image.png') ## 文档更新 无 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-blas!1841 天前
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!1737 天前
feat: 新增 sscal 算子 arch35 (ascend950) 实现 Co-authored-by: chensi79@huawei.com<chensi79@huawei.com> # message auto-generated for no-merge-commit merge: !136 merge scal into master feat: 新增 sscal 算子 arch35 (ascend950) 实现 Created-by: chensi79 Commit-by: chensi79@huawei.com Merged-by: cann-robot Description: ## 描述 为 sscal(向量缩放 x = alpha * x)算子新增 arch35 (ascend950/Atlas A5) 实现,并调整 aclblasSscal 接口签名以统一参数传递方式。 ### 改动内容 **1. 新增 arch35 (ascend950) sscal 实现** - blas/scal/sscal/arch35/sscal_host.cpp:host 侧实现,包含参数校验、tiling 计算(按 AIV 核数均分,ELEMENTS_PER_BLOCK=8 对齐)、kernel 启动 - blas/scal/sscal/arch35/sscal_kernel.cpp:kernel 侧实现,使用 AscendC TPipe + TQue 双队列流水,Muls 指令完成向量乘标量,支持非对齐 tail 处理(DataCopyPad) - blas/scal/sscal/arch35/sscal_tiling_data.h:tiling 数据结构定义(totalN/perCoreN/remainder/tileSize/alpha) **2. 修改 aclblasSscal 接口签名** - alpha:由值传递(float)改为指针传递(const float*) - x:由 uint8_t* 改为 float*,去除类型转换 - 参数类型:int64_t 简化为 int - 新增 arch35 重载 sscal_kernel_do(tiling 按值传递),保留 arch22 重载(tiling 按 GM 指针传递)以兼容 **3. 新增 arch35 测试套件** - gtest 框架,CSV 驱动 - 包含参数校验(null handle、null x、incx=0/-1、n=0/-1)、基础功能(n=1~8192)、边界值(alpha=0/负数/极大值)、特殊值(NaN/Inf/extreme)、非 2 的幂次 n 值 - CPU golden 参考实现用于精度比对(COMBINED 模式,abs_tol=1e-5, rel_tol=1e-5) **4. 更新文档** - blas/scal/sscal/README.md:更新为 arch35 实现说明,简化安装步骤 ### 改动原因 Atlas A5 (ascend950) 平台需要 sscal 算子的原生 AscendC 实现。 ### 涉及文件(14 个文件,+655 -98) | 状态 | 文件 | 说明 | |------|------|------| | M | blas/common/kernel_launch/aclblas_kernel_do.h | 新增 arch35 重载声明 | | M | blas/scal/sscal/README.md | 更新为 arch35 说明 | | M | blas/scal/sscal/arch22/sscal_host.cpp | 适配新 API 签名 | | A | blas/scal/sscal/arch35/sscal_host.cpp | arch35 host 实现 | | A | blas/scal/sscal/arch35/sscal_kernel.cpp | arch35 kernel 实现 | | A | blas/scal/sscal/arch35/sscal_tiling_data.h | tiling 数据结构 | | M | include/cann_ops_blas.h | 更新 aclblasSscal 声明 | | M | test/scal/sscal/CMakeLists.txt | ascend950 使用 gtest | | M | test/scal/sscal/arch22/sscal_test.cpp | 适配新 API 签名 | | A | test/scal/sscal/arch35/sscal_npu_wrapper.h | NPU 测试封装 | | A | test/scal/sscal/arch35/sscal_test.cpp | gtest 测试主体 | | A | test/scal/sscal/arch35/sscal_test.csv | 测试数据(22 用例) | | A | test/scal/sscal/sscal_golden.h | CPU golden 参考 | | A | test/scal/sscal/sscal_param.h | 测试参数结构 | ## 关联的Issue - https://gitcode.com/cann/ops-blas/issues/135 ## 测试 - gtest 框架,CSV 驱动,覆盖参数校验、基础功能、边界值、特殊值、非对齐长度 - CPU golden 参考实现精度比对(COMBINED 模式,abs_tol=1e-5, rel_tol=1e-5) - 编译命令:bash build.sh --ops=sscal --run --soc=ascend950 ## 文档更新 - blas/scal/sscal/README.md 已更新为 arch35 实现说明 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-blas!13614 天前
[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!19112 小时前
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!1737 天前