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

通用定义

功能说明

此为仅有一个源操作数时指令的通用格式。注:这不是真正的指令。

函数原型

instruction (mask, dst, src, repeat_times, dst_rep_stride, src_rep_stride)

PIPE: VECTOR

参数说明

表1 参数说明

参数名称

输入/输出

含义

instruction

输入

指令名称,TIK DSL中为全小写字符串。

mask

输入

element操作有效指示,共128bits,每一个bit位用来表示vector的每个元素是否参与操作,bit位的值为1表示参与计算,0表示不参与计算。

支持的模式分为连续、逐bits两种。

  • 连续模式:支持传入单个Scalar或Python立即数,表示前多少连续的elements操作有效。例如mask=16,表示前16个elements参与计算。支持的数据类型为:立即数(int),scalar(int64, int32, int16)。

    取值范围:当dst/src为16位时,mask∈[1, 128];当dst/src为32位时,mask∈[1, 64];当dst/src为64位时,mask∈[1, 32]。

  • 逐bits模式:传入长度为2的scalar list或立即数list[mask_h, mask_l],list中每个元素支持数据类型:Scalar(int64)、立即数(int64)。逐bits表示vector的每个元素是否参与操作,bit位的值为1表示参与计算,0表示不参与。mask_h对应高64个元素操作,mask_l对应低64个元素操作。如mask=[0,8],8=0b1000,表示仅第4个element参与计算。

    取值范围:当dst/src为16位时,mask_h/mask_l∈[0, 2**64-1];当dst/src为32位时,mask_h为0,mask_l∈[0, 2**64-1];当dst/src为64位时,mask_h为0,mask_l∈[0, 2**32-1]。

注:mask应用于每个迭代的源操作数。

dst

输出

目的操作数,tensor起始element,支持数据精度见具体指令。

src

输入

源操作数,tensor起始element,支持数据精度见具体指令。

repeat_times

输入

重复迭代次数。

dst_rep_stride

输入

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

src_rep_stride

输入

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

注意事项

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

    相关文档

    相关产品

关闭导读