昇腾社区首页
中文
注册

通用定义

功能说明

此为有两个源操作数时指令的通用格式。

注意,此章节仅为通用格式说明,不是真正的指令。

函数原型

instruction (mask, dst, src0, src1, repeat_times, dst_rep_stride, src0_rep_stride, src1_rep_stride)

参数说明

表1 参数说明

参数名称

输入/输出

含义

instruction

输入

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

mask

输入

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

dst

输出

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

Tensor的scope为Unified Buffer

src0

输入

源操作数0,tensor起始element,支持数据类型见具体指令。

Tensor的scope为Unified Buffer

src1

输入

源操作数1,tensor起始element,支持数据类型见具体指令。

Tensor的scope为Unified Buffer

repeat_times

输入

重复迭代次数。

dst_rep_stride

输入

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

src0_rep_stride

输入

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

src1_rep_stride

输入

相邻迭代间,源操作数1相同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/src0_rep_stride/src1_rep_stride,单位为32B。支持的数据类型:Scalar(int16/int32/int64/uint16/uint32/uint64)、立即数(int)、Expr(int16/int32/int64/uint16/uint32/uint64)。
  • 为了节省地址空间,开发者可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠),相关约束如下:
    • 对于单次repeat(repeat_times=1),且源操作数与目的操作数之间要求100%完全重叠,不支持部分重叠。
    • 对于多次repeat(repeat_times>1),若源操作数与目的操作数之间存在依赖,即第N次迭代的目的操作数是第N+1次的源操作数,这种情况是不支持地址重叠的。以下情况是支持地址重叠的:对于vec_add/vec_sub/vec_mul/vec_max/v_min/vec_and/vec_or指令,当数据类型为float16,int32,float32时,且目的操作数与第二个源操作数重叠;src1_rep_stride/dst_rep_stride相等且为0;src0与src1之间不能有任何的地址重叠。
  • 操作数地址偏移对齐要求请见通用约束