Pull Request已成功合入, 合并人@CANN-robot
(感谢 rk 的贡献)变更摘要
本次 PR 是一次纯粹的代码清理(cleancode)提交,主要目标是在多个 Ascend 算子内核文件中消除重复代码。通过将 if constexpr 分支中的公共逻辑提取到分支外部、将重复的计算逻辑抽取为独立模板函数、以及将队列/缓冲区管理的通用模式封装为公共辅助函数,显著减少了代码冗余,提升了可维护性。
主要改动
-
add_rms_norm_regbase_common.h— 统一LoadForHandleRemainV1中三种数据类型的公共后处理逻辑:将half、bfloat16_t和float三个分支中完全重复的Add/DataCopy/Mul操作提取到if constexpr块之后,同时把RegTensor<float> mainA2, mainB2, tailA2, tailB2声明提升到分支外部,消除了约 30 行重复代码。 -
add_rms_norm_dynamic_quant_regbase_common.h— 抽取ComputeYAndAbsMaxVF模板函数:将ComputeYScale和ComputeReduceMax两处完全相同的计算序列(Mul→可选Add(beta)→可选Mul(smooth_scale)→DataCopy→Abs→Max)提取为新的ComputeYAndAbsMaxVF<HAS_BETA, HAS_SMOOTH_SCALE>模板函数,两处调用点统一使用该函数。 -
batch_norm_v3_regbase_common.h— 新增InferComputeImpl模板函数并重构TwoRowAddPartialMeanWithTail:引入InferComputeImpl<Self, T>封装 batch_norm_v3 各变体中重复的队列出队/分配、缓冲区获取、物理地址提取和VFNormalize调用模式;同时TwoRowAddPartialMeanWithTail改为调用TwoRowAddPartialMean来消除其内部重复的均值计算逻辑。 -
三个 batch_norm_v3 子类 —
Compute方法统一委托InferComputeImpl:batch_norm_v3_infer_last_channel_continuous_a.h、batch_norm_v3_infer_last_channel_small_a.h和batch_norm_v3_infer_small_ab1.h中的Compute方法均由原先内联的队列/缓冲区管理代码替换为对InferComputeImpl的调用,同时将VFNormalize的访问权限从private改为public以支持模板函数调用。 -
rms_norm_grad_regbase_dgamma.h— 抽取ComputePreDgamma方法:将CalcDgamma、CalcDgammaAndReduceSum和CalcDgammaAndReduceSumWithTail三处方法中重复的队列操作(DeQue、GetPhyAddr、VFCalcPreDgamma、FreeTensor)提取为ComputePreDgamma,消除约 30 行重复代码。


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| norm | ✅ 王星, 唐玮玮 (2/2) | ✅ 王星 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
wangpengbo26, thanks for your pull request. All authors of the commits have signed the CLA. 👍


流水线任务触发成功
任务链接 [95741e7259cf49c7b125dc0e22ab98e0][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_experimental | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_950 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_950 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Pre | ✅ SUCCESS | >>>>> | |
| pre_comment | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_950_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_experimental_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_950_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_910b | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_910c | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_950 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_classify | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_mobile_station_9030_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test_ophost | ✅ SUCCESS | ||
| UT_Test_opapi | ✅ SUCCESS | ||
| UT_Test_kernel | ✅ SUCCESS | ||
| UT_Test_opgraph | ✅ SUCCESS | ||
| PreSmoke_A900 | ✅ SUCCESS | >>>>> | |
| API_Check | ✅ SUCCESS | >>>>> | |
| PreSmoke_ATK_Test_A2 | ✅ SUCCESS | >>>>> | |
| UT_Test_harmony-infer-chs-nn | ✅ SUCCESS | ||
| UT_Test_harmony-infer-chs-nn-1 | ✅ SUCCESS | ||
| UT_Test_report_lcov | ✅ SUCCESS | >>>>> |
[2026-07-29 16:13:50] CI执行结束


流水线任务触发成功
任务链接 [a6ae05fadfbf493da7f94216647dabf2][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| antipoison | ✅ SUCCESS | >>>>> | |
| codecheck_checkpr | ✅ SUCCESS | ||
| StaticCheck_codespell | ✅ SUCCESS | ||
| StaticCheck_link_validity | ✅ SUCCESS | ||
| StaticCheck_resource_existence | ✅ SUCCESS | ||
| StaticCheck_tag_closed | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS | ||
| codecheck_precommit | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> |
[2026-07-29 15:59:25] CI执行结束


/lgtm
/approve


/lgtm
/approve


描述
ops-nn/norm 系列 arch35 算子代码重复率治理(cleancode)。在严格保持实现逻辑、计算顺序、内存分配顺序完全一致前提下,通过抽取公共实现/分支尾上提/模板统一消除重复,覆盖 4 个算子:
batch_norm_v3_regbase_common.h:TwoRowAddPartialMeanWithTail复用已有TwoRowAddPartialMean(移动定义、去前向声明)Compute统一为模板 helperInferComputeImpl<Self, T>,经self.VFNormalize(...)静态派发rms_norm_grad_regbase_dgamma.h抽取ComputePreDgamma(EnQue/DeQue/取址/VFCalcPreDgamma/Free),3 处复用add_rms_norm_regbase_common.h的LoadForHandleRemainV1三个 if-constexpr 分支公共尾上提add_rms_norm_dynamic_quant_regbase_common.h抽取 VF 单元ComputeYAndAbsMaxVF(归一化输出 + running abs-max),两处复用等价性说明
均为逐操作等价:函数体逐字节搬运,仅作用域/调用形式变化;if constexpr 下每个实例化指令流不变;寄存器声明位置变化不影响操作顺序与内存分配顺序。已用「去空白 md5 比对」确认无标识符级改动。
关联的Issue
测试
文档更新
无
类型标签
AI/Agent生成声明