Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
ReduceStdV2Update 的 Arch35 kernel 存在两类确定性精度错误:
AscendC::Reg::UpdateMask(remaining) 会通过引用自动更新 remaining。当前 kernel 在调用 UpdateMask 后又手工递减一次,导致剩余元素数被重复扣减。
当处理元素数超过单轮 FP32 mask 容量 64 时,后续数据可能被直接跳过。例如输入包含 128 个元素时,后半部分数据没有参与计算,造成方差和标准差结果错误。
UB 中 tail-A 的 padding 按输入 dtype 的 32B 对齐生成,但 Phase1OutputToWorkspace 按 FP32 计算 cache 源步长。
对于 FP16/BF16,实际对齐宽度应为 16 个元素,错误实现按 8 个元素计算,导致 workspace 搬运读取 padding 区域,部分输出错误变为 0。
问题用例中可观察到输出索引 2、3、6、7 异常为 0。
该问题属于 kernel 实现的确定性精度错误,会影响:
• 昇腾硬件型号:Ascend950DT_9582 • CANN版本:CANN 9.2.0 • 操作系统:Ubuntu 20.04.6 LTS,x86_64 • Python版本:Python 3.11.9 • ops-test-kit版本:e559b7f1f550 • 算子:ReduceStdV2Update,Arch35 Ascend C kernel
场景一:多轮 mask 问题
场景二:FP16/BF16 group tail-A 问题
运行以下用例:
wb_reduce_std_v2_update_0165
wb_reduce_std_v2_update_0201
与 CPU Golden 比较时,可观察到部分输出错误变为 0。
💡 备注(选填)
/assign
Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
一、问题描述 (必填)
ReduceStdV2Update 的 Arch35 kernel 存在两类确定性精度错误:
AscendC::Reg::UpdateMask(remaining) 会通过引用自动更新 remaining。当前 kernel 在调用 UpdateMask 后又手工递减一次,导致剩余元素数被重复扣减。
当处理元素数超过单轮 FP32 mask 容量 64 时,后续数据可能被直接跳过。例如输入包含 128 个元素时,后半部分数据没有参与计算,造成方差和标准差结果错误。
UB 中 tail-A 的 padding 按输入 dtype 的 32B 对齐生成,但 Phase1OutputToWorkspace 按 FP32 计算 cache 源步长。
对于 FP16/BF16,实际对齐宽度应为 16 个元素,错误实现按 8 个元素计算,导致 workspace 搬运读取 padding 区域,部分输出错误变为 0。
问题用例中可观察到输出索引 2、3、6、7 异常为 0。
该问题属于 kernel 实现的确定性精度错误,会影响:
二、环境信息 (可选)
• 昇腾硬件型号:Ascend950DT_9582
• CANN版本:CANN 9.2.0
• 操作系统:Ubuntu 20.04.6 LTS,x86_64
• Python版本:Python 3.11.9
• ops-test-kit版本:e559b7f1f550
• 算子:ReduceStdV2Update,Arch35 Ascend C kernel
三、重现步骤 (可选)
场景一:多轮 mask 问题
场景二:FP16/BF16 group tail-A 问题
运行以下用例:
wb_reduce_std_v2_update_0165
wb_reduce_std_v2_update_0201
与 CPU Golden 比较时,可观察到部分输出错误变为 0。
四、预期结果 (可选)
💡 备注(选填)