| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[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 | 2 个月前 | |
fix(SignBitsUnpack、ReduceStdV2Update算子):质量加固:典型问题+代码问题整改 Co-authored-by: aqt666<2016141505@qq.com> # message auto-generated for no-merge-commit merge: !5722 merge codex/sign-bits-unpack-quality into master fix(SignBitsUnpack、ReduceStdV2Update算子):质量加固:典型问题+代码问题整改 Created-by: aqt666 Commit-by: aqt666 Merged-by: cann-robot Description: ## 描述 **SignBitsUnpack** 1. 修复解包位序与 SignBitsPack 不一致的问题:逐字节执行 bit reverse,使输出按 MSB-first 顺序展开。 2. 修复符号极性相反的问题:统一为 bit 1 输出 -1、bit 0 输出 +1。 3. 在 InferShape 中增加解包元素总数的乘法溢出检查及 size 整除检查,避免非法 shape 被静默截断。 4. 同步更新算子 README、Host UT 和 Kernel UT,新增 Pack/Unpack 位序与极性兼容性测试。 5. ACLNN 对 dtype 参数增加显式白名单校验,仅允许既有的 FLOAT/FLOAT16,未新增任何 dtype。 6. README 和 ACLNN 文档明确区分 self=UINT8、size=int64_t 与 dtype 参数支持集,避免跨参数类型聚合误判。 7. 复核 size 约束:InferShape、Tiling、ACLNN、L0 均已实现 size > 0 校验,ACLNN/InferShape 同时校验整除关系,无需重复增加逻辑。 8. 将已有非法 dtype UT 名称修正为 ascend910B2_case_invalid_dtype。 ## 关联的Issue #3202 ## 测试 - SignBitsUnpack Host UT:17/17 通过。 - SignBitsUnpack Kernel UT:8/8 通过。 - clang-format --dry-run --Werror 通过。 - git diff --check 通过。 ## 文档更新 更新 math/sign_bits_unpack/README.md,明确 MSB-first 位序及 bit 1/0 对应的输出极性。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 > canndev Ascend 950 ini 清理由于属于 cann/canndev 仓库,不包含在本 ops-math PR 中。 **ReduceStdV2Update** 1. 完善空 Tensor 防御路径:保持 EMPTY_A 零操作,EMPTY_R 输出由固定 0 修正为 NaN,并与 normal 路径 N <= correction 时的 cof=NaN 语义保持一致。 2. 修复 EMPTY_R 路径 UB 预算超限:VECOUT 队列由双缓冲调整为单缓冲,最坏场景 UB 占用由 256KB 降至 192KB,低于 248KB 上限。 3. 去除 Kernel 入口文件 _apt 后缀,将 reduce_std_v2_update_apt.cpp 重命名为 reduce_std_v2_update.cpp,并同步更新算子注册配置。 4. 保留并验证 mean 的 dtype、format、shape 一致性校验,补充 EMPTY_A、EMPTY_R 和非正分母 NaN 场景 Host UT。 5. 同步更新 README 中的空 Tensor 与 NaN 边界语义。 测试: - ReduceStdV2Update Host UT:22/22 通过。 - ReduceStdV2Update Kernel 定向构建通过。 - clang-format --dry-run --Werror 通过。 - git diff --check 通过。 ### InferShape 补充加固 1. 修复非法 dim 在 InferShape 阶段被静默忽略的问题,越界轴现在返回失败;保留负轴、多轴和轴去重语义。 2. 增加静态场景下 mean.shape == x.shape 校验,并允许动态维度延后到运行期校验。 3. 增加输入 rank 不超过 8 的约束校验。 4. 修复 unknown-rank 动态 Shape 输出透传。 5. 补充多轴归约、越界轴、mean shape 不一致、unknown-rank 和 rank 9 的 InferShape UT。 补充测试: - PR 实际 head 上 ophost + opgraph 完整构建通过。 - ReduceStdV2Update Host UT:27/27 通过(Tiling 18 项、InferShape 9 项)。 - git diff --check 通过。 See merge request: cann/ops-math!5722 | 12 天前 | |
[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 | 2 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 12 天前 | ||
| 2 个月前 |