跳转至

块头定义

模版数据块的块头需要定义执行哪种数据运算操作、输入数据的尺寸和输入输出的Tile寄存器等信息。

汇编格式

TileOp <LB0:arg0, LB1:arg1, LB2:arg2, DataType>, SrcTile0<.reuse>, ..., SrcTile7<.reuse>, [BGetList],  
                                               ->DstTile0<TileSize0>, ..., DstTile3<TileSize3>, [BSetList]

各参数说明如下:

参数 说明 是否可选
TileOp 指定数据搬运的具体操作,可选:TADD, TANDS等
LB0 输入数据的行或列参数,具体见特定指令介绍。可以通过arg0(全局寄存器立即数全局寄存器加立即数)参数设置。 是,默认为1
LB1 输入数据的行或列参数,具体见特定指令介绍。可以通过arg1(全局寄存器立即数全局寄存器加立即数)参数设置。 是,默认为1
LB2 输入数据的行或列参数,具体见特定指令介绍。可以通过arg2(全局寄存器立即数全局寄存器加立即数)参数设置。 是,默认为1
DataType 输入元素的数据格式,包括FP32, FP16, S16等
SrcTile0, ..., SrcTile7 分别指示最多8个输入的Tile寄存器。
reuse 当本指令执行结束后相应的输入Tile寄存器不允许被释放则需要增加该标识。如无此标识,则表示允许硬件释放本寄存器。
DstTile0, ..., DstTile3 分别指示最多4个输出Tile寄存器类型 可选T, U, M, N。
TileSize0, ..., TileSize3 分别指示每个输出Tile寄存器的空间大小,可以通过一个 立即数或者全局寄存器传参。 取决于DstTile
[BGetList] 全局寄存器GGPR输入列表。
[BSetList] 全局寄存器GGPR输出列表。

编码方式

一条完整数据搬运块指令块头需要拆分成以下多条指令进行编码,其中包括:

  • BSTART.TEPL TileOp, DataType
  • B.DATR Layout, PadValue
  • B.DIM reg, imm, ->LB0
  • B.DIM reg, imm, ->LB1
  • B.DIM reg, imm, ->LB2
  • B.IOT SrcTile0<.reuse>, SrcTile1<.reuse>, ->DstTile0<TileSize0>
  • ...
  • B.IOT SrcTile6<.reuse>, SrcTile7<.reuse>, last, ->DstTile3<TileSize3>
  • B.IOR RegSrc0, RegSrc1, RegSrc2, ->RegDst0
  • ...
  • B.IOR RegSrc9, RegSrc10, RegSrc11, ->RegDst4
  • B.IOD DepSrc0, DepSrc1, DepSrc2, ->DepDst

其中,BSTART.TEPL指令的编码格式如下:

BSTART.TEPL

其中,mode和function字段用于编码具体的TileOp信息。编码方式如下:

Tile-Tile逐元素操作

Mode Function 操作 说明
0 0 TADD 两个Tile的逐元素加法
0 1 TSUB 两个Tile的逐元素减法
0 2 TMUL 两个Tile的逐元素乘法
0 3 TDIV 两个Tile的逐元素除法
0 4 TREM 两个Tile的逐元素余数,余数符号与除数相同
0 5 TFMOD 两个Tile的逐元素余数,余数符号与被除数相同
0 6 TAND 两个Tile的逐元素按位与
0 7 TOR 两个Tile的逐元素按位或
0 8 TXOR 两个Tile的逐元素按位异或
0 9 TSHL 两个Tile的逐元素左移
0 10 TSHR 两个Tile的逐元素右移
0 11 TMAX 两个Tile的逐元素最大值
0 12 TMIN 两个Tile的逐元素最小值
0 13 TCMP 比较两个Tile并写入一个打包的谓词掩码
0 14 TPRELU 带逐元素斜率Tile的逐元素参数化ReLU
0 15 TABS Tile的逐元素绝对值
0 16 TNOT Tile的逐元素按位取反
0 17 TNEG Tile的逐元素取负
0 18 TEXP 逐元素指数运算
0 19 TLOG Tile的逐元素自然对数
0 20 TRECIP Tile的逐元素倒数
0 21 TSQRT 逐元素平方根
0 22 TRSQRT 逐元素倒数平方根
0 23 TRELU Tile的逐元素ReLU
0 24 TADDC 三元逐元素加法:dst = src0 + src1 + src2
0 25 TSUBC 三元逐元素减法:dst = src0 - src1 + src2
0 26 TSEL 使用掩码Tile在两个Tile之间进行选择(逐元素选择)
0 27 TCVT Tile的逐元素数据格式转换。
0 28-31 - 保留

