更新时间:2021-03-18 GMT+08:00
分享

vec_conv

功能说明

根据src与dst tensor的类型进行精度转换。

函数原型

vec_conv(mask, round_mode, dst, src, repeat_times, dst_rep_stride, src_rep_stride, deqscale=None, ldst_high_half=False)

参数说明

表1 参数说明

参数名称

输入/输出

含义

mask

输入

请参考表1中mask参数描述。

round_mode

输入

在转换过程中,最后一位转换处理模式,支持以下字符串配置:

  • ‘’:无需取整
  • ‘none’:无需取整
  • ‘round’:最近邻偶数(C语言rint);
  • ‘floor’:向下取整(C语言floor);
  • ‘ceil’或‘ceiling’:向上取整(C语言ceil)
  • ‘away-zero’:反向0取整(C语言round)
  • ‘to-zero’:向0取整(C语言trunc)
  • ‘odd’:最近邻奇数取整(Von Neumann rounding)

dst

输出

目的操作数。

src

输入

源操作数。

repeat_times

输入

重复迭代次数。

dst_rep_stride

输入

相邻迭代间,目的操作数相同block地址步长。

src_rep_stride

输入

相邻迭代间,源操作数相同block地址步长。

deqscale

输入

量化scale,辅助转换参数,默认值为None。

支持的数据类型为:Scalar(float16)、立即数(float)。

ldst_high_half

输入

指定dst_list/src_list是存储/来自每个block的高半部或者低半部,默认值为False。

支持bool类型,True/Flase表示高半部/低半部;

注:该参数对于不同组合会分别表现为不同的功能定义,分别表示dst_list/src_list的存储/读取。

昇腾310 AI处理器,不支持该参数。

表2 昇腾310 AI处理器round mode说明

src.dtype

dst.dtype

round_mode supported

deqscale

float16

int32

'round', 'floor', 'ceil', 'ceiling'

None

float16

float32

'', 'none'

None

float32

float16

'', 'none'

None

float16

int8

'', 'none'

None

float16

uint8

'', 'none'

None

int32

float16

'', 'none'

Scalar(float16)/立即数(float)

uint8

float16

'', 'none'

None

int8

float16

'', 'none'

None

返回值

注意事项

  • repeat_times∈[0,255]。支持的数据类型为:Scalar(int16/int32/int64/uint16/uint32/uint64)、立即数(int)、Expr(int16/int32/int64/uint16/uint32/uint64)。当repeat_times为立即数时,不支持0。
  • 每个repeat的并行度取决于数据精度、芯片版本,如f32->f16转换每次迭代操作64个源/目的element。
  • 指令dst_rep_stride/src_rep_stride;单位为32B,支持的数据类型为:Scalar(int16/int32/int64/uint16/uint32/uint64)、立即数(int)、Expr(int16/int32/int64/uint16/uint32/uint64)。
  • dst/src所支持的数据类型与芯片版本有关,如果不支持,工具会报错。
  • dst与src的应为不同tensor,或同一tensor的同一element,不支持同一tensor的不同element。
  • 为了节省地址空间,开发者可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),相关约束如下:
    • 对于单次repeat(repeat_times=1),且源操作数与目的操作数之间要求100%完全重叠,不支持部分重叠。
    • 对于多次repeat(repeat_times>1),若源操作数与目的操作数之间存在依赖,即第N次迭代的目的操作数是第N+1次的源操作数,这种情况是不支持地址重叠的。
  • 操作数地址偏移对齐要求请见通用约束

调用示例

from te import tik
tik_instance = tik.Tik()
src_ub = tik_instance.Tensor("float16", (128,), name="src_ub", scope=tik.scope_ubuf)
dst_ub = tik_instance.Tensor("int32", (128,), name="dst_ub", scope=tik.scope_ubuf)
tik_instance.vec_conv(64, "round", dst_ub, src_ub, 2, 8, 4)
分享:

    相关文档

    相关产品

close