跳转至

TLSU 块头定义

数据搬运块的块头需要定义执行哪种数据搬运操作、输入数据的尺寸和输入输出的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.TLOAD DataTypeBSTART.TSTORE DataTypeBSTART.TMOV DataTypeBSTART.TPREFETCH DataTypeBSTART.MGATHER DataTypeBSTART.MSCATTER DataTypeBSTART.MGATHER.MASK DataTypeBSTART.MSCATTER.MASK DataTypeBSTART.MGATHER.CAS DataTypeBSTART.GMOV 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

其中,TLSU 命名块头共享同一个相邻编码族;function 字段选择具体 TileOp。 旧的泛化文本汇编形式已退役,活动汇编必须使用命名块头。 TPREFETCH 与 TLOAD 相邻编码,是没有目标 Tile 的预取形式。

TLSU 编码族的格式如下:

TLSU 编码族

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

function TileOp 说明
0 TLOAD 从内存加载数据到Tile寄存器中
1 TSTORE 把Tile寄存器数据搬运到内存中
2 TMOV Tile寄存器之间的数据移动/复制,支持存储布局(分形)变换
3 TPREFETCH 与 TLOAD 使用相同地址/尺寸描述,但不写目标 Tile;用于预取
4 MGATHER 将离散的内存空间中的数据聚集到Tile寄存器中。
5 MSCATTER 将Tile寄存器中的数据存储到离散的内存空间。
6 BSTART.MGATHER.MASK 带掩码的离散内存聚集;关闭的元素不产生访存效果
7 BSTART.MSCATTER.MASK 带掩码的离散内存散写;关闭的元素不产生访存效果
8 BSTART.MGATHER.CAS 每个活动元素执行一次原子读-改-写 compare-and-swap
9 TMOV Local-to-Shared insert 使用 B.IOS 和 Local 源 B.IOT
10 TMOV Local-to-Shared publish 使用 B.IOS 和 Local 源 B.IOT
11 TMOV Shared-to-Local broadcast 使用 B.IOS 和 Local 目标 B.IOT
12 TMOV Shared-to-Local extract 使用 B.IOS 和 Local 目标 B.IOT
13 BSTART.GMOV Core4 协同全局内存搬运
14 TSTORE.SPART 使用 B.IOSB.IOR 的 Shared 分区存储
15-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