已关闭
[Requirement|需求建议]: 【社区任务】Ascend C实现Neg算子贡献 #375
skywang2创建于 2025年12月30日关闭于 3月30日
2025年12月30日 将 fullt 设为负责人
gubaocheng
2025年12月30日 评论:
2025年12月30日 评论:
Assign @fulltower


1月4日 关联了pull request:提交Ascend C实现的Neg算子
CANN-robot
3月19日 评论:
3月19日 评论:
CANN-robot
3月19日 评论:
3月19日 评论:
3月30日 关闭了 issue
3月30日 添加了label:resolved
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
一、背景信息 (必填)
使用Ascend C对TBE实现的Neg算子进行重构。
实现算子适配Atlas 800I A2硬件。
二、价值/作用 (必填)
增加Ascend C实现的Neg算子,提升Ascend C算子的功能覆盖范围。
三、设计方案 (必填)
3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)
Aclnn直调
3.2 总体设计
3.2.1 算子支持的数据类型
y=−x
3.2.2 host侧设计
tiling策略:
输入数据总量 → 评估UB容量 → 判断单核是否足够 →
├─ 是:单核策略(coreNum=1)
└─ 否:分核策略
├── 计算理论核心数
├── 与物理核心数取最小值
└── 大小核负载分配(处理余数数据)
1.分核策略
优先使用满核的原则。
根据块大小对输入数据的长度做对齐处理,基于对齐后的数据长度分别计算大、小核分配的数据块数,并保持核心间分配均衡。
2.单core内切分策略
充分使用UB空间的原则。
最大化利用UB空间,通过双缓冲技术和流水线设计隐藏数据搬运开销。UB空间按作用划分为输入缓存、输出缓存和临时缓存(如果数据类型是bfloat16),其中输入和输出缓存采用双缓冲机制,确保计算与数据搬运并行。Tile(每次compute函数计算的数据量)大小根据片上缓存容量和数据类型动态计算,每个核心的数据被划分为多个 Tile,对于最后可能包含尾数据的Tile单独进行处理。
3.tilingkey
tilingkey是否有尾块进行区分,有尾块为1,无尾块为0。
3.2.3 kernel侧设计
进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。

Ascend C实现算子流程图如下:
3.3 支持硬件
Atlas 800I A2推理系列
3.4 算子约束限制
💡 备注(选填)