已关闭
[Requirement|需求建议]: 新增ScatterNdMax/ScatterNdMin算子 #2919
z30075199创建于  5月27日关闭于  5月30日
z30075199成员
5月27日 创建

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

Backgroud(背景信息)

scatter_nd_max:根据indices在给定变量内,在updates和单个值或切片之间求最大值

参数名 输入/输出/属性 描述 数据类型 数据格式
var 输入 表示一个待被更新的张量, 等同于公式中的`ref` DT_INT8、DT_INT16、DT_INT64、DT_UINT64、DT_BOOL、DT_FLOAT16、DT_BF16、DT_FLOAT、DT_INT32、DT_UINT32 ND
indices 输入 一个索引张量,索引到公式中的`ref` INT32、INT64。 ND
updates 输入 使用此张量来更新var张量,必须跟输入var张量保持一样的数据类型 DT_INT8、DT_INT16、DT_INT64、DT_UINT64、DT_BOOL、DT_FLOAT16、DT_BF16、DT_FLOAT、DT_INT32、DT_UINT32 ND
var 输出 表示更新后的张量 DT_INT8、DT_INT16、DT_INT64、DT_UINT64、DT_BOOL、DT_FLOAT16、DT_BF16、DT_FLOAT、DT_INT32、DT_UINT32 ND
use_locking 可选属性 可选属性,默认值为`false`, 如果为`true`, 这次操作将会被一个lock保护 BOOL -

scatter_nd_min:根据indices在给定变量内,在updates和单个值或切片之间求最小值

参数名 输入/输出/属性 描述 数据类型 数据格式
var 输入 表示一个待被更新的张量, 等同于公式中的`ref` DT_INT8、DT_INT16、DT_INT64、DT_UINT64、DT_BOOL、DT_FLOAT16、DT_BF16、DT_FLOAT、DT_INT32、DT_UINT32 ND
indices 输入 一个索引张量,索引到公式中的`ref` INT32、INT64。 ND
updates 输入 使用此张量来更新var张量,必须跟输入var张量保持一样的数据类型 DT_INT8、DT_INT16、DT_INT64、DT_UINT64、DT_BOOL、DT_FLOAT16、DT_BF16、DT_FLOAT、DT_INT32、DT_UINT32 ND
var 输出 表示更新后的张量 DT_INT8、DT_INT16、DT_INT64、DT_UINT64、DT_BOOL、DT_FLOAT16、DT_BF16、DT_FLOAT、DT_INT32、DT_UINT32 ND
use_locking 可选属性 可选属性,默认值为`false`, 如果为`true`, 这次操作将会被一个lock保护 BOOL -
### Origin(信息来源)

NA

Benefit / Necessity (价值/作用)

ScatterNdMax和ScatterNdMin算子AiCore实现

Design(设计方案)

总体方案
将输出var,updates,indices的维度分别合轴记为(m,n),(g,n),(g,rank),其中rank是indices.shape(-1)的值的大小。
indices 看成两维,即除了-1维度外,其余维度合并,计算出要计算的slice的个数。
使用sort计算重复索引个数,并把索引cast成低位宽优化sort耗时。

tiling策略:
1、按尾轴分核:afterAxisSize > totalCoreNum_ * 128 || indicesAxis < totalCoreNum / 2
搬入多少行indices,就搬入相同行数的updates
2、按索引分核
2.1、updates列大于4k单行搬入搬出
afterAxis_ * varTypeSize_ > 4096 && indicesAxis_ > (totalCoreNum_ * 64)
2.2、搬入多少行indices,就搬入相同行数的updates

likedislike
Zz30075199成员
5月27日 添加了label:requirement
z30075199成员
5月27日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
5月27日 将 z30075199 设为负责人
CANN-robotCANN-robot成员
5月30日 关闭了 issue
CANN-robotCANN-robot成员
5月30日 添加了label:resolved