Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
通过社区任务完成开源仓算子贡献的需求,补充完善 Ascend C Sign算子,为现有的 Sign 算子增加对 int16 数据类型的支持。
Sign算子的主要功能是计算给定数值的符号:若元素值大于 0 则输出 1,小于 0 则输出 –1,等于 0 则输出 0,并生成结果张量 out。在数学与工程领域,Sign 运算是一种简洁而关键的符号判别操作,被广泛应用于稀疏化、梯度方向判断、特征编码等场景,可高效处理批量数值的符号计算,支持浮点数与整数输入。实现了Sign算子的AscendC实现,替代原有TBE算子在昇腾硬件上的适配。
使用aclnn直调
1)分核策略
优先使用满核的原则。 如果核间能均分,可视作无大小核区分,大核小核数据块一致; 如果核间不能均分,需要将余出的数据块分配到前几个核上。 数据量当能单核处理的情况下使用单核,否者使用满核进行加速处理。
2)单core内切分策略 充分使用UB空间的原则。 需要考虑不同硬件的UB大小不同、是否开启double buffer、kernel侧API实现过程中是否需要临时数据的储存,综合考虑单核内切分的大小。
3)tilingkey规划策略 需要tilingkey的情况:需要感知host侧信息对kernel侧走不同分支。 不需要tilingkey的情况:host侧的处理是通用的,无特殊属性等决定kernel的分支
数据检测: 对不支持AscendC::Cast()bfloat16向float32转换的硬件进行直接在tiling策略时返回Get Operator Workspace failed. error code is 561002报错。
进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。
将float16/float32使用AscendC:Sign计算,int32/int16使用AscendC:Mins,AscendC:Maxs计算。对于输入类型为bfloat16时,AscendC:Cast为float32计算。
Atlas A2 训练系列产品 Atlas A3 系列产品
输入 x 和输出 y 的 Shape 必须严格保持一致。 💡 备注(选填)
/assign
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
一、背景信息 (必填)
通过社区任务完成开源仓算子贡献的需求,补充完善 Ascend C Sign算子,为现有的 Sign 算子增加对 int16 数据类型的支持。
二、价值/作用 (必填)
Sign算子的主要功能是计算给定数值的符号:若元素值大于 0 则输出 1,小于 0 则输出 –1,等于 0 则输出 0,并生成结果张量 out。在数学与工程领域,Sign 运算是一种简洁而关键的符号判别操作,被广泛应用于稀疏化、梯度方向判断、特征编码等场景,可高效处理批量数值的符号计算,支持浮点数与整数输入。实现了Sign算子的AscendC实现,替代原有TBE算子在昇腾硬件上的适配。
三、设计方案 (必填)
3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)
使用aclnn直调
3.2 总体设计
3.2.1 算子支持的数据类型
3.2.2 host侧设计
1)分核策略
优先使用满核的原则。
如果核间能均分,可视作无大小核区分,大核小核数据块一致;
如果核间不能均分,需要将余出的数据块分配到前几个核上。
数据量当能单核处理的情况下使用单核,否者使用满核进行加速处理。
2)单core内切分策略
充分使用UB空间的原则。
需要考虑不同硬件的UB大小不同、是否开启double buffer、kernel侧API实现过程中是否需要临时数据的储存,综合考虑单核内切分的大小。
3)tilingkey规划策略
需要tilingkey的情况:需要感知host侧信息对kernel侧走不同分支。
不需要tilingkey的情况:host侧的处理是通用的,无特殊属性等决定kernel的分支
数据检测:
对不支持AscendC::Cast()bfloat16向float32转换的硬件进行直接在tiling策略时返回Get Operator Workspace failed. error code is 561002报错。
3.2.3 kernel侧设计
进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。
将float16/float32使用AscendC:Sign计算,int32/int16使用AscendC:Mins,AscendC:Maxs计算。对于输入类型为bfloat16时,AscendC:Cast为float32计算。
3.3 支持硬件
Atlas A2 训练系列产品
Atlas A3 系列产品
3.4 算子约束限制
输入 x 和输出 y 的 Shape 必须严格保持一致。
💡 备注(选填)