张量指令集
简介
张量指令集是为并行计算和异构计算架构设计的一种指令集合,支持对形状可变的数据块(Tile)进行高效操作。数据块内具有特定的格式,能够处理大规模的并行计算任务,广泛应用于矩阵运算、深度学习、图像处理等领域。
TLSU 类指令
TLSU 类指令用于内存与 Tile 数据搬运,包括加载、存储、复制、预取、聚集和散布。详细定义请见 TLSU 数据搬运块。
| Mode |
Function |
操作 |
说明 |
| 0 |
0 |
TLOAD |
从内存ddr或remote向Tile寄存器拷贝 |
| 0 |
1 |
TSTORE |
从Tile寄存器向内存ddr或remote拷贝 |
| 0 |
2 |
TMOV |
Tile寄存器之间的数据移动/复制,支持存储布局的变换 |
| 0 |
3 |
TPREFETCH |
与 TLOAD 相同的检查和访存足迹,但不更新目标 Tile |
| 0 |
4 |
MGATHER |
将离散的内存空间的数据聚集到Tile寄存器中 |
| 0 |
5 |
MSCATTER |
将Tile寄存器中的数据存储到离散的内存空间 |
| 0 |
6 |
MGATHER.MASK |
带掩码的离散内存聚集 |
| 0 |
7 |
MSCATTER.MASK |
带掩码的离散内存散写 |
| 0 |
8 |
MGATHER.CAS |
每个活动元素执行原子 compare-and-swap |
| 0 |
9-12 |
TMOV |
Local 与 Shared Tile 之间的 insert/publish/broadcast/extract |
| 0 |
13 |
GMOV |
Core4 协同全局内存搬运 |
| 0 |
14 |
TSTORE.SPART |
Shared Tile 分区存储 |
| 0 |
15-31 |
- |
保留/非法 |
CUBE类指令
CUBE类指令主要用于矩阵和向量的乘法运算,包括基本矩阵乘法、带偏置的矩阵乘法、缩放矩阵乘法以及通用矩阵-向量乘法。关于这种块指令的详细介绍请见矩阵数据块。
矩阵乘法操作
保留编码
| Mode |
Function |
操作 |
说明 |
| 0 |
8-15 |
- |
保留;v0.58 不定义 ACCCVT |
矩阵-向量乘法操作
| Mode |
Function |
操作 |
说明 |
| 0 |
16 |
TGEMV |
通用矩阵-向量乘法,结果写到ACC寄存器 |
| 0 |
17 |
TGEMV.BIAS |
通用矩阵-向量乘法,带偏置加法,结果写到ACC寄存器 |
| 0 |
18 |
TGEMV.ACC |
通用矩阵-向量乘法,结果累加到ACC寄存器 |
| 0 |
19 |
- |
保留 |
| 0 |
20 |
TGEMVMX |
通用缩放矩阵-向量乘法,结果写到ACC寄存器 |
| 0 |
21 |
TGEMVMX.BIAS |
通用缩放矩阵-向量乘法,带偏置加法,结果写到ACC寄存器 |
| 0 |
22 |
TGEMVMX.ACC |
通用缩放矩阵-向量乘法,结果累加到ACC寄存器 |
| 0 |
23-31 |
- |
保留 |
TEPL 编码载体:VEC 与 SFU
TEPL 是保持不变的 Mode/Function 编码载体,不是执行单元。目录将每条 TEPL 编码操作精确分配给 VEC 或 SFU:VEC 只做逐元素运算,SFU 执行复杂函数、归约/展开、重排和不规则运算。详细定义请见 TEPL 编码载体。
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 |
- |
保留/非法 |
| 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-25 |
- |
保留/非法 |
| 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 |
- |
保留/非法 |
| 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 |
- |
保留/非法 |
| 1 |
15-23 |
- |
预留编码 |
| 1 |
24-25 |
- |
保留/非法 |
| 1 |
26 |
SELS |
使用掩码Tile在源Tile和标量之间进行选择(源Tile逐元素选择) |
| 1 |
27 |
TEXPANDS |
将标量广播到目标Tile中 |
| 1 |
28-31 |
- |
预留编码 |
按轴归约/广播操作
复杂操作
| Mode |
Function |
操作 |
说明 |
| 3 |
0-7 |
- |
预留编码 |
| 3 |
8 |
THISTOGRAM |
累积直方图统计指令 |
| 3 |
9-29 |
- |
预留编码 |
| 3 |
30 |
ESAVE |
异常保存块,用于保存发生异常的Tile块的块内状态 |
| 3 |
31 |
ERCOV |
异常恢复块,用于恢复发生异常的Tile块的块内状态 |