| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(bitwise_not): 910b的bitwise_not实现 Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3078 merge feat/bitwise-not-pr into master feat(bitwise_not): 910b的bitwise_not实现 Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 新增按位取反算子 BitwiseNot 的原生 AscendC 实现,位于 experimental/math/bitwise_not,registry-invoke 方式自带 Kernel / Tiling / InferShape / 算子定义,对外两段式入口 aclnnBitwiseNot,目标芯片 Ascend910B。 改动原因:ops-math 此前仅有 BitwiseNot 的 aclnn 转发壳(分解为 Invert/LogicalNot),无原生单算子 kernel。本 PR 补齐原生实现。 采取的方法: - 整型 5 类经 ReinterpretCast<int16/uint16> 视图 + Not 完成按位取反(按 32B 块对齐换算等价元素数,INT64 = ×4,无需标量兜底);BOOL 走逻辑非链路(0↔1)。 - 单一 Tiling + 动态多核 + 大/小核均衡 + Double Buffer;主路径 DataCopy、非对齐尾块 DataCopyPad;空 tensor workspace=0 提前返回。 - 通过 op 定义自动生成 aclnnBitwiseNot 入口分派到原生 OpType BitwiseNot。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1763 ## 测试 - UT:op_host tiling + infershape 共 45 项通过;op_kernel UT 通过。 - C++ ST:真实 NPU(Ascend910B)L0+L1 全量 333 用例,bitwise exact 100% 通过。 - PyTorch ST:真实 NPU L0+L1 全量 333 用例,bitwise exact 100% 通过(golden 对标 torch.bitwise_not / numpy.invert)。 - ATK:pyaclnn(NPU)vs cpu(torch golden)精度对拍 84/84 bit-exact,100% 通过。 - 性能:访存受限算子,整型分支贴 HBM 带宽 roofline(设备侧中等规模较内建路径 1.1–1.46×,大规模持平)。 - dtype/边界覆盖:6 dtype × 标量/空 tensor/非对齐尾块/多维/大 shape 多核。 ### 设备侧公平对比(torch_npu.profiler 实测每个 device kernel 耗时,连续输入) > A = 此原生 AscendC 单 kernel;B = CANN 内建 aclnnBitwiseNot(torch.bitwise_not,用户现状基线)。同 shape / 同 dtype / 同输入 / 同 warmup / 同 repeat。 | dtype | numel | A dev/op (µs) | B dev/op (µs) | **A 相对 B 加速比** | |---|---|---|---|---| | int8 | 1e6 | 4.30 | 6.26 | **1.46x** | | int8 | 1e7 | 7.21 | 8.01 | **1.11x** | | int8 | 1e8 | 109.85 | 113.37 | 1.03x | | int16 | 1e6 | 4.87 | 6.00 | **1.23x** | | int16 | 1e7 | 10.13 | 11.81 | **1.17x** | | int16 | 1e8 | 324.57 | 325.25 | 1.00x | | int32 | 1e6 | 5.33 | 6.98 | **1.31x** | | int32 | 1e7 | 16.29 | 17.53 | **1.08x** | | int32 | 1e8 | 644.52 | 645.66 | 1.00x | | int64 | 1e6 | 6.55 | 7.83 | **1.20x** | | int64 | 1e7 | 49.10 | 63.10 | **1.29x** | | int64 | 1e8 | 1282.35| 1283.09| 1.00x | | uint8 | 1e6 | 4.28 | 6.00 | **1.40x** | | uint8 | 1e7 | 7.32 | 8.40 | **1.15x** | | uint8 | 1e8 | 111.20 | 110.37 | 0.99x | | bool | 1e6 | 5.29 | 6.19 | **1.17x** | | bool | 1e7 | 11.29 | 10.83 | 0.96x | | bool | 1e8 | 116.07 | 113.49 | 0.98x | ## 文档更新 新增算子 README.md、docs/aclnnBitwiseNot.md(接口说明)、examples/(aclnn 两段式 + GE 图模式调用示例)。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3078 | 4 个月前 | |
feat(bitwise_not): 910b的bitwise_not实现 Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !3078 merge feat/bitwise-not-pr into master feat(bitwise_not): 910b的bitwise_not实现 Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 新增按位取反算子 BitwiseNot 的原生 AscendC 实现,位于 experimental/math/bitwise_not,registry-invoke 方式自带 Kernel / Tiling / InferShape / 算子定义,对外两段式入口 aclnnBitwiseNot,目标芯片 Ascend910B。 改动原因:ops-math 此前仅有 BitwiseNot 的 aclnn 转发壳(分解为 Invert/LogicalNot),无原生单算子 kernel。本 PR 补齐原生实现。 采取的方法: - 整型 5 类经 ReinterpretCast<int16/uint16> 视图 + Not 完成按位取反(按 32B 块对齐换算等价元素数,INT64 = ×4,无需标量兜底);BOOL 走逻辑非链路(0↔1)。 - 单一 Tiling + 动态多核 + 大/小核均衡 + Double Buffer;主路径 DataCopy、非对齐尾块 DataCopyPad;空 tensor workspace=0 提前返回。 - 通过 op 定义自动生成 aclnnBitwiseNot 入口分派到原生 OpType BitwiseNot。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1763 ## 测试 - UT:op_host tiling + infershape 共 45 项通过;op_kernel UT 通过。 - C++ ST:真实 NPU(Ascend910B)L0+L1 全量 333 用例,bitwise exact 100% 通过。 - PyTorch ST:真实 NPU L0+L1 全量 333 用例,bitwise exact 100% 通过(golden 对标 torch.bitwise_not / numpy.invert)。 - ATK:pyaclnn(NPU)vs cpu(torch golden)精度对拍 84/84 bit-exact,100% 通过。 - 性能:访存受限算子,整型分支贴 HBM 带宽 roofline(设备侧中等规模较内建路径 1.1–1.46×,大规模持平)。 - dtype/边界覆盖:6 dtype × 标量/空 tensor/非对齐尾块/多维/大 shape 多核。 ### 设备侧公平对比(torch_npu.profiler 实测每个 device kernel 耗时,连续输入) > A = 此原生 AscendC 单 kernel;B = CANN 内建 aclnnBitwiseNot(torch.bitwise_not,用户现状基线)。同 shape / 同 dtype / 同输入 / 同 warmup / 同 repeat。 | dtype | numel | A dev/op (µs) | B dev/op (µs) | **A 相对 B 加速比** | |---|---|---|---|---| | int8 | 1e6 | 4.30 | 6.26 | **1.46x** | | int8 | 1e7 | 7.21 | 8.01 | **1.11x** | | int8 | 1e8 | 109.85 | 113.37 | 1.03x | | int16 | 1e6 | 4.87 | 6.00 | **1.23x** | | int16 | 1e7 | 10.13 | 11.81 | **1.17x** | | int16 | 1e8 | 324.57 | 325.25 | 1.00x | | int32 | 1e6 | 5.33 | 6.98 | **1.31x** | | int32 | 1e7 | 16.29 | 17.53 | **1.08x** | | int32 | 1e8 | 644.52 | 645.66 | 1.00x | | int64 | 1e6 | 6.55 | 7.83 | **1.20x** | | int64 | 1e7 | 49.10 | 63.10 | **1.29x** | | int64 | 1e8 | 1282.35| 1283.09| 1.00x | | uint8 | 1e6 | 4.28 | 6.00 | **1.40x** | | uint8 | 1e7 | 7.32 | 8.40 | **1.15x** | | uint8 | 1e8 | 111.20 | 110.37 | 0.99x | | bool | 1e6 | 5.29 | 6.19 | **1.17x** | | bool | 1e7 | 11.29 | 10.83 | 0.96x | | bool | 1e8 | 116.07 | 113.49 | 0.98x | ## 文档更新 新增算子 README.md、docs/aclnnBitwiseNot.md(接口说明)、examples/(aclnn 两段式 + GE 图模式调用示例)。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3078 | 4 个月前 |