已关闭
[Requirement|需求建议]: 910b的bitwise_not实现 #1763
zhaohujie创建于  6月2日关闭于  6月23日
zhaohujie
zhaohujie
6月2日 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

一、背景信息 (必填)

CANN 算子库 ops-math 当前缺少按位取反算子 BitwiseNot 的原生 AscendC 实现:外层 math/bitwise_not 仅为 aclnn-only 转发壳(无 _def.cpp、无 kernel),在 aclnn 层把 BitwiseNot 分解为 l0op::Invert(整型)/ l0op::LogicalNot(BOOL)+ Contiguous/ViewCopy。
本在 experimental/math/bitwise_not 贡献一个自带 Kernel/Tiling 的单算子原生实现,OpType BitwiseNot,对外两段式入口 aclnnBitwiseNot,目标芯片 Ascend910B。

二、价值/作用 (必填)

对标 torch.bitwise_not / ~,为 Ascend910B 提供按位取反的原生单算子,覆盖整型与布尔两类语义。
相比现有 aclnn 分解路径,单 kernel 实现减少非必要的中间搬运;
实测在访存受限大 shape 下贴 HBM 带宽 roofline,设备侧中等规模较内建路径有 1.1–1.46× 提升、大规模持平。
应用场景:掩码/位标志运算、整型按位逻辑、布尔取反等基础数值计算。

三、设计方案 (必填)

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)

Aclnn 直调:两段式 aclnnBitwiseNotGetWorkspaceSize + aclnnBitwiseNot(由算子定义自动生成入口)。
图模式(GE):REG_OP(BitwiseNot) proto,单输入 x → 单输出 y。
PyTorch 接入:通过单算子执行路径调用原生 kernel(ST 已提供 torch 适配)。

3.2 总体设计
3.2.1 算子支持的数据类型

INT8 / INT16 / INT32 / INT64 / UINT8 / BOOL(输入输出同 dtype)。

3.2.2 host侧设计
  • InferShape:out.shape = self.shape;InferDataType:out.dtype = self.dtype(无类型提升、无 broadcast)。
  • Tiling:单一 tiling 策略,GetCoreNum() 动态多核 + 大/小核负载均衡 + 核内分块循环 + Double Buffer;UB 运行时获取。空 tensor 提前返回(workspace=0)。32B 块对齐切分,仅 GM 序末核最后一个 tile 走非对齐尾块路径,避免越界/漏写。
  • 通过 isBool 标志区分 BOOL 与 INT8(二者承载类型同为 int8_t)。
3.2.3 kernel侧设计
  • 整型:按位取反与重解释宽度无关,统一 ReinterpretCast<int16_t/uint16_t> 视图 + Not(A2 上 Not 仅支持 int16/uint16);等价 int16 元素数 INT16=n、INT8/UINT8=⌈n/2⌉、INT32=n×2、INT64=n×4,并按 32B 块上对齐。
  • BOOL:逻辑非(0↔1,非裸位翻转),Cast(bool→half)→Abs→Mins(1)→Adds(-1)→Abs→Cast(half→bool)。
    主路径 DataCopy(对齐高吞吐)+ 非对齐尾块 DataCopyPad(按原 dtype 元素数写回)。
3.3 支持硬件

Atlas A2 训练/推理系列(Ascend910B,DAV_2201 / arch32)。

3.4 算子约束限制

  • 仅 Tensor 版(不支持 Scalar / Inplace);单输入单输出,out.shape == self.shape,不支持 broadcast。
  • dtype 限基础 6 类(INT8/INT16/INT32/INT64/UINT8/BOOL);UINT16/UINT32/UINT64 暂不支持。
  • 当前实现 GM 偏移/长度使用 uint32,单 tensor 元素总字节数须 ≤ 4 GB(UINT32_MAX),超大 tensor 暂不支持。

💡 备注:
精度为 bitwise exact(atol=0 / rtol=0)。

likedislike
zhaohujie
zhaohujie
6月2日 评论:

/assign @zhaohujie

likedislike
CANN-robotCANN-robot成员
6月2日 将 zhaohujie 设为负责人
zhaohujiezhaohujie
6月2日 修改标题为 “[Requirement|需求建议]: 910b的bitwise_not实现”,原标题为“[Requirement|需求建议]: 910b的 bitwise_not 实现”
zhaohujiezhaohujie
6月2日 关联了pull request:feat(bitwise_not): 910b的bitwise_not实现
CANN-robotCANN-robot成员
6月23日 关闭了 issue
CANN-robotCANN-robot成员
6月23日 添加了label:resolved