Closed
[Requirement|需求建议]: 新增 reduce_std_with_mean_v2 算子 #2908
GavinAdd on Aug 27Closed at Sep 19
Aug 27 Added label: requirement
Aug 27 Assign gavinhhr as responsible person
Aug 27 Associated pull request
songkai111
Sep 19 Comments:
Sep 19 Comments:
你好,由于该issue较长时间未贡献,我们将做issue关闭处理,如有需求请重新打开。


Sep 19 changed custom state from 进行中 to 已拒绝
Sep 19 Close issue
12 days ago Added label: resolved
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
一、背景信息 (必填)
现有 reduce_std_with_mean(Two-Pass 方案)在 L2 层需先调用 l0op::ReduceMean 预计算均值,再经 Expand/BroadcastTo 广播后送入 ReduceStdWithMean kernel 计算方差——全程 2~3 次 kernel 启动,mean 张量需完整写/读/广播,引入大量额外 GM 流量;且在小数据量场景 kernel 启动开销占比高。本次新增算子 reduce_std_with_mean_v2 在 kernel 内用**分块 Welford(Chan 并行合并)**算法单遍扫描输入,同时产出均值和标准差/标准差倒数,消除中间 kernel 链与 mean 张量搬运。
二、价值/作用 (必填)
三、设计方案 (必填)
3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)
aclnnStdMeanCorrectionV2(对应torch.std_mean)、aclnnBatchNormStatsV2(对应 BatchNorm 统计量)l0op::ReduceStdWithMeanV2(含 two-stage 的ReduceStdWithMeanV2Partial/ReduceStdWithMeanV2Merge)3.2 总体设计
核心:分块 Welford——数据按行(非归约维)分块,块内两遍计算 tileMean 与 tileM2(Σ(x-tileMean)²),块间用 Chan 合并公式归并,数学上对任意分块精确。
按输入形态在 tiling 阶段选择三条执行路径:
3.2.1 算子支持的数据类型
3.2.2 host侧设计
Partial(blockDim=K,各核归约 R 的一段,输出 partial 张量 [M,K,3])→Merge(blockDim=min(M,核数),Chan 合并 → std/mean)3.2.3 kernel侧设计
BlockReduceSum(vcgadd 多段归约)一次算 M_tile 行的 tileSum/tileM2,Chan 合并向量化(count 标量化)CAST_RINT(RNE 与 torch 对齐);UB 偏移 32B 对齐(上板硬要求)3.3 支持硬件
3.4 算子约束限制
correction ≥ N时按 PyTorch 语义输出 NaN/INF(由 host 侧处理)💡 备注(选填)