| fix: 修复 ReduceStdV2Update 多路径精度异常 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !4579 merge codex/reduce-std-v2-update-kernel-mask-fix into master fix: 修复 ReduceStdV2Update 多路径精度异常 Created-by: zhongheng Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 ReduceStdV2Update 的 Arch35 kernel 存在两类精度问题: - AscendC::Reg::UpdateMask 会通过引用自动更新剩余元素数,原实现又手工递减一次,导致处理超过单轮 64 个 FP32 元素时重复扣减,后续数据被跳过。 - FP16/BF16 group tail-A 路径按 FP32 而非输入 dtype 计算 cache 到 workspace 的源步长,造成部分输出读取 padding 数据并错误变为 0。 本 PR 移除 normal/empty kernel 中 UpdateMask 后的重复递减,按输入 dtype 恢复 tail-A 对齐步长,并将 GEIR 示例扩展到 128 个输入元素以覆盖跨 64 元素 mask 边界。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2593 ## 测试 - Ascend950 package 构建通过,覆盖 FP16、FP32、BF16。 - 最新 ops-test-kit e559b7f1:210/210 Golden 精度 PASS、内存越界检查 PASS、性能状态 PASS。 - 问题用例 wb_reduce_std_v2_update_0165、wb_reduce_std_v2_update_0201 定向回归 PASS。 - GEIR 方差、标准差回归 2/2 PASS。 - Host UT 9/9 PASS。 - pre-commit、clang-format、codespell、OAT 全部通过。 - 冒烟已过 ## 文档更新 不涉及对外文档更新;仅扩展 GEIR 回归示例的测试规模。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4579 | 27 天前 |
| [CANNBot]ReduceStdV2Update算子新增AscendC实现 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !4353 merge cherry-pick-mr-4262-1785415278766-auto into master [CANNBot]ReduceStdV2Update算子新增AscendC实现 Created-by: zhaozhongyao Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 为ReduceStdV2Update算子新增Ascend C Kernel实现,目标平台ascend950(arch35),使该算子在Ascend 950上具备AscendC原生实现能力。 ReduceStdV2Update是CANN l0op内部算子,被aclnnVar/aclnnVarCorrection/aclnnVarMean在非regbase路径下内部调用,接收已计算好的均值mean,基于mean计算方差或标准差。此前该算子仅有TBE binary覆盖,无AscendC实现。 ### 计算公式 $$diff = x - \mu$$ $$sq\_sum = \sum_{i \in D} diff_i^2$$ $$var = \frac{sq\_sum}{N - correction}$$ $$output = \begin{cases} \sqrt{var} & \text{if } if\_std = true \\ var & \text{if } if\_std = false \end{cases}$$ 其中 $D$ 为归约维度集合,$N$ 为归约维度元素个数,$\mu$ 为外部传入的均值,correction=0 为有偏估计(分母 N),correction=1 为无偏估计(分母 N-1)。aclnn接口固定输出方差(if_std=false);GE IR图模式可通过if_std属性控制输出方差或标准差。 ### 调用链 aclnnVar(x, dim, correction, keepdim) → ReduceMean(x) → Expand(mean, x.shape) → l0op::ReduceStdV2Update(x, mean, dim, unbiased, keepdim) ← 本算子 → output_var - **op_kernel**:实现normal/group/empty三套模板。normal模板处理常规A×R 2D归约;group模板处理多核2D分核场景(A轴切分多核+R轴组内归约);empty模板处理空Tensor边界。FP16/BF16输入固定提升到FP32累加,结果转回原dtype。 - **op_host**:新增def.cpp(OpDef定义,dtype/format/属性配置)、infershape.cpp(shape推导,复用InferShape4ReduceStdFunc逻辑)、tiling_arch35.cpp(arch35 Tiling实现,标准4步pattern预处理+双切分+多核切分)。 - **op_graph**:新增proto.h(仅文档,REG_OP沿用canndev reduce_ops.h:1563已有注册,不重复定义)。 - **CMakeLists.txt**:改为add_all_modules_sources标准模板,配置ascend950 COMPUTE_UNIT和arch35 TILING_DIR,ACLNNTYPE=aclnn_exclude(L2接口不对外暴露,由aclnnVar等上层接口内部调用)。 - **examples**:新增GE IR图模式调用示例,覆盖FP32 var和std两个用例。 - **文档**:新增README.md(产品支持、功能说明、参数说明、约束说明、调用说明),更新docs/zh/op_list.md支持状态。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2327 ## 测试 - **编译验证**:ascend950平台编译通过,生成15份binary(5模板组合 × 3 dtype,动态TilingKey分发)。 - **GE IR通路验证**:run_example graph模式执行通过,覆盖FP32 var(if_std=false)和std(if_std=true)两个用例,验证算子在图模式下方差和标准差两条计算路径均正确。 - **Torch通路验证**:torch.var → aclnnVar → ReduceStdV2Update kernel调用链验证通过,3/3用例PASS(无偏方差、有偏方差、keepdim)。 - **TTK精度验证**:614条用例全部执行,通过率100%。覆盖FP32/FP16/BF16三种dtype、全维度归约/指定维度归约/负索引/keepdim/有偏无偏等场景。 - **白盒测试**:210条白盒用例,全部非空tensor,唯一参数组合率99.5%,覆盖if_std=true/unbiased=false/keepdim=true/负索引/多维度归约等场景,TilingKey覆盖率80%(4/5命中)。 ## 文档更新 - 新增math/reduce_std_v2_update/README.md:算子README,包含产品支持情况(6款产品)、功能说明、参数说明、约束说明、调用说明。 - 更新docs/zh/op_list.md:reduce_std_v2_update支持状态由×改为√(op_kernel=√, op_host=√, op_api=×, op_graph=√)。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4353 | 1 个月前 |
| [CANNBot]ReduceStdV2Update算子新增AscendC实现 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !4353 merge cherry-pick-mr-4262-1785415278766-auto into master [CANNBot]ReduceStdV2Update算子新增AscendC实现 Created-by: zhaozhongyao Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 为ReduceStdV2Update算子新增Ascend C Kernel实现,目标平台ascend950(arch35),使该算子在Ascend 950上具备AscendC原生实现能力。 ReduceStdV2Update是CANN l0op内部算子,被aclnnVar/aclnnVarCorrection/aclnnVarMean在非regbase路径下内部调用,接收已计算好的均值mean,基于mean计算方差或标准差。此前该算子仅有TBE binary覆盖,无AscendC实现。 ### 计算公式 $$diff = x - \mu$$ $$sq\_sum = \sum_{i \in D} diff_i^2$$ $$var = \frac{sq\_sum}{N - correction}$$ $$output = \begin{cases} \sqrt{var} & \text{if } if\_std = true \\ var & \text{if } if\_std = false \end{cases}$$ 其中 $D$ 为归约维度集合,$N$ 为归约维度元素个数,$\mu$ 为外部传入的均值,correction=0 为有偏估计(分母 N),correction=1 为无偏估计(分母 N-1)。aclnn接口固定输出方差(if_std=false);GE IR图模式可通过if_std属性控制输出方差或标准差。 ### 调用链 aclnnVar(x, dim, correction, keepdim) → ReduceMean(x) → Expand(mean, x.shape) → l0op::ReduceStdV2Update(x, mean, dim, unbiased, keepdim) ← 本算子 → output_var - **op_kernel**:实现normal/group/empty三套模板。normal模板处理常规A×R 2D归约;group模板处理多核2D分核场景(A轴切分多核+R轴组内归约);empty模板处理空Tensor边界。FP16/BF16输入固定提升到FP32累加,结果转回原dtype。 - **op_host**:新增def.cpp(OpDef定义,dtype/format/属性配置)、infershape.cpp(shape推导,复用InferShape4ReduceStdFunc逻辑)、tiling_arch35.cpp(arch35 Tiling实现,标准4步pattern预处理+双切分+多核切分)。 - **op_graph**:新增proto.h(仅文档,REG_OP沿用canndev reduce_ops.h:1563已有注册,不重复定义)。 - **CMakeLists.txt**:改为add_all_modules_sources标准模板,配置ascend950 COMPUTE_UNIT和arch35 TILING_DIR,ACLNNTYPE=aclnn_exclude(L2接口不对外暴露,由aclnnVar等上层接口内部调用)。 - **examples**:新增GE IR图模式调用示例,覆盖FP32 var和std两个用例。 - **文档**:新增README.md(产品支持、功能说明、参数说明、约束说明、调用说明),更新docs/zh/op_list.md支持状态。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2327 ## 测试 - **编译验证**:ascend950平台编译通过,生成15份binary(5模板组合 × 3 dtype,动态TilingKey分发)。 - **GE IR通路验证**:run_example graph模式执行通过,覆盖FP32 var(if_std=false)和std(if_std=true)两个用例,验证算子在图模式下方差和标准差两条计算路径均正确。 - **Torch通路验证**:torch.var → aclnnVar → ReduceStdV2Update kernel调用链验证通过,3/3用例PASS(无偏方差、有偏方差、keepdim)。 - **TTK精度验证**:614条用例全部执行,通过率100%。覆盖FP32/FP16/BF16三种dtype、全维度归约/指定维度归约/负索引/keepdim/有偏无偏等场景。 - **白盒测试**:210条白盒用例,全部非空tensor,唯一参数组合率99.5%,覆盖if_std=true/unbiased=false/keepdim=true/负索引/多维度归约等场景,TilingKey覆盖率80%(4/5命中)。 ## 文档更新 - 新增math/reduce_std_v2_update/README.md:算子README,包含产品支持情况(6款产品)、功能说明、参数说明、约束说明、调用说明。 - 更新docs/zh/op_list.md:reduce_std_v2_update支持状态由×改为√(op_kernel=√, op_host=√, op_api=×, op_graph=√)。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4353 | 1 个月前 |
| fix: 完善ReduceStdV2Update Tiling异常输入校验 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !4451 merge codex/transfer-test-exception into master fix: 完善ReduceStdV2Update Tiling异常输入校验 Created-by: zhongheng Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 本 PR 完善 ReduceStdV2Update 在 Ascend950 上的异常输入 Tiling 校验,以及静态、动态和异常 GE IR 测试证据。 主要改动: - Tiling 校验: - 增加 x rank 0~8 约束; - 独立校验 x、mean 支持 FLOAT16、BFLOAT16、FLOAT; - 校验 x/mean dtype 一致及 mean Shape 与 x Shape 完全一致; - 校验 x、mean、output_var 均为 ND; - 完善 dim、correction 等异常场景的错误信息和测试覆盖。 - GE IR example: - 增强静态 example 的 Shape、dtype 和 variance/std 数值验证; - 新增 unknown-dim -1、unknown-rank [-2] 动态 example,分别执行 3 组 concrete shape; - 新增 11 个异常/边界 case,覆盖 x/mean dtype、dtype 组合、x/mean/output format、rank 9、dim、correction 和 mean Shape 约束; - 对拒绝用例校验 Tiling 失败阶段、错误签名和目标 Kernel 未启动,对合法 Cast 边界用例校验 Kernel 启动及输出。 - UT: - 扩充 Ascend950 Tiling UT,覆盖新增约束及原有合法路径。 本 PR 当前仅修改 5 个 ReduceStdV2Update 文件:3 个 GE IR example、1 个 Tiling 实现和 1 个 Tiling UT。最终版本未修改 T1/T2 原型、InferShape 实现或 UT CMake,也未修改 Kernel 计算公式和性能策略。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2518 ## 测试 - Ascend950 自定义算子 package 编译、安装 PASS;libcust_opmaster_rt2.0.so 依赖完整,包内 _apt 动态模块和 Ascend950 Kernel 对象完整; - Ascend950 Tiling UT:15/15 PASS; - static GEIR:2/2 variance/std 用例的输出 Shape、dtype 和数值均 PASS; - dynamic GEIR:unknown-dim -1 3/3 PASS,unknown-rank [-2] 3/3 PASS;6 组均命中 custom vendor、_apt 动态模块并实际启动本算子 Kernel; - exception GEIR:11/11 PASS;10 个拒绝用例均在 Tiling 阶段失败、错误签名匹配且目标 Kernel 未启动,1 个合法 Cast 用例启动目标 Kernel并通过输出校验; - Ascend950 TTK:代表用例 5/5 PASS;614 条全量最终结果 614/614 PASS、执行覆盖率 100%; ## 文档更新 无。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4451 | 28 天前 |
| fix: 修复 ReduceStdV2Update 多路径精度异常 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !4579 merge codex/reduce-std-v2-update-kernel-mask-fix into master fix: 修复 ReduceStdV2Update 多路径精度异常 Created-by: zhongheng Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 ReduceStdV2Update 的 Arch35 kernel 存在两类精度问题: - AscendC::Reg::UpdateMask 会通过引用自动更新剩余元素数,原实现又手工递减一次,导致处理超过单轮 64 个 FP32 元素时重复扣减,后续数据被跳过。 - FP16/BF16 group tail-A 路径按 FP32 而非输入 dtype 计算 cache 到 workspace 的源步长,造成部分输出读取 padding 数据并错误变为 0。 本 PR 移除 normal/empty kernel 中 UpdateMask 后的重复递减,按输入 dtype 恢复 tail-A 对齐步长,并将 GEIR 示例扩展到 128 个输入元素以覆盖跨 64 元素 mask 边界。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2593 ## 测试 - Ascend950 package 构建通过,覆盖 FP16、FP32、BF16。 - 最新 ops-test-kit e559b7f1:210/210 Golden 精度 PASS、内存越界检查 PASS、性能状态 PASS。 - 问题用例 wb_reduce_std_v2_update_0165、wb_reduce_std_v2_update_0201 定向回归 PASS。 - GEIR 方差、标准差回归 2/2 PASS。 - Host UT 9/9 PASS。 - pre-commit、clang-format、codespell、OAT 全部通过。 - 冒烟已过 ## 文档更新 不涉及对外文档更新;仅扩展 GEIR 回归示例的测试规模。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4579 | 27 天前 |
| fix: 完善ReduceStdV2Update Tiling异常输入校验 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !4451 merge codex/transfer-test-exception into master fix: 完善ReduceStdV2Update Tiling异常输入校验 Created-by: zhongheng Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 本 PR 完善 ReduceStdV2Update 在 Ascend950 上的异常输入 Tiling 校验,以及静态、动态和异常 GE IR 测试证据。 主要改动: - Tiling 校验: - 增加 x rank 0~8 约束; - 独立校验 x、mean 支持 FLOAT16、BFLOAT16、FLOAT; - 校验 x/mean dtype 一致及 mean Shape 与 x Shape 完全一致; - 校验 x、mean、output_var 均为 ND; - 完善 dim、correction 等异常场景的错误信息和测试覆盖。 - GE IR example: - 增强静态 example 的 Shape、dtype 和 variance/std 数值验证; - 新增 unknown-dim -1、unknown-rank [-2] 动态 example,分别执行 3 组 concrete shape; - 新增 11 个异常/边界 case,覆盖 x/mean dtype、dtype 组合、x/mean/output format、rank 9、dim、correction 和 mean Shape 约束; - 对拒绝用例校验 Tiling 失败阶段、错误签名和目标 Kernel 未启动,对合法 Cast 边界用例校验 Kernel 启动及输出。 - UT: - 扩充 Ascend950 Tiling UT,覆盖新增约束及原有合法路径。 本 PR 当前仅修改 5 个 ReduceStdV2Update 文件:3 个 GE IR example、1 个 Tiling 实现和 1 个 Tiling UT。最终版本未修改 T1/T2 原型、InferShape 实现或 UT CMake,也未修改 Kernel 计算公式和性能策略。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2518 ## 测试 - Ascend950 自定义算子 package 编译、安装 PASS;libcust_opmaster_rt2.0.so 依赖完整,包内 _apt 动态模块和 Ascend950 Kernel 对象完整; - Ascend950 Tiling UT:15/15 PASS; - static GEIR:2/2 variance/std 用例的输出 Shape、dtype 和数值均 PASS; - dynamic GEIR:unknown-dim -1 3/3 PASS,unknown-rank [-2] 3/3 PASS;6 组均命中 custom vendor、_apt 动态模块并实际启动本算子 Kernel; - exception GEIR:11/11 PASS;10 个拒绝用例均在 Tiling 阶段失败、错误签名匹配且目标 Kernel 未启动,1 个合法 Cast 用例启动目标 Kernel并通过输出校验; - Ascend950 TTK:代表用例 5/5 PASS;614 条全量最终结果 614/614 PASS、执行覆盖率 100%; ## 文档更新 无。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4451 | 28 天前 |
| [CANNBot]ReduceStdV2Update算子新增AscendC实现 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !4353 merge cherry-pick-mr-4262-1785415278766-auto into master [CANNBot]ReduceStdV2Update算子新增AscendC实现 Created-by: zhaozhongyao Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 为ReduceStdV2Update算子新增Ascend C Kernel实现,目标平台ascend950(arch35),使该算子在Ascend 950上具备AscendC原生实现能力。 ReduceStdV2Update是CANN l0op内部算子,被aclnnVar/aclnnVarCorrection/aclnnVarMean在非regbase路径下内部调用,接收已计算好的均值mean,基于mean计算方差或标准差。此前该算子仅有TBE binary覆盖,无AscendC实现。 ### 计算公式 $$diff = x - \mu$$ $$sq\_sum = \sum_{i \in D} diff_i^2$$ $$var = \frac{sq\_sum}{N - correction}$$ $$output = \begin{cases} \sqrt{var} & \text{if } if\_std = true \\ var & \text{if } if\_std = false \end{cases}$$ 其中 $D$ 为归约维度集合,$N$ 为归约维度元素个数,$\mu$ 为外部传入的均值,correction=0 为有偏估计(分母 N),correction=1 为无偏估计(分母 N-1)。aclnn接口固定输出方差(if_std=false);GE IR图模式可通过if_std属性控制输出方差或标准差。 ### 调用链 aclnnVar(x, dim, correction, keepdim) → ReduceMean(x) → Expand(mean, x.shape) → l0op::ReduceStdV2Update(x, mean, dim, unbiased, keepdim) ← 本算子 → output_var - **op_kernel**:实现normal/group/empty三套模板。normal模板处理常规A×R 2D归约;group模板处理多核2D分核场景(A轴切分多核+R轴组内归约);empty模板处理空Tensor边界。FP16/BF16输入固定提升到FP32累加,结果转回原dtype。 - **op_host**:新增def.cpp(OpDef定义,dtype/format/属性配置)、infershape.cpp(shape推导,复用InferShape4ReduceStdFunc逻辑)、tiling_arch35.cpp(arch35 Tiling实现,标准4步pattern预处理+双切分+多核切分)。 - **op_graph**:新增proto.h(仅文档,REG_OP沿用canndev reduce_ops.h:1563已有注册,不重复定义)。 - **CMakeLists.txt**:改为add_all_modules_sources标准模板,配置ascend950 COMPUTE_UNIT和arch35 TILING_DIR,ACLNNTYPE=aclnn_exclude(L2接口不对外暴露,由aclnnVar等上层接口内部调用)。 - **examples**:新增GE IR图模式调用示例,覆盖FP32 var和std两个用例。 - **文档**:新增README.md(产品支持、功能说明、参数说明、约束说明、调用说明),更新docs/zh/op_list.md支持状态。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2327 ## 测试 - **编译验证**:ascend950平台编译通过,生成15份binary(5模板组合 × 3 dtype,动态TilingKey分发)。 - **GE IR通路验证**:run_example graph模式执行通过,覆盖FP32 var(if_std=false)和std(if_std=true)两个用例,验证算子在图模式下方差和标准差两条计算路径均正确。 - **Torch通路验证**:torch.var → aclnnVar → ReduceStdV2Update kernel调用链验证通过,3/3用例PASS(无偏方差、有偏方差、keepdim)。 - **TTK精度验证**:614条用例全部执行,通过率100%。覆盖FP32/FP16/BF16三种dtype、全维度归约/指定维度归约/负索引/keepdim/有偏无偏等场景。 - **白盒测试**:210条白盒用例,全部非空tensor,唯一参数组合率99.5%,覆盖if_std=true/unbiased=false/keepdim=true/负索引/多维度归约等场景,TilingKey覆盖率80%(4/5命中)。 ## 文档更新 - 新增math/reduce_std_v2_update/README.md:算子README,包含产品支持情况(6款产品)、功能说明、参数说明、约束说明、调用说明。 - 更新docs/zh/op_list.md:reduce_std_v2_update支持状态由×改为√(op_kernel=√, op_host=√, op_api=×, op_graph=√)。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4353 | 1 个月前 |
| [CANNBot]ReduceStdV2Update算子新增AscendC实现 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !4353 merge cherry-pick-mr-4262-1785415278766-auto into master [CANNBot]ReduceStdV2Update算子新增AscendC实现 Created-by: zhaozhongyao Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 为ReduceStdV2Update算子新增Ascend C Kernel实现,目标平台ascend950(arch35),使该算子在Ascend 950上具备AscendC原生实现能力。 ReduceStdV2Update是CANN l0op内部算子,被aclnnVar/aclnnVarCorrection/aclnnVarMean在非regbase路径下内部调用,接收已计算好的均值mean,基于mean计算方差或标准差。此前该算子仅有TBE binary覆盖,无AscendC实现。 ### 计算公式 $$diff = x - \mu$$ $$sq\_sum = \sum_{i \in D} diff_i^2$$ $$var = \frac{sq\_sum}{N - correction}$$ $$output = \begin{cases} \sqrt{var} & \text{if } if\_std = true \\ var & \text{if } if\_std = false \end{cases}$$ 其中 $D$ 为归约维度集合,$N$ 为归约维度元素个数,$\mu$ 为外部传入的均值,correction=0 为有偏估计(分母 N),correction=1 为无偏估计(分母 N-1)。aclnn接口固定输出方差(if_std=false);GE IR图模式可通过if_std属性控制输出方差或标准差。 ### 调用链 aclnnVar(x, dim, correction, keepdim) → ReduceMean(x) → Expand(mean, x.shape) → l0op::ReduceStdV2Update(x, mean, dim, unbiased, keepdim) ← 本算子 → output_var - **op_kernel**:实现normal/group/empty三套模板。normal模板处理常规A×R 2D归约;group模板处理多核2D分核场景(A轴切分多核+R轴组内归约);empty模板处理空Tensor边界。FP16/BF16输入固定提升到FP32累加,结果转回原dtype。 - **op_host**:新增def.cpp(OpDef定义,dtype/format/属性配置)、infershape.cpp(shape推导,复用InferShape4ReduceStdFunc逻辑)、tiling_arch35.cpp(arch35 Tiling实现,标准4步pattern预处理+双切分+多核切分)。 - **op_graph**:新增proto.h(仅文档,REG_OP沿用canndev reduce_ops.h:1563已有注册,不重复定义)。 - **CMakeLists.txt**:改为add_all_modules_sources标准模板,配置ascend950 COMPUTE_UNIT和arch35 TILING_DIR,ACLNNTYPE=aclnn_exclude(L2接口不对外暴露,由aclnnVar等上层接口内部调用)。 - **examples**:新增GE IR图模式调用示例,覆盖FP32 var和std两个用例。 - **文档**:新增README.md(产品支持、功能说明、参数说明、约束说明、调用说明),更新docs/zh/op_list.md支持状态。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/2327 ## 测试 - **编译验证**:ascend950平台编译通过,生成15份binary(5模板组合 × 3 dtype,动态TilingKey分发)。 - **GE IR通路验证**:run_example graph模式执行通过,覆盖FP32 var(if_std=false)和std(if_std=true)两个用例,验证算子在图模式下方差和标准差两条计算路径均正确。 - **Torch通路验证**:torch.var → aclnnVar → ReduceStdV2Update kernel调用链验证通过,3/3用例PASS(无偏方差、有偏方差、keepdim)。 - **TTK精度验证**:614条用例全部执行,通过率100%。覆盖FP32/FP16/BF16三种dtype、全维度归约/指定维度归约/负索引/keepdim/有偏无偏等场景。 - **白盒测试**:210条白盒用例,全部非空tensor,唯一参数组合率99.5%,覆盖if_std=true/unbiased=false/keepdim=true/负索引/多维度归约等场景,TilingKey覆盖率80%(4/5命中)。 ## 文档更新 - 新增math/reduce_std_v2_update/README.md:算子README,包含产品支持情况(6款产品)、功能说明、参数说明、约束说明、调用说明。 - 更新docs/zh/op_list.md:reduce_std_v2_update支持状态由×改为√(op_kernel=√, op_host=√, op_api=×, op_graph=√)。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4353 | 1 个月前 |