跳转至

TCMP

说明

数据块比较(Tile Compare)

TCMP 对两个输入 Tile 逐元素比较,得到的谓词掩码写入输出 Tile 中。

实现伪代码示意如下:

// 逐元素比较操作
for r in 0..(Rv-1):           // 遍历所有行
  for c in 0..(Cv-1):       // 遍历所有列
    dst[r, c] = src0[r, c] cmpMode src1[r, c]  // 对应位置元素比较

实现示意图如下:

TCMP


汇编语法

    TCMP.CmpMode <LB0:ValidCol, LB1:ValidRow, LB2:Col, DataType, PadValue>, SrcTile0<.reuse>, SrcTile1<.reuse>, ->DstTile<Size>

汇编符号

  • CmpMode:比较模式,可选EQNELTGE
  • ValidCol:输入Tile中有效元素的列数。该参数可以通过以下3种形式配置到LB0寄存器中:
    • reg:通过全局寄存器GGPR设置。
    • imm: 使用立即数设置。
    • reg+imm:通过全局寄存器加立即数的形式设置。
  • ValidRow:输入Tile中有效元素的行数(可缺省,默认值:1)。该参数配置到LB1寄存器中,配置方式同上。
  • Col:输入Tile的总列数(可缺省,默认值:等于ValidCol)。该参数配置到LB2寄存器中,配置方式同上。
  • Row:输入Tile的总行数,通过公式计算:Row = SrcTileSize / (Col × sizeof(DataType))
  • DataType:输入Tile元素的数据格式,支持类型见下表。
  • PadValue:输出Tile无效区域的填充值,可选:NullZeroMaxMin(可缺省,默认值:Null)。
  • SrcTile0/SrcTile1:输入Tile寄存器,支持T/U/M/N队列输入(参见:Tile寄存器)。
  • reuse(后缀):指示当前指令提交后保留寄存器(若无此标识,允许硬件自动释放)。
  • DstTile:输出Tile寄存器,支持T/U/M/N队列输出。
  • Size:输出Tile寄存器的空间大小(有效范围参见:Tile寄存器)。

本指令支持数据类型(DataType)如下表所示:

数据位宽 类型列表
b64 S64, U64, FP64
b32 S32, U32, FP32, TF32, HF32
b16 S16, U16, FP16, BF16
b8 S8, U8, FP8(E4M3, E5M2)

编码格式

该TileOp模版块编码为以下指令:

  • BSTART.TEPL TCMP, DataType
  • B.DATR PadValue, CmpMode
  • B.DIM reg, imm, ->LB0 (注:ValidCol
  • B.DIM reg, imm, ->LB1 (注:ValidRow
  • B.DIM reg, imm, ->LB2 (注:Col
  • B.IOT SrcTile0<.reuse>, SrcTile1<.reuse>, last, ->DstTile<Size>

约束条件

  • 两个输入Tile的以下参数必须一致,否则硬件不保证结果正确性:
    • SrcTile0::Row == SrcTile1::Row, SrcTile0::Col == SrcTile1::Col
    • SrcTile0::ValidRow == SrcTile1::ValidRow, SrcTile0::ValidCol == SrcTile1::ValidCol
    • SrcTile0::DataType == SrcTile1::DataType
  • 尺寸范围
    • 输入Tile的行列/有效行列等参数大小均必须小于等于16bit。
    • 有效边界:ValidRow <= Row, ValidCol <= Col
  • 数据布局:必须是行主序(RowMajor)。

汇编示例

    TCMP.EQ <LB0:32, LB1:16, LB2:36, fp8>, T#1, T#2.reuse, ->M<1KB>
1. 操作内容
- 输入:T#1T#2 Tile寄存器 - 输出:结果存入新的 M 队列Tile寄存器 2. 比较模式:相等比较。 3. 数据处理范围
- 只处理前 32列(由 LB0:32 指定),总列数为 40LB2:40) - 有效行数为 16列LB1:16
4. 数据格式
- 使用 16位浮点数fp16)格式处理数据
- 每个元素占2字节(影响内存布局计算) 5. 寄存器管理
- 输入寄存器 T#2 添加了.reuse标记,表示**执行后保留该寄存器** - 输入寄存器T#1**执行后自动释放**(无reuse标记) - 输出寄存器分配1KB空间(足够存储计算结果) 6. **特殊处理** - 区域中**超出有效范围的部分**不初始化(PadValue缺省) - 输出寄存器由硬件自动分配(->M` 未指定具体寄存器号)


特殊说明

TCMP指令的输出是一组谓词掩码(Mask),即两个输入Tile中每一对元素比较后得到结果 01,连续的8次比较结果存储在一个字节内。如下图所示:

TCMP

备注

此指令是TileOp模版块,软件只定义块头。