S100 ONNX算子BPU约束列表

下方表格中:

lhs:left-hand side,指运算中的左操作数。

rhs:right-hand side,指运算中的右操作数。

注解
  1. DeformConv算子本身存在一定特殊性, 我们通过特定的自定义算子的方法实现了对 torchvision::deformconv 的直接支持, 如有需要请联系地平线技术支持人员获取相关说明。
  2. GroupNormalization算子在从Pytorch框架导出到ONNX时, 会被框架自动拆分成多个子算子到原始ONNX模型中, 我们支持对这些子算子的BPU计算,从而实现了对GroupNormalization算子的支持。
ONNX Operator NameBPU Support Constraints
Absinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Acosinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Acoshinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Addlhs:
Type: int8, int16, int32, if type is int32, this hbir.add op must be fusible to a Conv op
Shape: [*]
rhs:
Same as lhs
output:
Same as lhs
Andlhs:
Type: int8, int16, bool8
Shape: [*]
rhs:
Same as lhs
output:
Type: bool8
ArgMaxinput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]; Special, ReduceArgMax/ReduceArgMin's reduce axis dim size ∈ [1, 32767]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input, ReduceArgMax/ReduceArgMin's output can be of type int32 or int64, as long as the size of the reduced axis can be represented using an int16 number.
ArgMininput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]; Special, ReduceArgMax/ReduceArgMin's reduce axis dim size ∈ [1, 32767]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input, ReduceArgMax/ReduceArgMin's output can be of type int32 or int64, as long as the size of the reduced axis can be represented using an int16 number.
Asininputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Asinhinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Ataninputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Atanhinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
AveragePoolinput:
Type: int8, int16
Shape: [*,H,W,C] or [*,L,C]
output:
Same as input
kernel:
Shape: [KL] or [KH,KW], only support 1d or 2d now
Dim: 1d: KL ∈ [1, 256], KL*bitWidth/8 <= 24576; 2d: KH, KW ∈ [1, 256], KH*KW*bitWidth/8 <= 24576
stride:
Shape: [SH,SW] or [SL]
Dim: SH, SW, SL ∈ [1, 256]
pad:
Shape: [PH_BEGIN,PW_BEGIN,PH_END,PW_END] or [PL_BEGIN,PL_END]
PH_BEGIN,PW_BEGIN,PL_BEGIN,PH_END,PW_END,PL_END ∈ [-255, 256]
BatchNormalizationN/A, collapsed in graph optimization phase
Castinput:
Type: int8, int16, bool8
Shape: [*]
output:
Same as input
Ceilinput:
Type: int8, int16
Shape: [*]
output:
Same as input
Celuinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Clipinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Concatinput:
Arg Number: input number ∈ [1, 1024]
Dim: all dims < 131072 
size < 2G
output:
Same as input
ConstantN/A, collapsed in graph optimization phase
ConstantOfShapeN/A, collapsed in graph optimization phase
Convinput:
--conv 1d--
Type: int8, int16
Shape: [*,L,C]
Dim: * ∈ [1, 4096]; L,C ∈ [1, 65536]
--conv 2d--
Type: int8, int16
Shape: [*,H,W,C]
Dim: * ∈ [1, 4096]; H,W,C ∈ [1, 65536]
weight:
--conv 1d--
Type: int8, int16
Shape: [N,KL,C]
Dim: C ∈ [1, 8192]; KL ∈ [1, 31]; N ∈ [1, 65536] if fout is the last layer of conv else [1, 8192]
Size: KL × C ∈ [1, 65536]
--conv 2d--
Type: int8, int16
Shape: [N,KH,KW,C]
Dim: C ∈ [1, 8192]; KH,KW ∈ [1, 31]; N ∈ [1, 65536] if fout is the last layer of conv else [1, 8192]
Size: KH × KW × C ∈ [1, 65536]
bias:
Type: f32
output:
--conv 1d--
Type: int8, int16, int32
Shape: [*,L,C]
Dim: * ∈ [1, 4096]; L,C ∈ [1, 65536]
--conv 2d--
Type: int8, int16, int32
Shape: [*,H,W,C]
Dim: * ∈ [1, 4096]; H,W,C ∈ [1, 65536]
stride:
--conv 1d--
Shape: [SL]
Dim: SL ∈ [1, 256]; SL ∈ {1} if dilation > 1
--conv 2d--
Shape: [SH,SW]
Dim: SH,SW ∈ [1, 256]; SH,SW ∈ {1} if dilation > 1
pad:
--conv 1d--
Shape: [P_left,P_right]
Dim: P_left,P_right ∈ [-L/2, 256]
--conv 2d--
Shape: [P_top,P_left,P_bottom,P_right]
Dim: P_top,P_bottom ∈ [-H/2, 256], P_left,P_right ∈ [-W/2, 256]
groupNum:
fin.c is divisible by group number
dilation:
--conv 1d--
Shape: [DL]
Dim: DL ∈ [1, 18]
--conv 2d--
Shape: [DH,DW]
Dim: DH,DW ∈ [1, 18]
others:
--conv 1d--
Stride only support odd number and 2 when conv is a int16 depthwise conv
If groupNum > 1, for each group, fin.c' ∈ [1, 65535], KL × fin.c' ∈ [1, 65535]
--conv 2d--
Stride only support odd number and 2 when conv is a int16 depthwise conv
If groupNum > 1, for each group, fin.c' ∈ [1, 65535], KH × KW × fin.c' ∈ [1, 65535]
fin.c' = fin.c × min(lcm(fout.c × (lcm(fin.c, 4) / fin.c), 8) / fout.c, groupNum)
ConvTransposeinput:
Type: int8, int16; input and weight cannot both be int16
1d_Shape: [*,W,C]
1d_Dim: * ∈ [1, 128]; W ∈ [1, 65536]; C ∈ [1, 2048]
2d_Shape: [*,H,W,C]
2d_Dim: * ∈ [1, 128]; H,W ∈ [1, 65536]; C ∈ [1, 2048]
weight:
Type: int8, int16; input and weight cannot both be int16
1d_Shape: [N,KW,C]
1d_Dim: N,C ∈ [1, 2048]; KW ∈ [1, 14]
1d_Size: KW × C ∈ [1, 65536]
2d_Shape: [N,KH,KW,C]
2d_Dim: N,C ∈ [1, 2048]; KH,KW ∈ [1, 14]; KH,KW cannot both be 1
2d_Size: KH × KW × C ∈ [1, 65536]
bias:
Type: f32
output:
Same as input, the type additionally supports int32
stride:
1d_Shape: [SW]
1d_Dim: SW ∈ [1, 14];
2d_Shape: [SH,SW]
2d_Dim: SH,SW ∈ [1, 14];
pad:
1d_Shape: [P_left,P_bottom]
1d_Dim: P_left,P_bottom ∈ [0, 256]
2d_Shape: [P_top,P_left,P_bottom,P_right]
2d_Dim: P_top,P_left,P_bottom,P_right ∈ [0, 256]
dilation:
1d_Shape: [DW]
1d_Dim: DW ∈ {1}
2d_Shape: [DH,DW]
2d_Dim: DH,DW ∈ {1}
Cosinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Coshinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
CumSuminput:
Type: int8, int16, input must be complete quantized
Shape: [*, dim[axis], *]
Dim: * ∈ [1, 65536]; dim[axis] ∈ [1, 8192]
output:
Type: int8, int16, int32
Shape/Dim: same with input
DeformConvinput:
Type: int8
Shape: [*,H,W,C]
Dim: H,W ∈ [1, 1024]; H × W ≤ 720 × 1024; other dims ∈ [1, 65536]
offset:
Type: int16
Shape: [*,OH,OW,2 × offsetGroupNum × KH × KW]
Size: 2 × offsetGroupNum × KH × KW ∈ [2, 256], OH × KH × OW × KW ≤ 720 × 1024
mask:
Type: int8
Shape: [*,OH,OW,offsetGroupNum × KH × KW]
Size: offsetGroupNum × KH × KW ∈ [1, 128]
weight:
Type: int8
Shape: [N,KH,KW,C]
Dim: C ∈ [1, 8192]; KH,KW ∈ [1, 8]; N ∈ [1, 4096]
Size: KH × KW × C ∈ [1, 65536]
bias:
Type: f32
output:
Type: int8, int16, int32
Other constraints: Same as fin
stride:
Shape: [SH,SW]
Dim: SH,SW ∈ [1]
pad:
Shape: [P_top,P_left,P_bottom,P_right]
Dim: P_top,P_bottom ∈ [-H/2, 256], P_left,P_right ∈ [-W/2, 256]
groupNum:
fin.c is divisible by group number
offsetGroupNum:
fin.c is divisible by offset group number
Size: offsetGroupNum ∈ [1, 2]
dilation:
Shape: [DH,DW]
Dim: DH,DW ∈ [1]
others:
For each group, fin.c ∈ [1, 8192], KH × KW × fin.c ∈ [1, 65535], fin.c = C when group = 1
DepthToSpaceinput:
No limits
output:
Same as input
Divinput:
Type: int8, int16
output:
If input is int8, output is int8
If input is int16, output is int8/int16
DropoutN/A, collapsed in graph optimization phase
Eluinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Equallhs:
Type: int8, int16, bool8
Shape: [*]
rhs:
Same as lhs
output:
Type: bool8
Erfinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Expinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Expandinput:
No limits
output:
Same as input
EyeLikeinput:
Type: int8, int16, bool8
Shape: [*]
output:
Same as input
Flatteninput:
No limits
output:
Same as input
Floorinput:
Type: int8, int16
Shape: [*]
output:
Same as input
GRUinput:
Dim: all dims < 2097152
Type: int8, int16
size < 2G
output:
Same as input
Gatherinput:
Type: int8, int16, int32, float16, float32
Shape: [*]
input will transpose to [N, W, C]. W is inputShape[dim], N is the product of inputShape[:dim], C is the product of inputShape[dim+1:].
N, C ∈ [1, 1048576], W ∈ [1, 4096]. If input type is int8, int16, W ∈ [1, 32768].
index:
Type: int8, int16, int32, int64
Shape: [*] index value should not be larger than 32768. And the reduce multiple of all index dims of shape should in range [1, 737280(720*1024)], because all dims 
will be reduced to W dim of indices and output. If W of fout is larger than 737280, this op will be split too many sub-ops.
output:
Same as input
GatherElementsinput:
Type: int8, int16, int32, float16, float32
Shape: [*]
input will transpose to [N, W, C]. W is inputShape[dim], N is the product of inputShape[:dim], C is the product of inputShape[dim+1:].
N, C ∈ [1, 1048576]. N × C should not be larger than 1048576
W ∈ [1, 4096]. If input type is int8, int16, W ∈ [1, 32768].
indices:
Type: int8, int16, int32, int64
Shape: [*] indices value should not be larger than 32768
indices will transpose to [N, D, C]. D is indicesShape[dim], N is the product of indicesShape[:dim], C is the product of indicesShape[dim+1:].
N, C ∈ [1, 1048576], D ∈ [1, 737280(720*1024)].
indicesShape[i] <= inputShape[i] for all dimensions i != dim.
output:
Same as indices
GatherNDinput:
Type: int8, int16, int32, float16, float32
Shape: [*]
if gather1d, W = inputShape[batchDim], W ∈ [1, 4096]. If input type is int8, int16 W ∈ [1, 32768]
if gather2d, H = inputShape[batchDim], W = inputShape[batchDim+1], H, W ∈ [1, 4096]. If input type is int8, H, W ∈ [1, 32768]. H and W cannot both be greater than 4096 at the same time.
B is product of inputShape[0: batchDim], B ∈ [1, 1048576].
C is product of inputShape[batchDim+D:], C ∈ [1, 1048576].
indices:
Type: int8, int16, int32, int64
Shape: [*, D] indices value should not be larger than 32768. D ∈ [1, 2].
output:
Shape: [*]
Same as input
batchDim:
The number of batch dimensions. The gather of indexing starts from dimension of input[batchDim:]
Geluinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Gemminput:
--conv 1d--
Type: int8, int16
Shape: [*,L,C]
Dim: * ∈ [1, 4096]; L,C ∈ [1, 65536]
--conv 2d--
Type: int8, int16
Shape: [*,H,W,C]
Dim: * ∈ [1, 4096]; H,W,C ∈ [1, 65536]
weight:
--conv 1d--
Type: int8, int16
Shape: [N,KL,C]
Dim: C ∈ [1, 8192]; KL ∈ [1, 31]; N ∈ [1, 65536] if fout is the last layer of conv else [1, 8192]
Size: KL × C ∈ [1, 65536]
--conv 2d--
Type: int8, int16
Shape: [N,KH,KW,C]
Dim: C ∈ [1, 8192]; KH,KW ∈ [1, 31]; N ∈ [1, 65536] if fout is the last layer of conv else [1, 8192]
Size: KH × KW × C ∈ [1, 65536]
bias:
Type: f32
output:
--conv 1d--
Type: int8, int16, int32
Shape: [*,L,C]
Dim: * ∈ [1, 4096]; L,C ∈ [1, 65536]
--conv 2d--
Type: int8, int16, int32
Shape: [*,H,W,C]
Dim: * ∈ [1, 4096]; H,W,C ∈ [1, 65536]
stride:
--conv 1d--
Shape: [SL]
Dim: SL ∈ [1, 256]; SL ∈ {1} if dilation > 1
--conv 2d--
Shape: [SH,SW]
Dim: SH,SW ∈ [1, 256]; SH,SW ∈ {1} if dilation > 1
pad:
--conv 1d--
Shape: [P_left,P_right]
Dim: P_left,P_right ∈ [-L/2, 256]
--conv 2d--
Shape: [P_top,P_left,P_bottom,P_right]
Dim: P_top,P_bottom ∈ [-H/2, 256], P_left,P_right ∈ [-W/2, 256]
groupNum:
fin.c is divisible by group number
dilation:
--conv 1d--
Shape: [DL]
Dim: DL ∈ [1, 18]
--conv 2d--
Shape: [DH,DW]
Dim: DH,DW ∈ [1, 18]
others:
--conv 1d--
Stride only support odd number and 2 when conv is a int16 depthwise conv
If groupNum > 1, for each group, fin.c' ∈ [1, 65535], KL × fin.c' ∈ [1, 65535]
--conv 2d--
Stride only support odd number and 2 when conv is a int16 depthwise conv
If groupNum > 1, for each group, fin.c' ∈ [1, 65535], KH × KW × fin.c' ∈ [1, 65535]
fin.c' = fin.c × min(lcm(fout.c × (lcm(fin.c, 4) / fin.c), 8) / fout.c, groupNum)
GlobalAveragePoolinput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]; Special, ReduceArgMax/ReduceArgMin's reduce axis dim size ∈ [1, 32767]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input, ReduceArgMax/ReduceArgMin's output can be of type int32 or int64, as long as the size of the reduced axis can be represented using an int16 number.
GlobalMaxPoolinput:
Type: bool8, int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
Greaterlhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Type: bool8
GreaterOrEquallhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Type: bool8
GridSampleinput:
Type: int8
Shape: [*,H,W,C]
Dim: H ∈ [1, 32768], W ∈ [1, 32768], other dims ∈ [1, 65536].
NOTE: H and W cannot both be greater than 4096 at the same time.
grid:
Type: int16
Shape: [*,H,W,2]
output:
Same as input except Dim constraints
mode:
Only support bilinear and nearest
padding_mode:
Only support zeros and border
GroupNormalizationinput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
HardSigmoidinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
HardSwishinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
IdentityN/A, collapsed in graph optimization phase
IfN/A, collapsed in graph optimization phase
InstanceNormalizationinput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
LSTMinput:
Dim: all dims < 2097152
Type: int8, int16
size < 2G
output:
Same as input
LayerNormalizationinput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
LeakyReluinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Lesslhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Type: bool8
LessOrEquallhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Type: bool8
Loginputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
LogSoftmaxinput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
MatMullhs:
Type: int8, int16
Shape: [*,M,C]
Dim: * ∈ [1, 4096], M,C ∈ [1, 8192]
rhs:
Type: int8, int16
Shape: [*,C,N]
Dim: * ∈ [1, 4096]; C ∈ [1, 8192], N ∈  [1, 1048576]
output:
Type: int8, int16, int32
Shape: [*,M,N]
Other constraints: Same as lhs and rhs
Maxlhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Same as lhs
MaxPoolinput:
Type: int8, int16
Shape: [*,H,W,C] or [*,L,C]
output:
Same as input
kernel:
Shape: [KL] or [KH,KW], only support 1d or 2d now
Dim: 1d: KL ∈ [1, 256], KL*bitWidth/8 <= 24576; 2d: KH, KW ∈ [1, 256], KH*KW*bitWidth/8 <= 24576
stride:
Shape: [SH,SW] or [SL]
Dim: SH, SW, SL ∈ [1, 256]
pad:
Shape: [PH_BEGIN,PW_BEGIN,PH_END,PW_END] or [PL_BEGIN,PL_END]
PH_BEGIN,PW_BEGIN,PL_BEGIN,PH_END,PW_END,PL_END ∈ [-255, 256]
Minlhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Same as lhs
Mishinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Mullhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Type: int8, int16, int32
Shape: [*]
Neginput:
Type: int8, int16
Shape: [*]
output:
Same as input
Notinput:
Type: int8, int16, bool8
Shape: [*]
output:
Type: bool8
Orlhs:
Type: int8, int16, bool8
Shape: [*]
rhs:
Same as lhs
output:
Type: bool8
PRelulhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Same as lhs
PadN/A, collapsed in graph optimization phase
Powinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Reciprocalinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
ReduceL1input:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
ReduceL2input:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
ReduceMaxinput:
Type: bool8, int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
ReduceMeaninput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]; Special, ReduceArgMax/ReduceArgMin's reduce axis dim size ∈ [1, 32767]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input, ReduceArgMax/ReduceArgMin's output can be of type int32 or int64, as long as the size of the reduced axis can be represented using an int16 number.
ReduceMininput:
Type: bool8, int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
ReduceSuminput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]; Special, ReduceArgMax/ReduceArgMin's reduce axis dim size ∈ [1, 32767]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input, ReduceArgMax/ReduceArgMin's output can be of type int32 or int64, as long as the size of the reduced axis can be represented using an int16 number.
ReluN/A, collapsed in graph optimization phase
Reshapeinput:
No limits
output:
Same as input
Resizeinput:
Type: int8
Shape: [*,H,W,C]
The integer part of step ∈ [-256, 255], otherwise the backend will be on cpu
output:
Same as input
mode:
support nearest and bilinear
Roundinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Seluinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
ShapeN/A, collapsed in graph optimization phase
Sigmoidinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Signinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Sininputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Sinhinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
SizeN/A, collapsed in graph optimization phase
Softmaxinput:
Type: int8, int16
Shape: [*]
Dim: reduce axis dim size ∈ [1, 65535]
Element : reduce Elements size ∈ [1, 65535]
output:
Same as input
Softplusinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Softsigninputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
SpaceToDepthinput:
No limits
output:
Same as input
Splitinput:
Dim: all dims < 2097152 
output:
Same as input
Sqrtinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Squeezeinput:
No limits
output:
Same as input
Sublhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Same as lhs
Sumlhs:
Type: int8, int16, int32, if type is int32, this hbir.add op must be fusible to a Conv op
Shape: [*]
rhs:
Same as lhs
output:
Same as lhs
Taninputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Tanhinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
ThresholdedReluinputs:
Type: int8, int16
outputs:
If input is int8, output is int8
If input is int16, output is int8/int16
Tileinput:
No limits
output:
Same as input
Transposeinput:
No limits
output:
Same as input
Trilulhs:
Type: int8, int16
Shape: [*]
rhs:
Same as lhs
output:
Type: int8, int16, int32
Shape: [*]
Unsqueezeinput:
No limits
output:
Same as input
Wherecondition:
Type: bool8
lhs:
Type: int8, int16
Shape: [*]
rhs:
Type: int8, int16
output:
Same as lhs
Xorlhs:
Type: int8, int16, bool8
Shape: [*]
rhs:
Same as lhs
output:
Type: bool8