Tile逐元素和标量操作

Mode Function 操作 说明
1 0 TADDS Tile与标量的逐元素加法
1 1 TSUBS 从Tile中逐元素减去一个标量
1 2 TMULS Tile与标量的逐元素乘法
1 3 TDIVS 与标量的逐元素除法(Tile/标量或标量/Tile)
1 4 TREMS 与标量的逐元素余数:remainder(src, scalar)
1 5 TFMODS 与标量的逐元素余数:fmod(src, scalar)
1 6 TANDS Tile与标量的逐元素按位与
1 7 TORS Tile与标量的逐元素按位或
1 8 TXORS Tile与标量的逐元素按位异或
1 9 TSHLS Tile按标量逐元素左移
1 10 TSHRS Tile按标量逐元素右移
1 11 TMAXS Tile与标量的逐元素最大值:max(src, scalar)
1 12 TMINS Tile与标量的逐元素最小值
1 13 TCMPS 将Tile与标量逐元素比较
1 14 TLRELU 带标量斜率的LeakyReLU
1 15-23 - 预留编码
1 24 TADDSC 带标量融合逐元素加法运算:dst = src0 + scalar + src1
1 25 TSUBSC 带标量融合逐元素减法运算:dst = src0 - scalar + src1
1 26 SELS 使用掩码Tile在源Tile和标量之间进行选择(源Tile逐元素选择)
1 27 TEXPANDS 将标量广播到目标Tile中
1 28-31 - 预留编码

按轴归约/广播操作

Mode Function 操作 说明
2 0 TROWSUM 通过对列求和来归约每一行
2 1 TROWMAX 通过取列间最大值来归约每一行
2 2 TROWMIN 通过取列间最小值来归约每一行
2 3 TROWPROD 通过跨列乘积来归约每一行
2 4 TROWEXPAND 将每个源行的第一个元素广播到目标行中
2 5 TROWEXPANDADD 行广播加法:加上一个每行标量向量
2 6 TROWEXPANDSUB 行广播减法:从src0的每一行中减去一个每行标量向量src1
2 7 TROWEXPANDMUL 行广播乘法:将src0的每一行乘以一个每行标量向量src1
2 8 TROWEXPANDDIV 行广播除法:将src0的每一行除以一个每行标量向量src1
2 9 TROWEXPANDMAX 行广播最大值:与每行标量向量取最大值
2 10 TROWEXPANDMIN 行广播最小值:与每行标量向量取最小值
2 11 TROWEXPANDEXPDIF 行指数差运算:计算exp(src0 - src1),其中src1为每行标量
2 12-15 - 预留编码
2 16 TCOLSUM 通过对行求和来归约每一列
2 17 TCOLMAX 通过取行间最大值来归约每一列
2 18 TCOLMIN 通过取行间最小值来归约每一列
2 19 TCOLPROD 通过跨行乘积来归约每一列
2 20 TCOLEXPAND 将每个源列的第一个元素广播到目标列
2 21 TCOLEXPANDADD 列广播加法:加上一个每列标量向量
2 22 TCOLEXPANDSUB 列广播减法:从src0的每一列中减去一个每列标量向量src1
2 23 TCOLEXPANDMUL 列广播乘法:将src0的每一列乘以一个每列标量向量src1
2 24 TCOLEXPANDDIV 列广播除法:将src0的每一列除以一个每列标量向量src1
2 25 TCOLEXPANDMAX 列广播最大值:与每列标量向量取最大值
2 26 TCOLEXPANDMIN 列广播最小值:与每列标量向量取最小值
2 27 TCOLEXPANDEXPDIF 列指数差运算:计算exp(src0 - src1),其中src1为每列标量
2 28-31 - 预留编码

复杂操作

Mode Function 操作 说明
3 0-7 - 预留编码
3 8 THISTOGRAM 累积直方图统计指令
3 9-29 - 预留编码
3 30 ESAVE 异常保存块,用于保存发生异常的Tile块的块内状态
3 31 ERCOV 异常恢复块,用于恢复发生异常的Tile块的块内状态

DataType字段编码方式如下:

编码 DataType 编码 DataType 编码 DataType 编码 Data
0 FP64 8 e5m2 16 S64 24 U64
1 FP32 9 e3m2 17 S32 25 U32
2 TF32 10 e2m3 18 S16 26 U16
3 HF32 11 e2m1x2 19 S8 27 U8
4 FP16 12 e1m2x2 20 S4x2 28 U4x2
5 BF16 13 e8m0 21 reserve 29 reserve
6 HiF8 14 HiF4x2 22 reserve 30 reserve
7 e4m3 15 reserve 23 reserve 31 invalid