通用定义

功能说明

此为有两个源操作数时指令的通用格式,两个源操作数为src和标量scalar。

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

函数原型

instruction (mask, dst, src, scalar, repeat_times, dst_rep_stride, src_rep_stride, mask_mode="normal")

参数说明

表1 参数说明

参数名称

输入/输出

含义

instruction

输入

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

mask

输入

根据mask_mode,分为两种模式:

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

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

    • 连续模式:

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

      mask∈[1, 8*block_size//dtype_size],其中dtype_size为dst/src的元素大小。

      比如,block_size为32Bytes时的取值范围:当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参与计算。

      block_size为32Bytes时的取值范围:当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]。

  • counter_mode:支持传输数据类型Scalar(int64, int32, int16), 立即数(int),表示指令中实际操作的有效源操作数元素数量。在该模式下,指令的迭代次数由源操作矢量与mask值共同决定,入参repeat_times无效,取值范围[1, 2**32 – 1]。

Atlas 200/300/500 推理产品,按照normal mode处理。

Atlas 训练系列产品,按照normal mode处理。

dst

输出

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

Tensor的scope为Unified Buffer

src

输入

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

Tensor的scope为Unified Buffer

scalar

输入

标量源操作数,支持Scalar/立即数。

repeat_times

输入

重复迭代次数。

dst_rep_stride

输入

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

src_rep_stride

输入

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

mask_mode

输入

mask模式选择参数,支持的数据类型:string,取值:

  • normal:mask为normal mode
  • counter:mask为counter mode

Atlas 200/300/500 推理产品,该参数不生效。

Atlas 训练系列产品,该参数不生效。

注意事项

调用示例