Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
scatter_nd_max:根据indices在给定变量内,在updates和单个值或切片之间求最大值
scatter_nd_min:根据indices在给定变量内,在updates和单个值或切片之间求最小值
NA
ScatterNdMax和ScatterNdMin算子AiCore实现
总体方案 将输出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
/assign
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
scatter_nd_max:根据indices在给定变量内,在updates和单个值或切片之间求最大值
scatter_nd_min:根据indices在给定变量内,在updates和单个值或切片之间求最小值
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