文件最后提交记录最后更新时间
feat: 新增 MulNoNan/FusedMulAdd/FusedMulAddAdd 三个 element-wise 算子(Ascend 950) Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !3022 merge feat/mul-fused-ops into master feat: 新增 MulNoNan/FusedMulAdd/FusedMulAddAdd 三个 element-wise 算子(Ascend 950) Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 在 math/ 下新增三个面向 Ascend 950(dav-3510 / Atlas 350 加速卡)的 element-wise 算子,均为纯新增(42 个文件,+4198),不修改任何既有算子。 ### MulNoNan(二元安全乘法) - 功能:屏蔽 Mul0·inf=NaN0·NaN=NaN 两类异常为 0,仅判 x2 一侧(x2==0 输出 0,-0 同样进零臂);等价 TensorFlow tf.math.multiply_no_nans。 - dtype:FLOAT16 / FLOAT / INT32 / BFLOAT16;fp16/bf16 提升 fp32 中间精度做 Compare(NE)+Select,末端 CAST_MODE_RINT 回退。 ### FusedMulAdd(三元融合 y = x1*x2 + x3) - 功能:将 Mul→Add 子图融合为单次 kernel 启动,减少一次 GM 中间数据搬运。 - dtype:FLOAT16 / FLOAT / INT32;浮点通路在 fp32 中间精度下用 Vec::Mul + Vec::Add(刻意不使用 Vec::FusedMulAdd,因其底层 in-place 写回 src2 buffer,在 broadcast 大 tensor 跨 tile 复用输入 UB 时会污染下一 tile 输入导致精度错误)。 ### FusedMulAddAdd(四元融合 y = x1*x2 + x3 + x4) - 功能:将 Mul→Add→Add 子图融合为单次 kernel 启动,减少两次 GM 中间数据搬运,常用于 BatchMatmul + bias + residual 模式。 - dtype:FLOAT16 / FLOAT / INT32(不支持 bf16);浮点通路 fp32 中间精度 Vec::Mul + Vec::Add + Vec::Add,计算顺序 ((x1*x2)+x3)+x4 固定不可交换。 三者共性:仅 Ascend 950 实现,kernel 为 AIV_ONLY;InferShape 复用 Ops::Base::InferShape4Broadcast,Tiling 复用 Ops::Base::BroadcastBaseTiling;支持任意 NumPy 广播、动态 shape / 动态 rank;各输入与输出须为同一 dtype(不支持 mix-dtype)。 ## 关联的Issue - #1733 https://gitcode.com/cann/ops-math/issues/1733 ## 测试 - InferShape UT:tests/ut/op_host/test_*_infershape.cpp(每算子一份) - Tiling UT:tests/ut/op_host/arch35/test_*_tiling.cpp(每算子一份) - 图模式样例:examples/test_geir_*.cpp,覆盖 fp32/fp16/bf16/int32 基础用例;MulNoNan 另覆盖 0·inf0·NaN-0、广播等特殊值 - golden 对标:tests/assets/golden.py ## 文档更新 - 每个算子新增 README.md(功能说明、参数、约束、实现方案、调用样例) ## 类型标签 - [x] 新特性 See merge request: cann/ops-math!30223 天前
feat: 新增 MulNoNan/FusedMulAdd/FusedMulAddAdd 三个 element-wise 算子(Ascend 950) Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !3022 merge feat/mul-fused-ops into master feat: 新增 MulNoNan/FusedMulAdd/FusedMulAddAdd 三个 element-wise 算子(Ascend 950) Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 在 math/ 下新增三个面向 Ascend 950(dav-3510 / Atlas 350 加速卡)的 element-wise 算子,均为纯新增(42 个文件,+4198),不修改任何既有算子。 ### MulNoNan(二元安全乘法) - 功能:屏蔽 Mul0·inf=NaN0·NaN=NaN 两类异常为 0,仅判 x2 一侧(x2==0 输出 0,-0 同样进零臂);等价 TensorFlow tf.math.multiply_no_nans。 - dtype:FLOAT16 / FLOAT / INT32 / BFLOAT16;fp16/bf16 提升 fp32 中间精度做 Compare(NE)+Select,末端 CAST_MODE_RINT 回退。 ### FusedMulAdd(三元融合 y = x1*x2 + x3) - 功能:将 Mul→Add 子图融合为单次 kernel 启动,减少一次 GM 中间数据搬运。 - dtype:FLOAT16 / FLOAT / INT32;浮点通路在 fp32 中间精度下用 Vec::Mul + Vec::Add(刻意不使用 Vec::FusedMulAdd,因其底层 in-place 写回 src2 buffer,在 broadcast 大 tensor 跨 tile 复用输入 UB 时会污染下一 tile 输入导致精度错误)。 ### FusedMulAddAdd(四元融合 y = x1*x2 + x3 + x4) - 功能:将 Mul→Add→Add 子图融合为单次 kernel 启动,减少两次 GM 中间数据搬运,常用于 BatchMatmul + bias + residual 模式。 - dtype:FLOAT16 / FLOAT / INT32(不支持 bf16);浮点通路 fp32 中间精度 Vec::Mul + Vec::Add + Vec::Add,计算顺序 ((x1*x2)+x3)+x4 固定不可交换。 三者共性:仅 Ascend 950 实现,kernel 为 AIV_ONLY;InferShape 复用 Ops::Base::InferShape4Broadcast,Tiling 复用 Ops::Base::BroadcastBaseTiling;支持任意 NumPy 广播、动态 shape / 动态 rank;各输入与输出须为同一 dtype(不支持 mix-dtype)。 ## 关联的Issue - #1733 https://gitcode.com/cann/ops-math/issues/1733 ## 测试 - InferShape UT:tests/ut/op_host/test_*_infershape.cpp(每算子一份) - Tiling UT:tests/ut/op_host/arch35/test_*_tiling.cpp(每算子一份) - 图模式样例:examples/test_geir_*.cpp,覆盖 fp32/fp16/bf16/int32 基础用例;MulNoNan 另覆盖 0·inf0·NaN-0、广播等特殊值 - golden 对标:tests/assets/golden.py ## 文档更新 - 每个算子新增 README.md(功能说明、参数、约束、实现方案、调用样例) ## 类型标签 - [x] 新特性 See merge request: cann/ops-math!30223 天前
test: 丰富三个算子(fused_mul_add/fused_mul_add_add/mul_no_nan)的 broadcast 用例并完善 arch35 example Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !3043 merge fix/mul-no-nan-inf-compare into master test: 丰富三个算子(fused_mul_add/fused_mul_add_add/mul_no_nan)的 broadcast 用例并完善 arch35 example Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 完善 fused_mul_add、fused_mul_add_add、mul_no_nan 三个 element-wise 广播算子的 broadcast 测试覆盖与可维护性,主要改动如下: 1. infershape UT 丰富 broadcast 形状用例(三算子各自 tests/ut/op_host 下的 infershape UT): - fused_mul_add 新增 4 组、fused_mul_add_add 新增 5 组、mul_no_nan 新增 4 组; - 覆盖标量×2D、行×列互广播 {1,5}×{5,1}→{5,5}、3D 互广播 {2,1,4}×{1,3,4}→{2,3,4}、跨 rank、按轴广播 →[4,3,5]、尾列向量 {4,1}×{4,6}→{4,6} 等场景,含 fp32/fp16/int32 数据类型。 2. arch35 图模式 example 增补 broadcast 场景并修正 proto 头相对路径(三算子各自 examples/arch35 下的 test_geir 用例): - 将 proto 头的相对路径由 ../op_graph/<算子>_proto.h 修正为 ../../op_graph/<算子>_proto.h(多了一级 examples/arch35 目录); - 各 example 增加多组 broadcast 测试数据; - mul_no_nan example 修复 inf==inf / -inf==-inf 的结果比对逻辑(got == expected 直接判过,避免 inf-inf=NaN 误判)。 3. infershape 增加调试日志(三算子各自 op_host 下的 infershape 实现):引入 log/log.h,入口处增加 OP_LOGD;mul_no_nan 由直接绑定 Ops::Base::InferShape4Broadcast 改为包装函数 InferShape4MulNoNan 以承载日志。 4. README 维护(三算子各自 README.md):移除过时的『仅在 Ascend 950 架构上实现』限制说明;fused_mul_add / fused_mul_add_add 补充图模式『调用说明』表格。 说明:改动集中在三算子的 UT、arch35 example、infershape 入口与 README,未改动算子核心计算逻辑。 ## 关联的Issue - #1741 https://gitcode.com/cann/ops-math/issues/1741 ## 测试 - 三算子 infershape UT 新增 broadcast 形状用例(标量/行列互广播/3D/跨rank/按轴/列向量,fp32/fp16/int32),随 op_host UT 一并执行; - arch35 图模式 example 增补 broadcast 场景,验证修正头路径后可正确构图调用。 ## 文档更新 - 更新 math/fused_mul_add/README.md、math/fused_mul_add_add/README.md、math/mul_no_nan/README.md:移除过时架构限制说明,前两者补充图模式调用说明表格。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [x] 其他,请描述:丰富三算子 broadcast 形状 UT 用例、完善 arch35 example 与 infershape 日志 See merge request: cann/ops-math!30432 天前