跳转至

块头定义

数据搬运块的块头需要定义执行哪种数据搬运操作、输入数据的尺寸和输入输出的Tile寄存器等信息。数据搬运过程中同时支持改变存储布局。

汇编格式

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

各参数说明如下:

参数 说明 是否可选
TileOp 指定数据搬运的具体操作,可选:TLOAD, TSTORE等
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输出列表。
DepSrc0, DepSrc1, DepSrc2 表示本块指令最多显式记录 3 个前序 D 依赖槽位。
DepDst 表示本块指令对后序引用该标识的块指令的屏障。

编码方式

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

  • BSTART.TMA 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.TMA指令的编码格式如下:

BSTART.TMA

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

function TileOp 说明
0 TLOAD 从内存加载数据到Tile寄存器中
1 TSTORE 把Tile寄存器数据搬运到内存中
2 TMOV Tile寄存器之间的数据移动/复制,支持存储布局(分形)变换
3 - 保留
4 MGATHER 将离散的内存空间中的数据聚集到Tile寄存器中。
5 MSCATTER 将Tile寄存器中的数据存储到离散的内存空间。
6 MGATHER.MASK 带掩码的内存聚集,仅当 MaskTile 中对应标志位为 1 时才执行聚集。
7 MSCATTER.MASK 带掩码的内存分散,仅当 MaskTile 中对应标志位为 1 时才执行分散。
8-31 暂时保留

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