| docs: 统一三个 math 算子文档格式并补充 example 空张量用例与 shape 校验 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !3050 merge master into master docs: 统一三个 math 算子文档格式并补充 example 空张量用例与 shape 校验 Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 对 math 下 fused_mul_add、fused_mul_add_add、mul_no_nan 三个算子的文档与 example 测试做规范化与增强,不涉及 kernel 计算逻辑变更。 主要改动: 1. README 文档规范化(三个算子统一) - 功能说明:精简描述,去除加粗噪声,统一行文。 - 参数说明:由 Markdown 表格统一改为标准 HTML <table> 格式(固定列宽、“输入/输出/属性”表头、dtype 用“同x1”表述)。 - 约束说明:整理措辞并补充语义说明。 2. example 测试增强(三个 test_geir_*.cpp) - 新增输出 shape 校验:依据 outShape 计算期望 numel,与实际输出 numel 比对,不一致打印 "SHAPE MISMATCH" 并计入失败。 - 新增空 tensor(numel==0)用例:fp32_empty、fp32_empty_bc。 3. fused_mul_add_add 约束澄清 - proto.h 接口注释 + README 约束说明明确:x1 必须为完整输出 shape,x2/x3/x4 向上广播到 x1;当前 runtime 不支持 x1 自身向上广播(如 x1=[1]、x3=[3,4]),该类用例在 RunGraph 阶段失败。 - example 移除依赖“x1 向上广播”的 4 个用例(fp32_bc_scalar / fp32_bc_rowcol / fp32_bc_3d / fp16_bc_mixed),它们暴露的是 runtime 限制。 ## 关联的Issue - #1752 ## 测试 - example 覆盖 fp32/fp16/int32/bf16 基础用例、广播用例、关键特殊值(0·inf、0·NaN、-0);本 PR 新增空 tensor 用例与输出 shape 校验。 ## 文档更新 - 更新 fused_mul_add/README.md、fused_mul_add_add/README.md、mul_no_nan/README.md。 - 更新 fused_mul_add_add/op_graph/fused_mul_add_add_proto.h 接口注释。 ## 类型标签 - [x] 文档更新 - [x] 其他:增强 example 测试覆盖(空 tensor 用例 + 输出 shape 校验) See merge request: cann/ops-math!3050 | 2 个月前 |
| docs: 统一三个 math 算子文档格式并补充 example 空张量用例与 shape 校验 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !3050 merge master into master docs: 统一三个 math 算子文档格式并补充 example 空张量用例与 shape 校验 Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 对 math 下 fused_mul_add、fused_mul_add_add、mul_no_nan 三个算子的文档与 example 测试做规范化与增强,不涉及 kernel 计算逻辑变更。 主要改动: 1. README 文档规范化(三个算子统一) - 功能说明:精简描述,去除加粗噪声,统一行文。 - 参数说明:由 Markdown 表格统一改为标准 HTML <table> 格式(固定列宽、“输入/输出/属性”表头、dtype 用“同x1”表述)。 - 约束说明:整理措辞并补充语义说明。 2. example 测试增强(三个 test_geir_*.cpp) - 新增输出 shape 校验:依据 outShape 计算期望 numel,与实际输出 numel 比对,不一致打印 "SHAPE MISMATCH" 并计入失败。 - 新增空 tensor(numel==0)用例:fp32_empty、fp32_empty_bc。 3. fused_mul_add_add 约束澄清 - proto.h 接口注释 + README 约束说明明确:x1 必须为完整输出 shape,x2/x3/x4 向上广播到 x1;当前 runtime 不支持 x1 自身向上广播(如 x1=[1]、x3=[3,4]),该类用例在 RunGraph 阶段失败。 - example 移除依赖“x1 向上广播”的 4 个用例(fp32_bc_scalar / fp32_bc_rowcol / fp32_bc_3d / fp16_bc_mixed),它们暴露的是 runtime 限制。 ## 关联的Issue - #1752 ## 测试 - example 覆盖 fp32/fp16/int32/bf16 基础用例、广播用例、关键特殊值(0·inf、0·NaN、-0);本 PR 新增空 tensor 用例与输出 shape 校验。 ## 文档更新 - 更新 fused_mul_add/README.md、fused_mul_add_add/README.md、mul_no_nan/README.md。 - 更新 fused_mul_add_add/op_graph/fused_mul_add_add_proto.h 接口注释。 ## 类型标签 - [x] 文档更新 - [x] 其他:增强 example 测试覆盖(空 tensor 用例 + 输出 shape 校验) See merge request: cann/ops-math!3050 | 2 个月前 |
| C++ Clean Code规范修改 Co-authored-by: baijinxiang<baijinxiang@huawei.com> # message auto-generated for no-merge-commit merge: !3596 merge feature/bjx_9.1.0 into 9.1.0 C++ Clean Code规范修改 Created-by: doufloat Commit-by: baijinxiang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> G.FMT.17-CPP 合理安排空行 G.CNS.02-CPP 不要使用难以理解的字面常量 G.CNS.03-CPP 对于不会修改成员变量的成员函数应使用const修饰 G.EXP.15-CPP 避免使用reinterpret_cast ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2057 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3596 | 1 个月前 |
| 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(二元安全乘法) - 功能:屏蔽 Mul 中 0·inf=NaN、0·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·inf、0·NaN、-0、广播等特殊值 - golden 对标:tests/assets/golden.py ## 文档更新 - 每个算子新增 README.md(功能说明、参数、约束、实现方案、调用样例) ## 类型标签 - [x] 新特性 See merge request: cann/ops-math!3022 | 2 个月前 |
| 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!3043 | 2 个月前 |
| 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(二元安全乘法) - 功能:屏蔽 Mul 中 0·inf=NaN、0·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·inf、0·NaN、-0、广播等特殊值 - golden 对标:tests/assets/golden.py ## 文档更新 - 每个算子新增 README.md(功能说明、参数、约束、实现方案、调用样例) ## 类型标签 - [x] 新特性 See merge request: cann/ops-math!3022 | 2 个月前 |
| docs: fix code block language markers to pseudocode in READMEs Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !3678 merge 9.1.0 into 9.1.0 docs: fix code block language markers to pseudocode in READMEs Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 将 3 个 README 文件中数据流图的代码块语言标记从无标记修正为 pseudocode,使代码块的语义更准确。 涉及文件: - math/fused_mul_add/README.md(2 处) - math/fused_mul_add_add/README.md(2 处) - math/mul_no_nan/README.md(2 处) ## 关联的Issue - #2106 ## 测试 文档变更,无需测试。 ## 文档更新 - 更新了 math/fused_mul_add/README.md - 更新了 math/fused_mul_add_add/README.md - 更新了 math/mul_no_nan/README.md ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3678 | 1 个月前 |