SetValueOperation
功能
将输入源张量中的内容拷贝到输入目标张量指定位置中。
算子上下文
图1 SetValueOperation算子上下文


算子功能实现
该拷贝为原地拷贝,最终结果修改在输入目标张量中。
例如:输入目标张量dst: (a,b,c),输入源张量src: (d,e,f)
dst[starts[0]: ends[0], starts[1]: ends[1], starts[2]: ends[2]] = src
其中,starts[0]: ends[0]长度为src第0维的维度大小,starts[1]: ends[1]长度为src第1维的维度大小,starts[2]: ends[2]长度为src第2维的维度大小。
定义
struct SetValueParam { SVector<int64_t> starts; SVector<int64_t> ends; SVector<int64_t> strides; };
成员
成员名称 |
类型 |
默认值 |
描述 |
---|---|---|---|
starts |
SVector<int64_t> |
- |
每一维拷贝起始位置。 |
ends |
SVector<int64_t> |
- |
每一维拷贝结束位置后一个位置,拷贝到该位置前一个位置为止。 |
strides |
SVector<int64_t> |
- |
每一维拷贝步长,当前仅支持strides为全1。 |
输入
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
src |
[dim_0,dim_1,...,dim_n] |
float16/float/int32/int64 |
ND |
输入tensor1。 |
dst |
src的所有维度都小于等于dst对应的维度 |
float16/float/int32/int64 |
ND |
输入tensor2。 |
输出
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
dst |
[dim_0,dim_1,...,dim_n] |
float16/float/int32/int64 |
ND |
输出tensor。 注:输出dst与同名输入指向同一地址,即进行原地修改。 |
规格约束
- 输入src和输入dst的维度数、数据类型须相同。
- 输入src的各维度大小要求小于或等于输入dst对应维度大小。
- 输入src和输入dst的各维度要求有一个或两个维度不相同,且需要满足:
- 如果有一个维度不相同,则这个维度不能是最高维(第0维)。
- 如果有两个维度不相同,则其中一个不同的维度必须是最高维(第0维)。
接口调用示例
输入: starts = {1,2} ends = {4,4} strides = {1,1} dst=[[ 14, -2, 2, -10, -12], [-11, 3, 2, -18, 6], [ 1, -18, -12, 9, -6], [ 16, -11, 6, -6, 3], [ 12, 18, 14, 10, 9]] src=[[ 1, 0], [ -4, 7], [ 9, -18]] 输出: dst=[[ 14, -2, 2, -10, -12], [-11, 3, 1, 0, 6], [ 1, -18, -4, 7, -6], [ 16, -11, 9, -18, 3], [ 12, 18, 14, 10, 9]]