compute接口
- te.lang.cce.vadd(lhs, rhs)
- te.lang.cce.vsub(lhs, rhs)
- te.lang.cce.vmul(lhs, rhs)
- te.lang.cce.vmin(lhs, rhs)
- te.lang.cce.vmax(lhs, rhs)
- te.lang.cce.vor(lhs, rhs)
- te.lang.cce.vand(lhs, rhs)
- te.lang.cce.vadds(raw_tensor, scalar)
- te.lang.cce.vmuls(raw_tensor, scalar)
- te.lang.cce.vlog(raw_tensor)
- te.lang.cce.vexp(raw_tensor)
- te.lang.cce.vabs(raw_tensor)
- te.lang.cce.vrec(raw_tensor)
- te.lang.cce.cast_to(data, dtype, f1628IntegerFlag=False)
- te.lang.cce.vrelu(raw_tensor)
- te.lang.cce.vnot(raw_tensor)
- te.lang.cce.vaxpy(lhs, rhs, scalar)
- te.lang.cce.vmla(x, y, z)
- te.lang.cce.vmadd(x, y, z)
- te.lang.cce.vmaddrelu(x, y, z)
- te.lang.cce.ceil(raw_tensor)
- te.lang.cce.floor(raw_tensor)
- te.lang.cce.round(raw_tensor)
- te.lang.cce.sum(raw_tensor, axis, keepdims=False)
- te.lang.cce.reduce_min(raw_tensor, axis, keepdims=False)
- te.lang.cce.reduce_max(raw_tensor, axis, keepdims=False)
- te.lang.cce.reduce_prod(raw_tensor, axis, keepdims=False)
- te.lang.cce.broadcast(var, shape, output_dtype=None)
- te.lang.cce.unsorted_segment_sum(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.unsorted_segment_mean(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.unsorted_segment_prod(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.unsorted_segment_min(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.unsorted_segment_max(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.concat(raw_tensors, axis)
- te.lang.cce.conv(*args)
- te.lang.cce.compute_four2five(input, raw_shape_4D)
- te.lang.cce.compute_five2four(input, raw_shape_4D)
- te.lang.cce.matmul(tensor_a, tensor_b, trans_a=False, trans_b=False, alpha_num=1.0, beta_num=0.0, tensor_c=None)
te.lang.cce.vadd(lhs, rhs)
两个tensor按元素相加,元素的数据类型需要一致,支持的类型:float16,float32,int32。int8,uint8会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
- lhs:左tensor,tvm.tensor类型。
- rhs:右tensor,tvm.tensor类型。
返回值
res_tensor:表示lhs + rhs,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) res = te.lang.cce.vadd(data1, data2)
te.lang.cce.vsub(lhs, rhs)
两个tensor按元素相减,元素的数据类型需要一致,支持的类型:float16,float32,int32。int8,uint8会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
- lhs:左tensor,tvm.tensor类型。
- rhs:右tensor,tvm.tensor类型。
返回值
res_tensor:表示 lhs - rhs,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) res = te.lang.cce.vsub(data1, data2)
te.lang.cce.vmul(lhs, rhs)
两个tensor按元素相乘,元素的数据类型需要一致,支持的类型:float16,float32,int32。int8,uint8会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
- lhs:左tensor,tvm.tensor类型。
- rhs:右tensor,tvm.tensor类型。
返回值
res_tensor:表示lhs * rhs,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) res = te.lang.cce.vmul(data1, data2)
te.lang.cce.vmin(lhs, rhs)
两个tensor按元素比较并取较小值,元素的数据类型需要一致,支持的类型:float16,float32,int32。int8,uint8会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
- lhs:左tensor,tvm.tensor类型。
- rhs:右tensor,tvm.tensor类型。
返回值
res_tensor:结果tensor,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) res = te.lang.cce.vmin(data1, data2)
te.lang.cce.vmax(lhs, rhs)
两个tensor按元素比较并取较大值,元素的数据类型需要一致,支持的类型:float16,float32,int32。int8,uint8会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
- lhs:左tensor,tvm.tensor类型。
- rhs:右tensor,tvm.tensor类型。
返回值
res_tensor:结果tensor,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) res = te.lang.cce.vmax(data1, data2)
te.lang.cce.vor(lhs, rhs)
两个tensor元素按位取或,元素的数据类型需要一致,支持的类型:int16,uint16。
该接口在elewise_compute.py中定义。
参数说明
- lhs:左tensor,tvm.tensor类型。
- rhs:右tensor,tvm.tensor类型。
返回值
res_tensor:表示lhs按位或rhs,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "int16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) res = te.lang.cce.vor(data1, data2)
te.lang.cce.vand(lhs, rhs)
两个tensor元素按位取与,元素的数据类型需要一致,支持的类型:int16,uint16。
该接口在elewise_compute.py中定义。
参数说明
- lhs:左tensor,tvm.tensor类型。
- rhs:右tensor,tvm.tensor类型。
返回值
res_tensor:表示lhs按位与rhs,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "int16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) res = te.lang.cce.vand(data1, data2)
te.lang.cce.vadds(raw_tensor, scalar)
将raw_tensor中每个元素加上标量scalar,支持的类型:float16,float32。int8,uint8,int32会被转换为float16。如果scalar数据类型与raw_tensor数据类型不一致,计算中会转换为对应数据类型。
该接口在elewise_compute.py中定义。
参数说明
- raw_tensor:输入tensor,tvm.tensor类型。
- scalar:raw_tensor中元素要加的系数,标量类型。
返回值
res_tensor:表示raw_tensor + scalar,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) scalar = tvm.const(2, dtype =input_dtype) res = te.lang.cce.vadds(data, scalar)
te.lang.cce.vmuls(raw_tensor, scalar)
将raw_tensor中每个元素乘上标量scalar,支持的类型:float16,float32。int8,uint8,int32会被转换为float16。如果scalar数据类型与raw_tensor数据类型不一致,计算中会转换为对应数据类型。
该接口在elewise_compute.py中定义。
参数说明
- raw_tensor:输入tensor,tvm.tensor类型。
- scalar:raw_tensor中元素要乘的系数,标量类型。
返回值
res_tensor:表示raw_tensor * scalar,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) scalar = tvm.const(2, dtype =input_dtype) res = te.lang.cce.vmuls(data, scalar)
te.lang.cce.vlog(raw_tensor)
对raw_tensor中的每个元素做对数ln(x)运算,支持的类型:float16。int8,uint8,int32,float32类型会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
raw_tensor:输入tensor,tvm.tensor类型。
返回值
res_tensor:表示ln(raw_tensor),tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.vlog(data)
te.lang.cce.vexp(raw_tensor)
对tensor中的每个元素做自然指数运算e^x,支持的类型:float16。int8,uint8,int32,float32类型会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
raw_tensor:输入tensor,tvm.tensor类型。
返回值
res_tensor:表示e^(raw_tensor),tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.vexp(data)
te.lang.cce.vabs(raw_tensor)
对tensor中的每个元素做绝对值运算|x|,支持的类型:float16。int8,uint8,int32,float32类型会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
raw_tensor:输入tensor,tvm.tensor类型。
返回值
res_tensor:表示|raw_tensor|,tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.vabs(data)
te.lang.cce.vrec(raw_tensor)
对tensor中的每个元素做倒数运算 1 / x,支持的类型:float16,float32。int8,uint8,int32类型会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
raw_tensor:输入tensor,tvm.tensor类型。
返回值
res_tensor:表示1 / raw_tensor,tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.vrec(data)
te.lang.cce.cast_to(data, dtype, f1628IntegerFlag=False)
数据类型转换,把data中的数据转换为dtype类型。
该接口在common.py中定义。
支持如下的类型转换。
源数据类型 |
目的数据类型 |
---|---|
float32 |
float16 |
float32 |
int8 |
float32 |
uint8 |
float16 |
float32 |
float16 |
int8 |
float16 |
uint8 |
float16 |
int32 |
int8 |
float16 |
int8 |
uint8 |
int32 |
float16 |
int32 |
int8 |
int32 |
uint8 |
参数说明
- data:输入tensor,tvm.tensor类型。
- dtype:目的数据类型,字符串类型。
- f1628IntegerFlag:默认值为False。如果转换前数据的小数部分为0,参数f1628IntegerFlag需要设为True;如果转换前数据的小数部分不为0,参数f1628IntegerFlag需要设为False。
返回值
res_tensor:转换后的数据,tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.cast_to(data,"float32")
te.lang.cce.vrelu(raw_tensor)
对tensor中的每个元素做线性整流运算relu,支持的类型:float16。int8,uint8,int32,float32类型会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
raw_tensor:输入tensor,tvm.tensor类型。
返回值
res_tensor:表示relu(raw_tensor),tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.vrelu(data)
te.lang.cce.vnot(raw_tensor)
对tensor中的每个元素按位取反,支持的类型:int16,uint16。
该接口在elewise_compute.py中定义。
参数说明
raw_tensor:输入tensor,tvm.tensor类型。
返回值
res_tensor:表示raw_tensor按位取反,tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "int16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.vnot(data)
te.lang.cce.vaxpy(lhs, rhs, scalar)
将lhs中每个元素乘上标量scalar,再加上rhs中的对应元素,lhs和rhs tensor的数据类型要求一致,支持的类型:float16、float32。int8、uint8、int32类型会被转换为float16。
scalar的数据类型如果跟tensor不一致,会被转换成tensor的数据类型。
该接口在elewise_compute.py中定义。
参数说明
- lhs:左tensor,tvm.tensor类型。
- rhs:右tensor,tvm.tensor类型。
- scalar:lhs中元素要乘的系数,标量类型。
返回值
res_tensor:表示lhs * scalar + rhs,tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) scalar = tvm.const(2, dtype =input_dtype) res = te.lang.cce.vaxpy(data1, data2, scalar)
te.lang.cce.vmla(x, y, z)
将x中每个元素乘上y中的对应元素,再加上z中的对应元素,三个tensor的数据类型要求一致,支持的类型:float16、float32。int8、uint8、int32类型会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
- x:tensor,tvm.tensor类型
- y:tensor,tvm.tensor类型
- z:tensor,tvm.tensor类型
返回值
res_tensor:表示x * y + z,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) data3 = tvm.placeholder(shape, name="data3", dtype=input_dtype) res = te.lang.cce.vmla(data1, data2, data3)
te.lang.cce.vmadd(x, y, z)
将x中每个元素乘上z中的对应元素,再加上y中的对应元素,三个tensor的数据类型要求一致,支持的类型:float16、float32。int8、uint8、int32类型会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
- x:tensor,tvm.tensor类型。
- y:tensor,tvm.tensor类型。
- z:tensor,tvm.tensor类型。
返回值
res_tensor:表示x * z + y,tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) data3 = tvm.placeholder(shape, name="data3", dtype=input_dtype) res = te.lang.cce.vmadd(data1, data2, data3)
te.lang.cce.vmaddrelu(x, y, z)
将x中每个元素乘上z中的对应元素,再加上y中的对应元素,然后做线性整流,三个tensor的数据类型要求一致,支持的类型:float16、float32。int8、uint8、int32类型会被转换为float16。
该接口在elewise_compute.py中定义。
参数说明
- x:tensor,tvm.tensor类型。
- y:tensor,tvm.tensor类型。
- z:tensor,tvm.tensor类型。
返回值
res_tensor:表示relu(x * z + y),tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data1 = tvm.placeholder(shape, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape, name="data2", dtype=input_dtype) data3 = tvm.placeholder(shape, name="data3", dtype=input_dtype) res = te.lang.cce.vmaddrelu(data1, data2, data3)
te.lang.cce.ceil(raw_tensor)
对raw_tensor中的每个元素向上取整,支持的类型:float16。float32类型会被转换为float16。结果为int32。
该接口在cast_compute.py中定义。
参数说明
raw_tensor:输入tensor,tvm.tensor类型。
返回值
res_tensor:表示ceil(raw_tensor),tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.ceil(data)
te.lang.cce.floor(raw_tensor)
对raw_tensor中的每个元素向下取整,支持的类型:float16。float32类型会被转换为float16。结果为int32。
该接口在cast_compute.py中定义。
参数说明
raw_tensor:输入tensor,tvm.tensor类型
返回值
res_tensor:表示floor(raw_tensor),tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.floor(data)
te.lang.cce.round(raw_tensor)
对raw_tensor中的每个元素四舍六入,0.5取偶数,例如`1.5->2.0,2.5->2.0`,支持的类型:float16。float32类型会被转换为float16。结果为int32。
该接口在cast_compute.py中定义。
参数说明
raw_tensor:输入tensor,tvm.tensor类型
返回值
res_tensor:表示round(raw_tensor),tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.round(data)
te.lang.cce.sum(raw_tensor, axis, keepdims=False)
按某个轴求和,进行降维,支持的类型:float16、float32。int8、uint8、int32类型会被转换为float16。
该接口在reduction_compute.py中定义。
参数说明
- raw_tensor:输入tensor,tvm.tensor类型
- axis:做reduce操作的轴,取值范围:[-d,d-1],其中d是raw_tensor的维数,int或list类型
- keepdims:默认值是False,表示做reduce操作后,操作的轴长度为0,例如,原shape是(10,10,10),keepdims=False时,reduce后shape是(10,10)。若将该参数值设置为True,表示做reduce操作后,操作的轴的长度设置为1,例如,原shape是(10,10,10),keepdims=True时,reduce后shape是(10,10,1)。
返回值
res_tensor:求和后的tensor,tvm.tensor类型
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.sum(data, axis=1)
te.lang.cce.reduce_min(raw_tensor, axis, keepdims=False)
按某个轴求最小值,进行降维,支持的类型:float16。int8、uint8、int32、float32类型会被转换为float16。
该接口在reduction_compute.py中定义。
参数说明
- raw_tensor:输入tensor,tvm.tensor类型。
- axis:做reduce操作的轴,取值范围:[-d,d-1],其中d是raw_tensor的维数,int或list类型。
- keepdims:默认值是False,表示做reduce操作后,操作的轴长度为0,例如,原shape是(10,10,10),keepdims=False时,reduce后shape是(10,10)。若将该参数值设置为True,表示做reduce操作后,操作的轴的长度设置为1,例如,原shape是(10,10,10),keepdims=True时,reduce后shape是(10,10,1)。
返回值
res_tensor:取最小值后的tensor,tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.reduce_min(data, axis=1)
te.lang.cce.reduce_max(raw_tensor, axis, keepdims=False)
按某个轴求最大值,进行降维,支持的类型:float16。int8、uint8、int32、float32类型会被转换为float16。
该接口在reduction_compute.py中定义。
参数说明
- raw_tensor:输入tensor,tvm.tensor类型。
- axis:做reduce操作的轴,取值范围:[-d,d-1],其中d是raw_tensor的维数,int或list类型。
- keepdims:默认值是False,表示做reduce操作后,操作的轴长度为0,例如,原shape是(10,10,10),keepdims=False时,reduce后shape是(10,10)。若将该参数值设置为True,表示做reduce操作后,操作的轴的长度设置为1,例如,原shape是(10,10,10),keepdims=True时,reduce后shape是(10,10,1)。
返回值
res_tensor:取最大值后的tensor,tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.reduce_max(data, axis=1)
te.lang.cce.reduce_prod(raw_tensor, axis, keepdims=False)
按某个轴求乘积,进行降维,支持的类型:float16。int8、uint8、int32、float32类型会被转换为float16。
该接口在reduction_compute.py中定义。
参数说明
- raw_tensor:输入tensor,tvm.tensor类型。
- axis:做reduce操作的轴,取值范围:[-d,d-1],其中d是raw_tensor的维数,int类型。
- keepdims:默认值是False,表示做reduce操作后,操作的轴长度为0,例如,原shape是(10,10,10),keepdims=False时,reduce后shape是(10,10)。若将该参数值设置为True,表示做reduce操作后,操作的轴的长度设置为1,例如,原shape是(10,10,10),keepdims=True时,reduce后shape是(10,10,1)。
返回值
res_tensor:按某个轴求乘积后的tensor,tvm.tensor类型。
调用示例
shape = (1024,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.reduce_prod(data, axis=1)
te.lang.cce.broadcast(var, shape, output_dtype=None)
把var broadcast为大小为shape的tensor,结果的数据类型由output_dtype指定,var可以是标量,或者是一个tensor,要求var的shape与第二个参数shape的长度一致,每个维度的大小要么与shape相等,要么为1,为1的维度会被broadcast到与shape一致。例如var的维度为(2,1,64),shape为(2,128,64),运算结果var的维度变为(2,128,64)。支持的类型:float16、float32、int32。
该接口在broadcast_compute.py中定义。
参数说明
- var:需要broadcast的数据,标量或者tensor类型。
- shape:目标shape,进行broadcast操作的目标shape。
- output_dtype:输出数据类型,默认值var.dtype。
返回值
res_tensor:由var扩展后得到的tensor,shape为参数指定的shape,数据类型为output_dtype。
调用示例
outshape = (1024,1024) shape = (1024,1) input_dtype = "float16" data = tvm.placeholder(shape, name="data", dtype=input_dtype) res = te.lang.cce.broadcast(data, outshape)
te.lang.cce.unsorted_segment_sum(tensor, segment_ids, num_segments, init_value=0)
使用数组segment_ids对tensor进行分段求和。假设输入为data,输出为output,则output[i] = sum(data[j...]),其中“j...”是一个数组,“j...”中的元素j满足:segment_ids[j] == i。
如果某个下标i在segment_ids中没有出现,则output[i] = init_value。比如下图中,1在segment_ids中没有出现,则output[1] = 0。
如果segment_ids中某个值为负数,则对应位置的data中的值则丢弃。比如下图中,segment_ids[3] = -1,则data[3]的值被丢弃,不参与计算。
segment_ids其长度必须和data的第一维的长度相同。num_segments必须大于等于segment_ids的最大值加1。
支持的数据类型:float16、float32、int32。
该接口在segment_compute.py中定义。
参数说明
- tensor:输入tensor,必须是如下数据类型之一:float16、float32、int32。
- segment_ids:一维数组,对输入tensor进行分段的数组,其长度必须和输入tensor的第一维的长度相同。同时支持有序和无序。
- num_segments:输出tensor的第一维的长度。其值必须大于等于segment_ids的最大值加1。
- init_value:当segment_ids中某个下标不存在时,其输出的默认值。根据算子的实现来确定。默认值为0。
返回值
res_tensor:表示计算后的tensor。
调用示例
import tvm import te.lang.cce shape = (5,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data1", dtype=input_dtype) segment_ids = [1,1,4,5,5] num_segments = 6 res = te.lang.cce.unsorted_segment_sum(data, segment_ids, num_segments) res.shape = (6,1024) # res[0] = 0 # res[1] = data[0] + data[1] # res[2] = 0 # res[3] = 0 # res[4] = data[2] # res[5] = data[3] + data[4]
te.lang.cce.unsorted_segment_mean(tensor, segment_ids, num_segments, init_value=0)
使用数组segment_ids对tensor进行分段求均值。假设输入为data,输出为output,则output[i] = (1 / len(j...)) sum(data[j...]),其中“j...”是一个数组,“j...”中的元素j满足:segment_ids[j] == i。
如果某个下标i在segment_ids中没有出现,则output[i] = init_value。比如下图中,1在segment_ids中没有出现,则output[1] = 0。
如果segment_ids中某个值为负数,则对应位置的data中的值则丢弃。比如下图中,segment_ids[3] = -1,则data[3]的值被丢弃,不参与计算。
segment_ids其长度必须和data的第一维的长度相同。num_segments必须大于等于segment_ids的最大值加1。
支持的数据类型:float16、float32、int32。
该接口在segment_compute.py中定义。
参数说明
- tensor:输入tensor,必须是如下数据类型之一:float16、float32、int32。
- segment_ids:一维数组,对输入tensor进行分段的数组,其长度必须和输入tensor的第一维的长度相同。同时支持有序和无序。
- num_segments:输出tensor的第一维的长度。其值必须大于等于segment_ids的最大值加1。
- init_value:当segment_ids中某个下标不存在时,其输出的默认值。根据算子的实现来确定。默认值为0。
返回值:
res_tensor:表示计算后的tensor。
调用示例
import tvm import te.lang.cce shape = (5,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data1", dtype=input_dtype) segment_ids = [1,1,5,5,5] num_segments = 6 res = te.lang.cce.unsorted_segment_mean(data, segment_ids, num_segments) # res.shape = (6,1024) # res[0] = 0 # res[1] = (data[0] + data[1]) / 2 # res[2] = 0 # res[3] = 0 # res[4] = 0 # res[5] = (data[2] + data[3] + data[4]) / 3
te.lang.cce.unsorted_segment_prod(tensor, segment_ids, num_segments, init_value=0)
使用数组segment_ids对tensor进行分段求内积。假设输入为data,输出为output,则output[i] = product(data[j...]),其中“j...”是一个数组,“j...”中的元素j满足:segment_ids[j] == i。
product表示求内积,即data[j...]中所有元素相乘。
如果某个下标i在segment_ids中没有出现,则output[i] = init_value。比如下图中,1在segment_ids中没有出现,则output[1] = 0。
如果segment_ids中某个值为负数,则对应位置的data中的值则丢弃。比如下图中,segment_ids[3] = -1,则data[3]的值被丢弃,不参与计算。
segment_ids其长度必须和data的第一维的长度相同。num_segments必须大于等于segment_ids的最大值加1。
支持的数据类型:float16、float32、int32。
该接口在segment_compute.py中定义。
参数说明
- tensor:输入tensor,必须是如下数据类型之一:float16、float32、int32。
- segment_ids:一维数组,对输入tensor进行分段的数组,其长度必须和输入tensor的第一维的长度相同。同时支持有序和无序。
- num_segments:输出tensor的第一维的长度。其值必须大于等于segment_ids的最大值加1。
- init_value:当segment_ids中某个下标不存在时,其输出的默认值。根据算子的实现来确定。默认值为0。
返回值
res_tensor:表示计算后的tensor。
调用示例
import tvm import te.lang.cce shape = (5,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data1", dtype=input_dtype) segment_ids = [1,1,4,5,5] num_segments = 6 res = te.lang.cce.unsorted_segment_prod(data, segment_ids, num_segments) # res.shape = (6,1024) # res[0] = 1 # res[1] = (data[0] * data[1]) # res[2] = 1 # res[3] = 1 # res[4] = data[2] # res[5] = (data[3] * data[4])
te.lang.cce.unsorted_segment_min(tensor, segment_ids, num_segments, init_value=0)
使用数组segment_ids对tensor进行分段求最小值。假设输入为data,输出为output,则output[i] = min(data[j...]),其中“j...”是一个数组,“j...”中的元素j满足:segment_ids[j] == i。
如果某个下标i在segment_ids中没有出现,则output[i] = init_value。比如下图中,1在segment_ids中没有出现,则output[1] = 0。
如果segment_ids中某个值为负数,则对应位置的data中的值则丢弃。比如下图中,segment_ids[3] = -1,则data[3]的值被丢弃,不参与计算。
segment_ids其长度必须和data的第一维的长度相同。num_segments必须大于等于segment_ids的最大值加1。
支持的数据类型:float16、float32。
该接口在segment_compute.py中定义。
参数说明
- tensor:输入tensor,必须是如下数据类型之一:float16、float32、int32。
- segment_ids:一维数组,对输入tensor进行分段的数组,其长度必须和输入tensor的第一维的长度相同。同时支持有序和无序。
- num_segments:输出tensor的第一维的长度。其值必须大于等于segment_ids的最大值加1。
- init_value:当segment_ids中某个下标不存在时,其输出的默认值。根据算子的实现来确定。默认值为0。
返回值
res_tensor:表示计算后的tensor。
调用示例
import tvm import te.lang.cce shape = (5,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data1", dtype=input_dtype) segment_ids = [1,1,4,5,5] num_segments = 6 res = te.lang.cce.unsorted_segment_min(data, segment_ids, num_segments) # res.shape = (6,1024) # res[0] = 65504(float16的最大值) # res[1] = min(data[0], data[1]) # res[2] = 65504 # res[3] = 65504 # res[4] = data[2] # res[5] = min(data[3], data[4])
te.lang.cce.unsorted_segment_max(tensor, segment_ids, num_segments, init_value=0)
使用数组segment_ids对tensor进行分段求最大值。假设输入为data,输出为output,则output[i] = max(data[j...]),其中“j...”是一个数组,“j...”中的元素j满足:segment_ids[j] == i。
如果某个下标i在segment_ids中没有出现,则output[i] = init_value。比如下图中,1在segment_ids中没有出现,则output[1] = 0。
如果segment_ids中某个值为负数,则对应位置的data中的值则丢弃。比如下图中,segment_ids[3] = -1,则data[3]的值被丢弃,不参与计算。
segment_ids其长度必须和data的第一维的长度相同。num_segments必须大于等于segment_ids的最大值加1。
支持的数据类型:float16、float32、int32。
该接口在segment_compute.py中定义。
参数说明
- tensor:输入tensor,必须是如下数据类型之一:float16、float32、int32。
- segment_ids:一维数组,对输入tensor进行分段的数组,其长度必须和输入tensor的第一维的长度相同。同时支持有序和无序。
- num_segments:输出tensor的第一维的长度。其值必须大于等于segment_ids的最大值加1。
- init_value:当segment_ids中某个下标不存在时,其输出的默认值。根据算子的实现来确定。默认值为0。
返回值
res_tensor:表示计算后的tensor。
调用示例
import tvm import te.lang.cce shape = (5,1024) input_dtype = "float16" data = tvm.placeholder(shape, name="data1",type=input_dtype) segment_ids = [1,1,4,5,5] num_segments = 6 res = te.lang.cce.unsorted_segment_max(data,segment_ids,num_segments) # res.shape = (6,1024) # res[0] = 65504(float16的最大值) # res[1] = max(data[0], data[1]) # res[2] = 65504 # res[3] = 65504 # res[4] = data[2] # res[5] = max(data[3], data[4])
te.lang.cce.concat(raw_tensors, axis)
在指定轴上对输入的多个Tensor进行重新连接。
输入raw_tensors为多个Tensor,数据类型相同。
如果raw_tensors[i].shape = [D0, D1, ... Daxis(i), ...Dn],沿着轴axis连接后的结果的shape为:[D0, D1, ... Raxis, ...Dn]。
其中:Raxis = sum(Daxis(i))。
对输入tensor来说,除了轴axis以外,其他轴的维度要完全一致。
例如:
t1 = [[1, 2, 3], [4, 5, 6]] t2 = [[7, 8, 9], [10, 11, 12]] concat([t1, t2], 0) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] concat([t1, t2], 1) # [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]] # tensor t1的shape为 [2, 3] # tensor t2的shape为 [2, 3] concat([t1, t2], 0).shape # [4, 3] concat([t1, t2], 1).shape # [2, 6]
参数axis也可以为负数,表示从维度的最后开始计算,表示第axis + len(shape)跟轴。
例如:
t1 = [[[1, 2], [2, 3]], [[4, 4], [5, 3]]] t2 = [[[7, 4], [8, 4]], [[2, 10], [15, 11]]] concat([t1, t2], -1)
结果为:
[[[ 1, 2, 7, 4], [ 2, 3, 8, 4]], [[ 4, 4, 2, 10], [ 5, 3, 15, 11]]]
支持的数据类型:int8、uint8、int16、int32、float16、float32。
该接口在concat_compute.py中定义。
参数说明
- raw_tensors:tensor list,list类型,元素为tvm.tensor,且tensor shape的最后一维要32字节对齐。
- axis:做 concat 操作的轴,取值范围:[-d,d-1],其中d是raw_tensor的维数。
返回值
res_tensor:重新连接后的tensor,tvm.tensor类型。
调用示例
import tvm import te.lang.cce shape1 = (64,128) shape1 = (64,128) input_dtype = "float16" data1 = tvm.placeholder(shape1, name="data1", dtype=input_dtype) data2 = tvm.placeholder(shape2, name="data1", dtype=input_dtype) data = [data1, data2] res = te.lang.cce.concat(data, 0) # res.shape = (128,128)
te.lang.cce.conv(*args)
在给定4-D输入和filter的情况下计算2-D卷积。
要求输入Tensor和filter Tensor的格式均为NCHW。
接口可以支持bias,支持的数据类型float16。
该接口在conv_compute.py中定义。
参数说明
- bias场景参数列表为(其中hasBias需要为True):
A, W, B, res_dtype, padh, padw, strideh, stridew, hasBias
- 非bias场景参数列表为(其中hasBias需要为False):
A, W, res_dtype, padh, padw, strideh, stridew, hasBias
其中:- A:输入Tensor,即卷积计算的feature map。
- W:filter Tensor,即卷积计算的卷积核。
- B:bias Tensor,即卷积计算的偏置。
- res_dtype:输出Tensor的数据类型,即卷积计算结果的数据类型。
- padh:padding的高,即卷积计算在feature map的H方向上的填充数。
- padw:padding的宽,即卷积计算在feature map的W方向上的填充数。
- strideh:H方向的步长,即卷积计算filter在feature map的H方向上移动的步长。
- stridew:W方向的步长,即卷积计算filter在feature map的W方向上移动的步长。
- hasBias:是否带bias。
- 约束:假设feature map的shape为(Fn, Fc, Fh, Fw),filter的shape为(Wn, Wc, Wh, Ww),卷积结果的输出shape为(On, Oc, Oh, Ow),padh记为Ph,padw记为Pw,strideh记为Sh,stridew记为Sw,上述各参数之间需满足如下关系:
- Fc = Wc
- On = Fn
- Oc = Wn
- Oh = ((Fh + 2Ph - Wh) / Sh) + 1
- Ow = ((Fw + 2Pw - Ww) / Sw) + 1
返回值
res_tensor:表示卷积计算的tensor,即卷积计算的结果输出。
调用示例
import tvm import te.lang.cce shape_in = (64,64) shape_w = (3,3) in_dtype = "float16" A = tvm.placeholder(shape_in, name='A', dtype=in_dtype) W = tvm.placeholder(shape_w, name='W', dtype=in_dtype) b_shape = (shape_w[0], ) B = tvm.placeholder(b_shape, name='B', dtype=res_dtype) padh = 0 padw = 0 strideh = 1 stridew = 1 res = te.lang.cce.conv(A, W, B, in_dtype, padh, padw, strideh, stridew, True) # res = A * W + B
te.lang.cce.compute_four2five(input, raw_shape_4D)
把给定4-D “NCHW”数据格式转换为5-D “NC1HWC0”数据格式。支持的数据类型:float16。
该接口在dim_conv.py中定义。
参数说明
- input:输入tensor,4-D格式(N, C, H, W),tvm.tensor类型。
- raw_shape_4D:输入tensor的维度。
返回值:
res_tensor:转换为5-D格式(N, C1, H, W, C0)后的tensor,tvm.tensor类型
调用示例
import tvm import te.lang.cce raw_shape = (N,C,H,W) in_dtype = "float16" input = tvm.placeholder(raw_shape, name='input', dtype=in_dtype) res = te.lang.cce.compute_four2five(input, raw_shape) # res.shape = (N,(C+15)//16,H,W,16)
te.lang.cce.compute_five2four(input, raw_shape_4D)
把给定5-D “NC1HWC0”数据格式转换为4-D “NCHW”数据格式。支持的数据类型:float16。
该接口在dim_conv.py中定义。
参数说明
- input:输入tensor,5-D格式(N, C1, H, W, C0),tvm.tensor类型。
- raw_shape_4D:转换后tensor的维度。
返回值
res_tensor:转换为4-D格式(N, C, H, W)后的tensor,tvm.tensor类型。
调用示例
import tvm import te.lang.cce raw_shape = (N,C,H,W) input_shape = (N,(C+15)//16,H,W,16) in_dtype = "float16" input = tvm.placeholder(input_shape, name='input', dtype=in_dtype) res = te.lang.cce.compute_five2four(input, raw_shape) # res.shape = (N,C,H,W)
te.lang.cce.matmul(tensor_a, tensor_b, trans_a=False, trans_b=False, alpha_num=1.0, beta_num=0.0, tensor_c=None)
矩阵乘,计算:tensor_c=alpha_num * trans_a(tensor_a) * trans_b(tensor_b) + beta_num * tensor_c。
tensor_a与tensor_b的shape后两维(经过对应转置)需要满足矩阵乘(M, K) * (K, N) = (M, N),且batch数只支持1。tensor_a数据排布要满足L0A的分形结构,tensor_b要满足L0B的分形结构,mini形态下,数据类型只支持float16。
该接口在mmad_compute.py中定义。
参数说明
- tensor_a:A矩阵,tvm.tensor类型。
- tensor_b:B矩阵,tvm.tensor类型
- trans_a:A矩阵是否转置,bool类型。
- trans_b:B矩阵是否转置,bool类型
- alpha_num : A*B矩阵系数,只支持1.0
- beta_num : C矩阵系数,只支持0.0
- tensor_c : C矩阵,tvm.tensor类型,由于beta_num只支持0.0,此参数为预留扩展接口
返回值
tensor_c:根据关系运算计算后得到的tensor,tvm.tensor类型。
调用示例
import tvm import te.lang.cce a_shape = (1024, 256) b_shape = (256, 512) a_fractal_shape = (a_shape[0] // 16, a_shape[1] // 16, 16, 16) b_fractal_shape = (b_shape[0] // 16, b_shape[1] // 16, 16, 16) in_dtype = "float16" tensor_a = tvm.placeholder(a_fractal_shape, name='tensor_a', dtype=in_dtype) tensor_b = tvm.placeholder(a_fractal_shape, name='tensor_b', dtype=in_dtype) res = te.lang.cce.matmul(tensor_a, tensor_b, False, False)
- te.lang.cce.vadd(lhs, rhs)
- te.lang.cce.vsub(lhs, rhs)
- te.lang.cce.vmul(lhs, rhs)
- te.lang.cce.vmin(lhs, rhs)
- te.lang.cce.vmax(lhs, rhs)
- te.lang.cce.vor(lhs, rhs)
- te.lang.cce.vand(lhs, rhs)
- te.lang.cce.vadds(raw_tensor, scalar)
- te.lang.cce.vmuls(raw_tensor, scalar)
- te.lang.cce.vlog(raw_tensor)
- te.lang.cce.vexp(raw_tensor)
- te.lang.cce.vabs(raw_tensor)
- te.lang.cce.vrec(raw_tensor)
- te.lang.cce.cast_to(data, dtype, f1628IntegerFlag=False)
- te.lang.cce.vrelu(raw_tensor)
- te.lang.cce.vnot(raw_tensor)
- te.lang.cce.vaxpy(lhs, rhs, scalar)
- te.lang.cce.vmla(x, y, z)
- te.lang.cce.vmadd(x, y, z)
- te.lang.cce.vmaddrelu(x, y, z)
- te.lang.cce.ceil(raw_tensor)
- te.lang.cce.floor(raw_tensor)
- te.lang.cce.round(raw_tensor)
- te.lang.cce.sum(raw_tensor, axis, keepdims=False)
- te.lang.cce.reduce_min(raw_tensor, axis, keepdims=False)
- te.lang.cce.reduce_max(raw_tensor, axis, keepdims=False)
- te.lang.cce.reduce_prod(raw_tensor, axis, keepdims=False)
- te.lang.cce.broadcast(var, shape, output_dtype=None)
- te.lang.cce.unsorted_segment_sum(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.unsorted_segment_mean(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.unsorted_segment_prod(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.unsorted_segment_min(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.unsorted_segment_max(tensor, segment_ids, num_segments, init_value=0)
- te.lang.cce.concat(raw_tensors, axis)
- te.lang.cce.conv(*args)
- te.lang.cce.compute_four2five(input, raw_shape_4D)
- te.lang.cce.compute_five2four(input, raw_shape_4D)
- te.lang.cce.matmul(tensor_a, tensor_b, trans_a=False, trans_b=False, alpha_num=1.0, beta_num=0.0, tensor_c=None)