| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Co-authored-by: xiu_ling_wang<wangxiuling2@h-partners.com> # message auto-generated for no-merge-commit merge: !4324 merge feat/add_mat_mat_elements_experimental into master feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Created-by: 2402_87740845 Commit-by: xiu_ling_wang Merged-by: cann-robot Description: > 本 PR 取代已关闭的 #4322。按评审要求调整为**新增独立算子** add_mat_mat_elements_plus(置于 experimental/math/add_mat_mat_elements_plus/),既有 scalar 版 add_mat_mat_elements **零改动**,两实现并行暂存。 ## 描述 新增 add_mat_mat_elements_plus 算子(计算公式 cOut = c * beta + alpha * a * b),支持 A2/A3(ascend910b/ascend910_93)与 A5(ascend950)多架构,补全 ACLNN eager 直调接口、调用文档与精度/性能测试。三套架构共用同一 op_api(ACLNN)层,架构差异只在 kernel 二进制与 tiling。 > **与原 add_mat_mat_elements 的关系**:本版 ACLNN 的 beta/alpha 用 aclTensor*(1-element 张量,device 侧动态标量、图模式可用),原版的用 aclScalar*(host 侧数值)。两套 API 设计不同,故以独立算子名并行暂存,互不影响。 ### 改动方法 **多架构 Tiling / Kernel(arch32 与 arch35 解耦)** - op_host/arch32/:arch32 独立 tiling,增大 tileLength 充分利用 A2 的 192KB UB(TILE_LENGTH 512/1024 → 4096) - op_kernel/arch32/ + op_kernel/add_mat_mat_elements_plus_arch32.cpp:A2/A3 独立 kernel(namespace NsAddMatMatElementsPlusArch32) - A5(ascend950)用 op_host/arch35/ + op_kernel/add_mat_mat_elements_plus.cpp,互不影响 | 架构 | op_host(tiling) | op_kernel | 入口 | |---|---|---|---| | A2/A3 (910b/910_93) | arch32/ | arch32/(独立) | add_mat_mat_elements_plus_arch32.cpp | | A5 (950) | arch35/ | arch35/ | add_mat_mat_elements_plus.cpp | **ACLNN eager 接口(三架构共用,架构无关)** - op_api/aclnn_add_mat_mat_elements_plus.{h,cpp}:aclnnAddMatMatElementsPlus(GetWorkspaceSize) 两段式接口 - op_api/add_mat_mat_elements_plus.cpp:L0 op(ADD_TO_LAUNCHER_LIST_AICORE),运行时按 op 名 + tiling key 派发到对应架构 kernel - ACLNN CheckShape 校验 beta/alpha 为 1-element 标量 tensor;AllocTensor/aclrtMalloc 返回值检查齐备 **构建** CMakeLists.txt 用 ACLNNTYPE aclnn_exclude + DISABLE_IN_OPP TRUE(与仓内 addcmul/add/abs 等手写 aclnn 算子一致),抑制 autogen 与手写 op_api/aclnn_*.cpp 的重复函数体。 ## 关联的Issue <!-- 暂无 --> ## 测试 - **op_host UT**:10 用例(5 infershape + 5 arch32 tiling)通过 - **op_kernel UT**:4 用例(2 arch35 + 2 arch32,CPU 模拟器)通过 - **打包编译(ascend910b / ascend950)**:fp32/fp16/bf16 三 dtype kernel .o 成功生成;libcust_opapi.so 导出 aclnnAddMatMatElementsPlus / aclnnAddMatMatElementsPlusGetWorkspaceSize 符号;与既有 add_mat_mat_elements(scalar 版)同包共存无符号冲突 - **ACLNN eager 精度**(examples/test_aclnn_add_mat_mat_elements_plus.cpp):泛化 24 shape(含边界 [1]/[2]/[3]/[7] 与多维度 [2,3,4]/[8,8,8,8] 等)× 3 dtype × 3 组 (beta,alpha) 标量组合 (0.5,1.5)/(0.0,1.0)/(2.0,-1.0) = **216 例**,对标 ops-precision-standard(MERE < thr, MARE < 10×thr;fp32 2⁻¹³、fp16 2⁻¹⁰、bf16 2⁻⁷)。golden 用「输入量化为目标 dtype 后按 double 精度计算」以隔离算子计算误差。 | dtype | 用例数 | MERE 通过 | MARE 通过 | 最大绝对误差 maxAbs | |---|---|---|---|---| | fp32 | 72 | 72/72 | 63/72 | 6.55e-7 | | fp16 | 72 | 72/72 | 64/72 | 3.91e-3 | | bf16 | 72 | 72/72 | 72/72 | 1.56e-2 | 合计:**MERE 216/216 通过;MARE 199/216 通过**。MARE 失败 17 例均发生在 golden≈0 元素(相消情形 (|golden|+1e-7) 分母放大相对误差)。**maxAbs 才是真误差**:fp32 ~5 ULP、fp16 ~4 ULP、bf16 ~2 ULP,均在 dtype 正常舍入级,非算子 bug。 - **ACLNN eager 性能**(多 size × 3 dtype × 100 iter,device 常驻):对标 torch_npu eager 的 c*beta + alpha*(a*b) 三算子拆解。16M kernel 主导公平点加速比 fp32 **2.2×**、fp16 **1.3×**、bf16 **1.9×**,均 ≥ 0.6× 达标;小 size 2–6× 为 host 开销主导,非纯 kernel 对比。 - **ATK ST(系统测试,双标杆)**(tests/st/aclnnAddMatMatElementsPlus/):ATK ST 工程(atk_aclnnAddMatMatElementsPlus.json 用例 + execute_aclnnAddMatMatElementsPlus.py cpu golden 执行器),pyaclnn 真跑 NPU + cpu torch golden 双标杆精度比对。10 shape × 3 dtype = 30 泛化用例。 - 结果(Ascend910B3):**30/30 通过,acc_pass_result: Pass**。 - 跑法:atk node --backend pyaclnn --devices 0 -o . node --backend cpu task -c atk_aclnnAddMatMatElementsPlus.json --task accuracy -p . -s 0 -e 30 -cp ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4324 | 2 个月前 | |
feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Co-authored-by: xiu_ling_wang<wangxiuling2@h-partners.com> # message auto-generated for no-merge-commit merge: !4324 merge feat/add_mat_mat_elements_experimental into master feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Created-by: 2402_87740845 Commit-by: xiu_ling_wang Merged-by: cann-robot Description: > 本 PR 取代已关闭的 #4322。按评审要求调整为**新增独立算子** add_mat_mat_elements_plus(置于 experimental/math/add_mat_mat_elements_plus/),既有 scalar 版 add_mat_mat_elements **零改动**,两实现并行暂存。 ## 描述 新增 add_mat_mat_elements_plus 算子(计算公式 cOut = c * beta + alpha * a * b),支持 A2/A3(ascend910b/ascend910_93)与 A5(ascend950)多架构,补全 ACLNN eager 直调接口、调用文档与精度/性能测试。三套架构共用同一 op_api(ACLNN)层,架构差异只在 kernel 二进制与 tiling。 > **与原 add_mat_mat_elements 的关系**:本版 ACLNN 的 beta/alpha 用 aclTensor*(1-element 张量,device 侧动态标量、图模式可用),原版的用 aclScalar*(host 侧数值)。两套 API 设计不同,故以独立算子名并行暂存,互不影响。 ### 改动方法 **多架构 Tiling / Kernel(arch32 与 arch35 解耦)** - op_host/arch32/:arch32 独立 tiling,增大 tileLength 充分利用 A2 的 192KB UB(TILE_LENGTH 512/1024 → 4096) - op_kernel/arch32/ + op_kernel/add_mat_mat_elements_plus_arch32.cpp:A2/A3 独立 kernel(namespace NsAddMatMatElementsPlusArch32) - A5(ascend950)用 op_host/arch35/ + op_kernel/add_mat_mat_elements_plus.cpp,互不影响 | 架构 | op_host(tiling) | op_kernel | 入口 | |---|---|---|---| | A2/A3 (910b/910_93) | arch32/ | arch32/(独立) | add_mat_mat_elements_plus_arch32.cpp | | A5 (950) | arch35/ | arch35/ | add_mat_mat_elements_plus.cpp | **ACLNN eager 接口(三架构共用,架构无关)** - op_api/aclnn_add_mat_mat_elements_plus.{h,cpp}:aclnnAddMatMatElementsPlus(GetWorkspaceSize) 两段式接口 - op_api/add_mat_mat_elements_plus.cpp:L0 op(ADD_TO_LAUNCHER_LIST_AICORE),运行时按 op 名 + tiling key 派发到对应架构 kernel - ACLNN CheckShape 校验 beta/alpha 为 1-element 标量 tensor;AllocTensor/aclrtMalloc 返回值检查齐备 **构建** CMakeLists.txt 用 ACLNNTYPE aclnn_exclude + DISABLE_IN_OPP TRUE(与仓内 addcmul/add/abs 等手写 aclnn 算子一致),抑制 autogen 与手写 op_api/aclnn_*.cpp 的重复函数体。 ## 关联的Issue <!-- 暂无 --> ## 测试 - **op_host UT**:10 用例(5 infershape + 5 arch32 tiling)通过 - **op_kernel UT**:4 用例(2 arch35 + 2 arch32,CPU 模拟器)通过 - **打包编译(ascend910b / ascend950)**:fp32/fp16/bf16 三 dtype kernel .o 成功生成;libcust_opapi.so 导出 aclnnAddMatMatElementsPlus / aclnnAddMatMatElementsPlusGetWorkspaceSize 符号;与既有 add_mat_mat_elements(scalar 版)同包共存无符号冲突 - **ACLNN eager 精度**(examples/test_aclnn_add_mat_mat_elements_plus.cpp):泛化 24 shape(含边界 [1]/[2]/[3]/[7] 与多维度 [2,3,4]/[8,8,8,8] 等)× 3 dtype × 3 组 (beta,alpha) 标量组合 (0.5,1.5)/(0.0,1.0)/(2.0,-1.0) = **216 例**,对标 ops-precision-standard(MERE < thr, MARE < 10×thr;fp32 2⁻¹³、fp16 2⁻¹⁰、bf16 2⁻⁷)。golden 用「输入量化为目标 dtype 后按 double 精度计算」以隔离算子计算误差。 | dtype | 用例数 | MERE 通过 | MARE 通过 | 最大绝对误差 maxAbs | |---|---|---|---|---| | fp32 | 72 | 72/72 | 63/72 | 6.55e-7 | | fp16 | 72 | 72/72 | 64/72 | 3.91e-3 | | bf16 | 72 | 72/72 | 72/72 | 1.56e-2 | 合计:**MERE 216/216 通过;MARE 199/216 通过**。MARE 失败 17 例均发生在 golden≈0 元素(相消情形 (|golden|+1e-7) 分母放大相对误差)。**maxAbs 才是真误差**:fp32 ~5 ULP、fp16 ~4 ULP、bf16 ~2 ULP,均在 dtype 正常舍入级,非算子 bug。 - **ACLNN eager 性能**(多 size × 3 dtype × 100 iter,device 常驻):对标 torch_npu eager 的 c*beta + alpha*(a*b) 三算子拆解。16M kernel 主导公平点加速比 fp32 **2.2×**、fp16 **1.3×**、bf16 **1.9×**,均 ≥ 0.6× 达标;小 size 2–6× 为 host 开销主导,非纯 kernel 对比。 - **ATK ST(系统测试,双标杆)**(tests/st/aclnnAddMatMatElementsPlus/):ATK ST 工程(atk_aclnnAddMatMatElementsPlus.json 用例 + execute_aclnnAddMatMatElementsPlus.py cpu golden 执行器),pyaclnn 真跑 NPU + cpu torch golden 双标杆精度比对。10 shape × 3 dtype = 30 泛化用例。 - 结果(Ascend910B3):**30/30 通过,acc_pass_result: Pass**。 - 跑法:atk node --backend pyaclnn --devices 0 -o . node --backend cpu task -c atk_aclnnAddMatMatElementsPlus.json --task accuracy -p . -s 0 -e 30 -cp ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4324 | 2 个月前 | |
feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Co-authored-by: xiu_ling_wang<wangxiuling2@h-partners.com> # message auto-generated for no-merge-commit merge: !4324 merge feat/add_mat_mat_elements_experimental into master feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Created-by: 2402_87740845 Commit-by: xiu_ling_wang Merged-by: cann-robot Description: > 本 PR 取代已关闭的 #4322。按评审要求调整为**新增独立算子** add_mat_mat_elements_plus(置于 experimental/math/add_mat_mat_elements_plus/),既有 scalar 版 add_mat_mat_elements **零改动**,两实现并行暂存。 ## 描述 新增 add_mat_mat_elements_plus 算子(计算公式 cOut = c * beta + alpha * a * b),支持 A2/A3(ascend910b/ascend910_93)与 A5(ascend950)多架构,补全 ACLNN eager 直调接口、调用文档与精度/性能测试。三套架构共用同一 op_api(ACLNN)层,架构差异只在 kernel 二进制与 tiling。 > **与原 add_mat_mat_elements 的关系**:本版 ACLNN 的 beta/alpha 用 aclTensor*(1-element 张量,device 侧动态标量、图模式可用),原版的用 aclScalar*(host 侧数值)。两套 API 设计不同,故以独立算子名并行暂存,互不影响。 ### 改动方法 **多架构 Tiling / Kernel(arch32 与 arch35 解耦)** - op_host/arch32/:arch32 独立 tiling,增大 tileLength 充分利用 A2 的 192KB UB(TILE_LENGTH 512/1024 → 4096) - op_kernel/arch32/ + op_kernel/add_mat_mat_elements_plus_arch32.cpp:A2/A3 独立 kernel(namespace NsAddMatMatElementsPlusArch32) - A5(ascend950)用 op_host/arch35/ + op_kernel/add_mat_mat_elements_plus.cpp,互不影响 | 架构 | op_host(tiling) | op_kernel | 入口 | |---|---|---|---| | A2/A3 (910b/910_93) | arch32/ | arch32/(独立) | add_mat_mat_elements_plus_arch32.cpp | | A5 (950) | arch35/ | arch35/ | add_mat_mat_elements_plus.cpp | **ACLNN eager 接口(三架构共用,架构无关)** - op_api/aclnn_add_mat_mat_elements_plus.{h,cpp}:aclnnAddMatMatElementsPlus(GetWorkspaceSize) 两段式接口 - op_api/add_mat_mat_elements_plus.cpp:L0 op(ADD_TO_LAUNCHER_LIST_AICORE),运行时按 op 名 + tiling key 派发到对应架构 kernel - ACLNN CheckShape 校验 beta/alpha 为 1-element 标量 tensor;AllocTensor/aclrtMalloc 返回值检查齐备 **构建** CMakeLists.txt 用 ACLNNTYPE aclnn_exclude + DISABLE_IN_OPP TRUE(与仓内 addcmul/add/abs 等手写 aclnn 算子一致),抑制 autogen 与手写 op_api/aclnn_*.cpp 的重复函数体。 ## 关联的Issue <!-- 暂无 --> ## 测试 - **op_host UT**:10 用例(5 infershape + 5 arch32 tiling)通过 - **op_kernel UT**:4 用例(2 arch35 + 2 arch32,CPU 模拟器)通过 - **打包编译(ascend910b / ascend950)**:fp32/fp16/bf16 三 dtype kernel .o 成功生成;libcust_opapi.so 导出 aclnnAddMatMatElementsPlus / aclnnAddMatMatElementsPlusGetWorkspaceSize 符号;与既有 add_mat_mat_elements(scalar 版)同包共存无符号冲突 - **ACLNN eager 精度**(examples/test_aclnn_add_mat_mat_elements_plus.cpp):泛化 24 shape(含边界 [1]/[2]/[3]/[7] 与多维度 [2,3,4]/[8,8,8,8] 等)× 3 dtype × 3 组 (beta,alpha) 标量组合 (0.5,1.5)/(0.0,1.0)/(2.0,-1.0) = **216 例**,对标 ops-precision-standard(MERE < thr, MARE < 10×thr;fp32 2⁻¹³、fp16 2⁻¹⁰、bf16 2⁻⁷)。golden 用「输入量化为目标 dtype 后按 double 精度计算」以隔离算子计算误差。 | dtype | 用例数 | MERE 通过 | MARE 通过 | 最大绝对误差 maxAbs | |---|---|---|---|---| | fp32 | 72 | 72/72 | 63/72 | 6.55e-7 | | fp16 | 72 | 72/72 | 64/72 | 3.91e-3 | | bf16 | 72 | 72/72 | 72/72 | 1.56e-2 | 合计:**MERE 216/216 通过;MARE 199/216 通过**。MARE 失败 17 例均发生在 golden≈0 元素(相消情形 (|golden|+1e-7) 分母放大相对误差)。**maxAbs 才是真误差**:fp32 ~5 ULP、fp16 ~4 ULP、bf16 ~2 ULP,均在 dtype 正常舍入级,非算子 bug。 - **ACLNN eager 性能**(多 size × 3 dtype × 100 iter,device 常驻):对标 torch_npu eager 的 c*beta + alpha*(a*b) 三算子拆解。16M kernel 主导公平点加速比 fp32 **2.2×**、fp16 **1.3×**、bf16 **1.9×**,均 ≥ 0.6× 达标;小 size 2–6× 为 host 开销主导,非纯 kernel 对比。 - **ATK ST(系统测试,双标杆)**(tests/st/aclnnAddMatMatElementsPlus/):ATK ST 工程(atk_aclnnAddMatMatElementsPlus.json 用例 + execute_aclnnAddMatMatElementsPlus.py cpu golden 执行器),pyaclnn 真跑 NPU + cpu torch golden 双标杆精度比对。10 shape × 3 dtype = 30 泛化用例。 - 结果(Ascend910B3):**30/30 通过,acc_pass_result: Pass**。 - 跑法:atk node --backend pyaclnn --devices 0 -o . node --backend cpu task -c atk_aclnnAddMatMatElementsPlus.json --task accuracy -p . -s 0 -e 30 -cp ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4324 | 2 个月前 | |
feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Co-authored-by: xiu_ling_wang<wangxiuling2@h-partners.com> # message auto-generated for no-merge-commit merge: !4324 merge feat/add_mat_mat_elements_experimental into master feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Created-by: 2402_87740845 Commit-by: xiu_ling_wang Merged-by: cann-robot Description: > 本 PR 取代已关闭的 #4322。按评审要求调整为**新增独立算子** add_mat_mat_elements_plus(置于 experimental/math/add_mat_mat_elements_plus/),既有 scalar 版 add_mat_mat_elements **零改动**,两实现并行暂存。 ## 描述 新增 add_mat_mat_elements_plus 算子(计算公式 cOut = c * beta + alpha * a * b),支持 A2/A3(ascend910b/ascend910_93)与 A5(ascend950)多架构,补全 ACLNN eager 直调接口、调用文档与精度/性能测试。三套架构共用同一 op_api(ACLNN)层,架构差异只在 kernel 二进制与 tiling。 > **与原 add_mat_mat_elements 的关系**:本版 ACLNN 的 beta/alpha 用 aclTensor*(1-element 张量,device 侧动态标量、图模式可用),原版的用 aclScalar*(host 侧数值)。两套 API 设计不同,故以独立算子名并行暂存,互不影响。 ### 改动方法 **多架构 Tiling / Kernel(arch32 与 arch35 解耦)** - op_host/arch32/:arch32 独立 tiling,增大 tileLength 充分利用 A2 的 192KB UB(TILE_LENGTH 512/1024 → 4096) - op_kernel/arch32/ + op_kernel/add_mat_mat_elements_plus_arch32.cpp:A2/A3 独立 kernel(namespace NsAddMatMatElementsPlusArch32) - A5(ascend950)用 op_host/arch35/ + op_kernel/add_mat_mat_elements_plus.cpp,互不影响 | 架构 | op_host(tiling) | op_kernel | 入口 | |---|---|---|---| | A2/A3 (910b/910_93) | arch32/ | arch32/(独立) | add_mat_mat_elements_plus_arch32.cpp | | A5 (950) | arch35/ | arch35/ | add_mat_mat_elements_plus.cpp | **ACLNN eager 接口(三架构共用,架构无关)** - op_api/aclnn_add_mat_mat_elements_plus.{h,cpp}:aclnnAddMatMatElementsPlus(GetWorkspaceSize) 两段式接口 - op_api/add_mat_mat_elements_plus.cpp:L0 op(ADD_TO_LAUNCHER_LIST_AICORE),运行时按 op 名 + tiling key 派发到对应架构 kernel - ACLNN CheckShape 校验 beta/alpha 为 1-element 标量 tensor;AllocTensor/aclrtMalloc 返回值检查齐备 **构建** CMakeLists.txt 用 ACLNNTYPE aclnn_exclude + DISABLE_IN_OPP TRUE(与仓内 addcmul/add/abs 等手写 aclnn 算子一致),抑制 autogen 与手写 op_api/aclnn_*.cpp 的重复函数体。 ## 关联的Issue <!-- 暂无 --> ## 测试 - **op_host UT**:10 用例(5 infershape + 5 arch32 tiling)通过 - **op_kernel UT**:4 用例(2 arch35 + 2 arch32,CPU 模拟器)通过 - **打包编译(ascend910b / ascend950)**:fp32/fp16/bf16 三 dtype kernel .o 成功生成;libcust_opapi.so 导出 aclnnAddMatMatElementsPlus / aclnnAddMatMatElementsPlusGetWorkspaceSize 符号;与既有 add_mat_mat_elements(scalar 版)同包共存无符号冲突 - **ACLNN eager 精度**(examples/test_aclnn_add_mat_mat_elements_plus.cpp):泛化 24 shape(含边界 [1]/[2]/[3]/[7] 与多维度 [2,3,4]/[8,8,8,8] 等)× 3 dtype × 3 组 (beta,alpha) 标量组合 (0.5,1.5)/(0.0,1.0)/(2.0,-1.0) = **216 例**,对标 ops-precision-standard(MERE < thr, MARE < 10×thr;fp32 2⁻¹³、fp16 2⁻¹⁰、bf16 2⁻⁷)。golden 用「输入量化为目标 dtype 后按 double 精度计算」以隔离算子计算误差。 | dtype | 用例数 | MERE 通过 | MARE 通过 | 最大绝对误差 maxAbs | |---|---|---|---|---| | fp32 | 72 | 72/72 | 63/72 | 6.55e-7 | | fp16 | 72 | 72/72 | 64/72 | 3.91e-3 | | bf16 | 72 | 72/72 | 72/72 | 1.56e-2 | 合计:**MERE 216/216 通过;MARE 199/216 通过**。MARE 失败 17 例均发生在 golden≈0 元素(相消情形 (|golden|+1e-7) 分母放大相对误差)。**maxAbs 才是真误差**:fp32 ~5 ULP、fp16 ~4 ULP、bf16 ~2 ULP,均在 dtype 正常舍入级,非算子 bug。 - **ACLNN eager 性能**(多 size × 3 dtype × 100 iter,device 常驻):对标 torch_npu eager 的 c*beta + alpha*(a*b) 三算子拆解。16M kernel 主导公平点加速比 fp32 **2.2×**、fp16 **1.3×**、bf16 **1.9×**,均 ≥ 0.6× 达标;小 size 2–6× 为 host 开销主导,非纯 kernel 对比。 - **ATK ST(系统测试,双标杆)**(tests/st/aclnnAddMatMatElementsPlus/):ATK ST 工程(atk_aclnnAddMatMatElementsPlus.json 用例 + execute_aclnnAddMatMatElementsPlus.py cpu golden 执行器),pyaclnn 真跑 NPU + cpu torch golden 双标杆精度比对。10 shape × 3 dtype = 30 泛化用例。 - 结果(Ascend910B3):**30/30 通过,acc_pass_result: Pass**。 - 跑法:atk node --backend pyaclnn --devices 0 -o . node --backend cpu task -c atk_aclnnAddMatMatElementsPlus.json --task accuracy -p . -s 0 -e 30 -cp ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4324 | 2 个月前 | |
feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Co-authored-by: xiu_ling_wang<wangxiuling2@h-partners.com> # message auto-generated for no-merge-commit merge: !4324 merge feat/add_mat_mat_elements_experimental into master feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Created-by: 2402_87740845 Commit-by: xiu_ling_wang Merged-by: cann-robot Description: > 本 PR 取代已关闭的 #4322。按评审要求调整为**新增独立算子** add_mat_mat_elements_plus(置于 experimental/math/add_mat_mat_elements_plus/),既有 scalar 版 add_mat_mat_elements **零改动**,两实现并行暂存。 ## 描述 新增 add_mat_mat_elements_plus 算子(计算公式 cOut = c * beta + alpha * a * b),支持 A2/A3(ascend910b/ascend910_93)与 A5(ascend950)多架构,补全 ACLNN eager 直调接口、调用文档与精度/性能测试。三套架构共用同一 op_api(ACLNN)层,架构差异只在 kernel 二进制与 tiling。 > **与原 add_mat_mat_elements 的关系**:本版 ACLNN 的 beta/alpha 用 aclTensor*(1-element 张量,device 侧动态标量、图模式可用),原版的用 aclScalar*(host 侧数值)。两套 API 设计不同,故以独立算子名并行暂存,互不影响。 ### 改动方法 **多架构 Tiling / Kernel(arch32 与 arch35 解耦)** - op_host/arch32/:arch32 独立 tiling,增大 tileLength 充分利用 A2 的 192KB UB(TILE_LENGTH 512/1024 → 4096) - op_kernel/arch32/ + op_kernel/add_mat_mat_elements_plus_arch32.cpp:A2/A3 独立 kernel(namespace NsAddMatMatElementsPlusArch32) - A5(ascend950)用 op_host/arch35/ + op_kernel/add_mat_mat_elements_plus.cpp,互不影响 | 架构 | op_host(tiling) | op_kernel | 入口 | |---|---|---|---| | A2/A3 (910b/910_93) | arch32/ | arch32/(独立) | add_mat_mat_elements_plus_arch32.cpp | | A5 (950) | arch35/ | arch35/ | add_mat_mat_elements_plus.cpp | **ACLNN eager 接口(三架构共用,架构无关)** - op_api/aclnn_add_mat_mat_elements_plus.{h,cpp}:aclnnAddMatMatElementsPlus(GetWorkspaceSize) 两段式接口 - op_api/add_mat_mat_elements_plus.cpp:L0 op(ADD_TO_LAUNCHER_LIST_AICORE),运行时按 op 名 + tiling key 派发到对应架构 kernel - ACLNN CheckShape 校验 beta/alpha 为 1-element 标量 tensor;AllocTensor/aclrtMalloc 返回值检查齐备 **构建** CMakeLists.txt 用 ACLNNTYPE aclnn_exclude + DISABLE_IN_OPP TRUE(与仓内 addcmul/add/abs 等手写 aclnn 算子一致),抑制 autogen 与手写 op_api/aclnn_*.cpp 的重复函数体。 ## 关联的Issue <!-- 暂无 --> ## 测试 - **op_host UT**:10 用例(5 infershape + 5 arch32 tiling)通过 - **op_kernel UT**:4 用例(2 arch35 + 2 arch32,CPU 模拟器)通过 - **打包编译(ascend910b / ascend950)**:fp32/fp16/bf16 三 dtype kernel .o 成功生成;libcust_opapi.so 导出 aclnnAddMatMatElementsPlus / aclnnAddMatMatElementsPlusGetWorkspaceSize 符号;与既有 add_mat_mat_elements(scalar 版)同包共存无符号冲突 - **ACLNN eager 精度**(examples/test_aclnn_add_mat_mat_elements_plus.cpp):泛化 24 shape(含边界 [1]/[2]/[3]/[7] 与多维度 [2,3,4]/[8,8,8,8] 等)× 3 dtype × 3 组 (beta,alpha) 标量组合 (0.5,1.5)/(0.0,1.0)/(2.0,-1.0) = **216 例**,对标 ops-precision-standard(MERE < thr, MARE < 10×thr;fp32 2⁻¹³、fp16 2⁻¹⁰、bf16 2⁻⁷)。golden 用「输入量化为目标 dtype 后按 double 精度计算」以隔离算子计算误差。 | dtype | 用例数 | MERE 通过 | MARE 通过 | 最大绝对误差 maxAbs | |---|---|---|---|---| | fp32 | 72 | 72/72 | 63/72 | 6.55e-7 | | fp16 | 72 | 72/72 | 64/72 | 3.91e-3 | | bf16 | 72 | 72/72 | 72/72 | 1.56e-2 | 合计:**MERE 216/216 通过;MARE 199/216 通过**。MARE 失败 17 例均发生在 golden≈0 元素(相消情形 (|golden|+1e-7) 分母放大相对误差)。**maxAbs 才是真误差**:fp32 ~5 ULP、fp16 ~4 ULP、bf16 ~2 ULP,均在 dtype 正常舍入级,非算子 bug。 - **ACLNN eager 性能**(多 size × 3 dtype × 100 iter,device 常驻):对标 torch_npu eager 的 c*beta + alpha*(a*b) 三算子拆解。16M kernel 主导公平点加速比 fp32 **2.2×**、fp16 **1.3×**、bf16 **1.9×**,均 ≥ 0.6× 达标;小 size 2–6× 为 host 开销主导,非纯 kernel 对比。 - **ATK ST(系统测试,双标杆)**(tests/st/aclnnAddMatMatElementsPlus/):ATK ST 工程(atk_aclnnAddMatMatElementsPlus.json 用例 + execute_aclnnAddMatMatElementsPlus.py cpu golden 执行器),pyaclnn 真跑 NPU + cpu torch golden 双标杆精度比对。10 shape × 3 dtype = 30 泛化用例。 - 结果(Ascend910B3):**30/30 通过,acc_pass_result: Pass**。 - 跑法:atk node --backend pyaclnn --devices 0 -o . node --backend cpu task -c atk_aclnnAddMatMatElementsPlus.json --task accuracy -p . -s 0 -e 30 -cp ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4324 | 2 个月前 | |
feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Co-authored-by: xiu_ling_wang<wangxiuling2@h-partners.com> # message auto-generated for no-merge-commit merge: !4324 merge feat/add_mat_mat_elements_experimental into master feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Created-by: 2402_87740845 Commit-by: xiu_ling_wang Merged-by: cann-robot Description: > 本 PR 取代已关闭的 #4322。按评审要求调整为**新增独立算子** add_mat_mat_elements_plus(置于 experimental/math/add_mat_mat_elements_plus/),既有 scalar 版 add_mat_mat_elements **零改动**,两实现并行暂存。 ## 描述 新增 add_mat_mat_elements_plus 算子(计算公式 cOut = c * beta + alpha * a * b),支持 A2/A3(ascend910b/ascend910_93)与 A5(ascend950)多架构,补全 ACLNN eager 直调接口、调用文档与精度/性能测试。三套架构共用同一 op_api(ACLNN)层,架构差异只在 kernel 二进制与 tiling。 > **与原 add_mat_mat_elements 的关系**:本版 ACLNN 的 beta/alpha 用 aclTensor*(1-element 张量,device 侧动态标量、图模式可用),原版的用 aclScalar*(host 侧数值)。两套 API 设计不同,故以独立算子名并行暂存,互不影响。 ### 改动方法 **多架构 Tiling / Kernel(arch32 与 arch35 解耦)** - op_host/arch32/:arch32 独立 tiling,增大 tileLength 充分利用 A2 的 192KB UB(TILE_LENGTH 512/1024 → 4096) - op_kernel/arch32/ + op_kernel/add_mat_mat_elements_plus_arch32.cpp:A2/A3 独立 kernel(namespace NsAddMatMatElementsPlusArch32) - A5(ascend950)用 op_host/arch35/ + op_kernel/add_mat_mat_elements_plus.cpp,互不影响 | 架构 | op_host(tiling) | op_kernel | 入口 | |---|---|---|---| | A2/A3 (910b/910_93) | arch32/ | arch32/(独立) | add_mat_mat_elements_plus_arch32.cpp | | A5 (950) | arch35/ | arch35/ | add_mat_mat_elements_plus.cpp | **ACLNN eager 接口(三架构共用,架构无关)** - op_api/aclnn_add_mat_mat_elements_plus.{h,cpp}:aclnnAddMatMatElementsPlus(GetWorkspaceSize) 两段式接口 - op_api/add_mat_mat_elements_plus.cpp:L0 op(ADD_TO_LAUNCHER_LIST_AICORE),运行时按 op 名 + tiling key 派发到对应架构 kernel - ACLNN CheckShape 校验 beta/alpha 为 1-element 标量 tensor;AllocTensor/aclrtMalloc 返回值检查齐备 **构建** CMakeLists.txt 用 ACLNNTYPE aclnn_exclude + DISABLE_IN_OPP TRUE(与仓内 addcmul/add/abs 等手写 aclnn 算子一致),抑制 autogen 与手写 op_api/aclnn_*.cpp 的重复函数体。 ## 关联的Issue <!-- 暂无 --> ## 测试 - **op_host UT**:10 用例(5 infershape + 5 arch32 tiling)通过 - **op_kernel UT**:4 用例(2 arch35 + 2 arch32,CPU 模拟器)通过 - **打包编译(ascend910b / ascend950)**:fp32/fp16/bf16 三 dtype kernel .o 成功生成;libcust_opapi.so 导出 aclnnAddMatMatElementsPlus / aclnnAddMatMatElementsPlusGetWorkspaceSize 符号;与既有 add_mat_mat_elements(scalar 版)同包共存无符号冲突 - **ACLNN eager 精度**(examples/test_aclnn_add_mat_mat_elements_plus.cpp):泛化 24 shape(含边界 [1]/[2]/[3]/[7] 与多维度 [2,3,4]/[8,8,8,8] 等)× 3 dtype × 3 组 (beta,alpha) 标量组合 (0.5,1.5)/(0.0,1.0)/(2.0,-1.0) = **216 例**,对标 ops-precision-standard(MERE < thr, MARE < 10×thr;fp32 2⁻¹³、fp16 2⁻¹⁰、bf16 2⁻⁷)。golden 用「输入量化为目标 dtype 后按 double 精度计算」以隔离算子计算误差。 | dtype | 用例数 | MERE 通过 | MARE 通过 | 最大绝对误差 maxAbs | |---|---|---|---|---| | fp32 | 72 | 72/72 | 63/72 | 6.55e-7 | | fp16 | 72 | 72/72 | 64/72 | 3.91e-3 | | bf16 | 72 | 72/72 | 72/72 | 1.56e-2 | 合计:**MERE 216/216 通过;MARE 199/216 通过**。MARE 失败 17 例均发生在 golden≈0 元素(相消情形 (|golden|+1e-7) 分母放大相对误差)。**maxAbs 才是真误差**:fp32 ~5 ULP、fp16 ~4 ULP、bf16 ~2 ULP,均在 dtype 正常舍入级,非算子 bug。 - **ACLNN eager 性能**(多 size × 3 dtype × 100 iter,device 常驻):对标 torch_npu eager 的 c*beta + alpha*(a*b) 三算子拆解。16M kernel 主导公平点加速比 fp32 **2.2×**、fp16 **1.3×**、bf16 **1.9×**,均 ≥ 0.6× 达标;小 size 2–6× 为 host 开销主导,非纯 kernel 对比。 - **ATK ST(系统测试,双标杆)**(tests/st/aclnnAddMatMatElementsPlus/):ATK ST 工程(atk_aclnnAddMatMatElementsPlus.json 用例 + execute_aclnnAddMatMatElementsPlus.py cpu golden 执行器),pyaclnn 真跑 NPU + cpu torch golden 双标杆精度比对。10 shape × 3 dtype = 30 泛化用例。 - 结果(Ascend910B3):**30/30 通过,acc_pass_result: Pass**。 - 跑法:atk node --backend pyaclnn --devices 0 -o . node --backend cpu task -c atk_aclnnAddMatMatElementsPlus.json --task accuracy -p . -s 0 -e 30 -cp ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4324 | 2 个月前 | |
feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Co-authored-by: xiu_ling_wang<wangxiuling2@h-partners.com> # message auto-generated for no-merge-commit merge: !4324 merge feat/add_mat_mat_elements_experimental into master feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Created-by: 2402_87740845 Commit-by: xiu_ling_wang Merged-by: cann-robot Description: > 本 PR 取代已关闭的 #4322。按评审要求调整为**新增独立算子** add_mat_mat_elements_plus(置于 experimental/math/add_mat_mat_elements_plus/),既有 scalar 版 add_mat_mat_elements **零改动**,两实现并行暂存。 ## 描述 新增 add_mat_mat_elements_plus 算子(计算公式 cOut = c * beta + alpha * a * b),支持 A2/A3(ascend910b/ascend910_93)与 A5(ascend950)多架构,补全 ACLNN eager 直调接口、调用文档与精度/性能测试。三套架构共用同一 op_api(ACLNN)层,架构差异只在 kernel 二进制与 tiling。 > **与原 add_mat_mat_elements 的关系**:本版 ACLNN 的 beta/alpha 用 aclTensor*(1-element 张量,device 侧动态标量、图模式可用),原版的用 aclScalar*(host 侧数值)。两套 API 设计不同,故以独立算子名并行暂存,互不影响。 ### 改动方法 **多架构 Tiling / Kernel(arch32 与 arch35 解耦)** - op_host/arch32/:arch32 独立 tiling,增大 tileLength 充分利用 A2 的 192KB UB(TILE_LENGTH 512/1024 → 4096) - op_kernel/arch32/ + op_kernel/add_mat_mat_elements_plus_arch32.cpp:A2/A3 独立 kernel(namespace NsAddMatMatElementsPlusArch32) - A5(ascend950)用 op_host/arch35/ + op_kernel/add_mat_mat_elements_plus.cpp,互不影响 | 架构 | op_host(tiling) | op_kernel | 入口 | |---|---|---|---| | A2/A3 (910b/910_93) | arch32/ | arch32/(独立) | add_mat_mat_elements_plus_arch32.cpp | | A5 (950) | arch35/ | arch35/ | add_mat_mat_elements_plus.cpp | **ACLNN eager 接口(三架构共用,架构无关)** - op_api/aclnn_add_mat_mat_elements_plus.{h,cpp}:aclnnAddMatMatElementsPlus(GetWorkspaceSize) 两段式接口 - op_api/add_mat_mat_elements_plus.cpp:L0 op(ADD_TO_LAUNCHER_LIST_AICORE),运行时按 op 名 + tiling key 派发到对应架构 kernel - ACLNN CheckShape 校验 beta/alpha 为 1-element 标量 tensor;AllocTensor/aclrtMalloc 返回值检查齐备 **构建** CMakeLists.txt 用 ACLNNTYPE aclnn_exclude + DISABLE_IN_OPP TRUE(与仓内 addcmul/add/abs 等手写 aclnn 算子一致),抑制 autogen 与手写 op_api/aclnn_*.cpp 的重复函数体。 ## 关联的Issue <!-- 暂无 --> ## 测试 - **op_host UT**:10 用例(5 infershape + 5 arch32 tiling)通过 - **op_kernel UT**:4 用例(2 arch35 + 2 arch32,CPU 模拟器)通过 - **打包编译(ascend910b / ascend950)**:fp32/fp16/bf16 三 dtype kernel .o 成功生成;libcust_opapi.so 导出 aclnnAddMatMatElementsPlus / aclnnAddMatMatElementsPlusGetWorkspaceSize 符号;与既有 add_mat_mat_elements(scalar 版)同包共存无符号冲突 - **ACLNN eager 精度**(examples/test_aclnn_add_mat_mat_elements_plus.cpp):泛化 24 shape(含边界 [1]/[2]/[3]/[7] 与多维度 [2,3,4]/[8,8,8,8] 等)× 3 dtype × 3 组 (beta,alpha) 标量组合 (0.5,1.5)/(0.0,1.0)/(2.0,-1.0) = **216 例**,对标 ops-precision-standard(MERE < thr, MARE < 10×thr;fp32 2⁻¹³、fp16 2⁻¹⁰、bf16 2⁻⁷)。golden 用「输入量化为目标 dtype 后按 double 精度计算」以隔离算子计算误差。 | dtype | 用例数 | MERE 通过 | MARE 通过 | 最大绝对误差 maxAbs | |---|---|---|---|---| | fp32 | 72 | 72/72 | 63/72 | 6.55e-7 | | fp16 | 72 | 72/72 | 64/72 | 3.91e-3 | | bf16 | 72 | 72/72 | 72/72 | 1.56e-2 | 合计:**MERE 216/216 通过;MARE 199/216 通过**。MARE 失败 17 例均发生在 golden≈0 元素(相消情形 (|golden|+1e-7) 分母放大相对误差)。**maxAbs 才是真误差**:fp32 ~5 ULP、fp16 ~4 ULP、bf16 ~2 ULP,均在 dtype 正常舍入级,非算子 bug。 - **ACLNN eager 性能**(多 size × 3 dtype × 100 iter,device 常驻):对标 torch_npu eager 的 c*beta + alpha*(a*b) 三算子拆解。16M kernel 主导公平点加速比 fp32 **2.2×**、fp16 **1.3×**、bf16 **1.9×**,均 ≥ 0.6× 达标;小 size 2–6× 为 host 开销主导,非纯 kernel 对比。 - **ATK ST(系统测试,双标杆)**(tests/st/aclnnAddMatMatElementsPlus/):ATK ST 工程(atk_aclnnAddMatMatElementsPlus.json 用例 + execute_aclnnAddMatMatElementsPlus.py cpu golden 执行器),pyaclnn 真跑 NPU + cpu torch golden 双标杆精度比对。10 shape × 3 dtype = 30 泛化用例。 - 结果(Ascend910B3):**30/30 通过,acc_pass_result: Pass**。 - 跑法:atk node --backend pyaclnn --devices 0 -o . node --backend cpu task -c atk_aclnnAddMatMatElementsPlus.json --task accuracy -p . -s 0 -e 30 -cp ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4324 | 2 个月前 | |
feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Co-authored-by: xiu_ling_wang<wangxiuling2@h-partners.com> # message auto-generated for no-merge-commit merge: !4324 merge feat/add_mat_mat_elements_experimental into master feat: 新增 add_mat_mat_elements_plus 算子(A2/A3/A5 多架构 + ACLNN eager 接口与测试) Created-by: 2402_87740845 Commit-by: xiu_ling_wang Merged-by: cann-robot Description: > 本 PR 取代已关闭的 #4322。按评审要求调整为**新增独立算子** add_mat_mat_elements_plus(置于 experimental/math/add_mat_mat_elements_plus/),既有 scalar 版 add_mat_mat_elements **零改动**,两实现并行暂存。 ## 描述 新增 add_mat_mat_elements_plus 算子(计算公式 cOut = c * beta + alpha * a * b),支持 A2/A3(ascend910b/ascend910_93)与 A5(ascend950)多架构,补全 ACLNN eager 直调接口、调用文档与精度/性能测试。三套架构共用同一 op_api(ACLNN)层,架构差异只在 kernel 二进制与 tiling。 > **与原 add_mat_mat_elements 的关系**:本版 ACLNN 的 beta/alpha 用 aclTensor*(1-element 张量,device 侧动态标量、图模式可用),原版的用 aclScalar*(host 侧数值)。两套 API 设计不同,故以独立算子名并行暂存,互不影响。 ### 改动方法 **多架构 Tiling / Kernel(arch32 与 arch35 解耦)** - op_host/arch32/:arch32 独立 tiling,增大 tileLength 充分利用 A2 的 192KB UB(TILE_LENGTH 512/1024 → 4096) - op_kernel/arch32/ + op_kernel/add_mat_mat_elements_plus_arch32.cpp:A2/A3 独立 kernel(namespace NsAddMatMatElementsPlusArch32) - A5(ascend950)用 op_host/arch35/ + op_kernel/add_mat_mat_elements_plus.cpp,互不影响 | 架构 | op_host(tiling) | op_kernel | 入口 | |---|---|---|---| | A2/A3 (910b/910_93) | arch32/ | arch32/(独立) | add_mat_mat_elements_plus_arch32.cpp | | A5 (950) | arch35/ | arch35/ | add_mat_mat_elements_plus.cpp | **ACLNN eager 接口(三架构共用,架构无关)** - op_api/aclnn_add_mat_mat_elements_plus.{h,cpp}:aclnnAddMatMatElementsPlus(GetWorkspaceSize) 两段式接口 - op_api/add_mat_mat_elements_plus.cpp:L0 op(ADD_TO_LAUNCHER_LIST_AICORE),运行时按 op 名 + tiling key 派发到对应架构 kernel - ACLNN CheckShape 校验 beta/alpha 为 1-element 标量 tensor;AllocTensor/aclrtMalloc 返回值检查齐备 **构建** CMakeLists.txt 用 ACLNNTYPE aclnn_exclude + DISABLE_IN_OPP TRUE(与仓内 addcmul/add/abs 等手写 aclnn 算子一致),抑制 autogen 与手写 op_api/aclnn_*.cpp 的重复函数体。 ## 关联的Issue <!-- 暂无 --> ## 测试 - **op_host UT**:10 用例(5 infershape + 5 arch32 tiling)通过 - **op_kernel UT**:4 用例(2 arch35 + 2 arch32,CPU 模拟器)通过 - **打包编译(ascend910b / ascend950)**:fp32/fp16/bf16 三 dtype kernel .o 成功生成;libcust_opapi.so 导出 aclnnAddMatMatElementsPlus / aclnnAddMatMatElementsPlusGetWorkspaceSize 符号;与既有 add_mat_mat_elements(scalar 版)同包共存无符号冲突 - **ACLNN eager 精度**(examples/test_aclnn_add_mat_mat_elements_plus.cpp):泛化 24 shape(含边界 [1]/[2]/[3]/[7] 与多维度 [2,3,4]/[8,8,8,8] 等)× 3 dtype × 3 组 (beta,alpha) 标量组合 (0.5,1.5)/(0.0,1.0)/(2.0,-1.0) = **216 例**,对标 ops-precision-standard(MERE < thr, MARE < 10×thr;fp32 2⁻¹³、fp16 2⁻¹⁰、bf16 2⁻⁷)。golden 用「输入量化为目标 dtype 后按 double 精度计算」以隔离算子计算误差。 | dtype | 用例数 | MERE 通过 | MARE 通过 | 最大绝对误差 maxAbs | |---|---|---|---|---| | fp32 | 72 | 72/72 | 63/72 | 6.55e-7 | | fp16 | 72 | 72/72 | 64/72 | 3.91e-3 | | bf16 | 72 | 72/72 | 72/72 | 1.56e-2 | 合计:**MERE 216/216 通过;MARE 199/216 通过**。MARE 失败 17 例均发生在 golden≈0 元素(相消情形 (|golden|+1e-7) 分母放大相对误差)。**maxAbs 才是真误差**:fp32 ~5 ULP、fp16 ~4 ULP、bf16 ~2 ULP,均在 dtype 正常舍入级,非算子 bug。 - **ACLNN eager 性能**(多 size × 3 dtype × 100 iter,device 常驻):对标 torch_npu eager 的 c*beta + alpha*(a*b) 三算子拆解。16M kernel 主导公平点加速比 fp32 **2.2×**、fp16 **1.3×**、bf16 **1.9×**,均 ≥ 0.6× 达标;小 size 2–6× 为 host 开销主导,非纯 kernel 对比。 - **ATK ST(系统测试,双标杆)**(tests/st/aclnnAddMatMatElementsPlus/):ATK ST 工程(atk_aclnnAddMatMatElementsPlus.json 用例 + execute_aclnnAddMatMatElementsPlus.py cpu golden 执行器),pyaclnn 真跑 NPU + cpu torch golden 双标杆精度比对。10 shape × 3 dtype = 30 泛化用例。 - 结果(Ascend910B3):**30/30 通过,acc_pass_result: Pass**。 - 跑法:atk node --backend pyaclnn --devices 0 -o . node --backend cpu task -c atk_aclnnAddMatMatElementsPlus.json --task accuracy -p . -s 0 -e 30 -cp ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4324 | 2 个月前 |
AddMatMatElementsPlus
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
算子功能:对输入张量
a、b进行逐元素相乘后,与输入张量c按标量alpha、beta进行加权求和,结果写入输出张量cOut。 -
计算公式:
cOuti=ci×β+α×ai×bicOut_i = c_i \times \beta + \alpha \times a_i \times b_i cOuti=ci×β+α×ai×bi
其中
a、b、c支持PyTorch addcmul / numpy风格的广播,cOut的shape等于broadcast(a, b, c)的统一shape,alpha、beta为float标量。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| c | 输入 | 公式中的输入张量c,按beta缩放后参与累加。 | FLOAT16、FLOAT、BFLOAT16 | ND |
| a | 输入 | 公式中的输入张量a,参与逐元素相乘。 | 同c(shape支持与b/c广播) | ND |
| b | 输入 | 公式中的输入张量b,与a进行逐元素相乘。 | 同c(shape支持与a/c广播) | ND |
| beta | 输入(1-element标量tensor) | 标量缩放系数,对c进行缩放。 | 同c | ND |
| alpha | 输入(1-element标量tensor) | 标量缩放系数,对a × b的乘积进行缩放。 | 同c | ND |
| cOut | 输出 | 公式中的输出张量cOut,shape必须等于broadcast(a, b, c)。 | 同c | ND |
约束说明
a、b、c、cOut四个张量必须具有完全一致的dtype。a、b、c支持PyTorch addcmul / numpy风格的广播(尾部对齐、size=1维度扩展)。cOut的shape必须等于broadcast(a, b, c)的统一shape,否则参数非法。- 张量最大维度为8。
- 仅支持ND格式,不支持私有格式。
alpha、beta不可为空指针。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| 图模式 | test_geir_add_mat_mat_elements_plus.cpp | 通过图模式方式调用AddMatMatElementsPlus算子。 |