| optimize the performance of aicpu add operator
Co-authored-by: ZhaiPeiChao<zhaipeichao@huawei.com>
# message auto-generated for no-merge-commit merge:
!2462 merge add into master
optimize the performance of aicpu add operator
Created-by: ZhaiPeiChao
Commit-by: ZhaiPeiChao
Merged-by: cann-robot
Description: ## 描述
<!--在这里详细描述你的改动,包括改动的原因和所采取的方法。-->
AICPU add算子性能优化
fast path 负责 ≥99% 真实工作负载(深度学习里 Add 几乎都是 same-shape 或 scalar-bcast),通用 Eigen 路径只兜底多维非平凡 broadcast。
```
Compute
├─ NormalMathCheck + dtype permission check
├─ 显式 raw-rank ≤ 8 校验 (保持与原实现等价的失败语义)
├─ Bcast::GenerateBcastInfo
├─ 显式 output-shape 一致性校验
├─ [fast] 同形 shape → AddSameShape
├─ [fast] scalar bcast → AddScalarBcast
└─ [fallback] AddGenericBcast → 原 Eigen TensorMap broadcast 路径
```
Fast path 关键点:
- **裸指针 + __restrict__ + 定长循环** → 编译器自动 NEON/AVX 向量化 (对应 V / E)。
- **按 output bytes 阈值动态选择串行 / ParallelFor** (对应 T / O10):
- kParallelBytesThresh = 192 KiB:基于 10 μs ParallelFor 固定调度开销 + ~8 GB/s 单核 add 带宽反推 ~160 KiB,取 20% 余量。
- kBytesPerShard = 256 KiB:初版用 32 KiB 在 16 MiB 负载上产生 0.67× 回退(shard 数过多导致线程间抢带宽),调到 256 KiB 后恢复至 1.02×。
- **__builtin_expect(rc != OK, 0)** 标注冷分支,保持 C++17 合规(不使用 C++20 [[likely]])。
- **全部 reinterpret_cast → PtrToPtr<void,T>** 。
## 关联的Issue
<!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。-->
<!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。-->
issue [#1522](https://gitcode.com/cann/ops-math/issues/1522)
## 测试
<!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。-->
基于4线程进行测试:
| 形状 | dtype | case | old (μs) | new (μs) | **speedup** |
|---|---|---|---:|---:|---:|
| SameShape | fp32 | 4 KiB | 0.41 | 0.50 | 0.82× |
| SameShape | fp32 | 96 KiB | 2.48 | 2.52 | 0.99× |
| SameShape | fp32 | 1 MiB | 48.99 | 18.42 | **2.66×** |
| SameShape | fp32 | 16 MiB | 766 | 752 | 1.02× |
| ScalarBcast | fp32 | 4 KiB | 0.43 | 0.39 | 1.10× |
| ScalarBcast | fp32 | 96 KiB | 3.02 | 1.87 | **1.62×** |
| ScalarBcast | fp32 | 1 MiB | 31.7 | 8.07 | **3.93×** |
| ScalarBcast | fp32 | 16 MiB | 557 | 520 | 1.07× |
| SameShape | i64 | 2 MiB | 80 | 37 | **2.16×** |
| ScalarBcast | i64 | 8 KiB | 0.38 | 0.14 | **2.77×** |
| ScalarBcast | i64 | 192 KiB | 5.99 | 2.04 | **2.94×** |
| ScalarBcast | i64 | 2 MiB | 509 | 187 | **2.73×** |
## 文档更新
<!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。-->
不涉及
## 类型标签
<!-- [x] 表示选中 -->
- [ ] Bug修复
- [ ] 新特性
- [x] 性能优化
- [ ] 文档更新
- [ ] 其他,请描述:
See merge request: cann/ops-math!2462 | 10 天前 |