跳转至

Cube 与 Fixpipe 指令

每个条目给出完整 32 位固定/可变布局、c220 后端实际接受的文本形式、立即数约束和架构周期模型。 没有“c220 汇编器接受”标记的条目不能把目录占位符直接复制进源码。

目录速览

ID 解码名 助记符 格式 作用 状态
228 MMAD MMAD C-MMAD 矩阵乘加:L0A×L0B 累加到 L0C;形状/累加控制由 Xs 打包。 c220 汇编器接受
229 MMAD_SP MMAD_SP C-MMAD 稀疏矩阵乘加;额外稀疏元数据语义由配置寄存器决定。 c220 汇编器接受
230 MOV_SRC_TO_FB MOV_SRC_TO_FB X-FIX 把源缓冲搬到 Fixpipe FB;仅用于识别内部编码。 仅机器格式;无 c220 公共语法
231 FIX_L0C_TO_DST FIX_L0C_TO_DST X-FIX 通过 Fixpipe 把 L0C 结果定点化/转换并写到目标;仅用于识别内部编码。 仅机器格式;无 c220 公共语法

逐指令说明

ID 228 — MMAD

项目 内容
指令域/执行位置 cube / Cube(pipe 2)
格式类 C-MMAD
参数角色 dst=L0C;src0=L0A;src1=L0B;Xs=shape 与控制
作用 矩阵乘加:L0A×L0B 累加到 L0C;形状/累加控制由 Xs 打包。
文本语法状态 c220 汇编器接受

32 位编码布局

  • 位 31→0 模式:111.000.........................0/1 为固定值,. 为该解码项的可变位)。
  • 完整分段:[31:29]=111(fixed); [28]=cube mode; [27:25]=000(fixed); [24:22]=dtype/mode; [21:17]=L0C dst; [16:12]=L0A src; [11:7]=L0B src; [6:2]=shape Xs; [1:0]=mode
  • 解码条件:(word & 0xee000000) == 0xe0000000

X 寄存器操作数位域

下表通过逐个改变该 X 操作数的 5 个编号位得到;word bits 是机器字中的精确承载位。

操作数序号 样例 token 编码掩码 word bits 输入位→机器位
0 X0 0x003e0000 17,18,19,20,21 r0->word[17]; r1->word[18]; r2->word[19]; r3->word[20]; r4->word[21]
1 X1 0x0001f000 12,13,14,15,16 r0->word[12]; r1->word[13]; r2->word[14]; r3->word[15]; r4->word[16]
2 X2 0x00000f80 7,8,9,10,11 r0->word[7]; r1->word[8]; r2->word[9]; r3->word[10]; r4->word[11]
3 X3 0x0000007c 2,3,4,5,6 r0->word[2]; r1->word[3]; r2->word[4]; r3->word[5]; r4->word[6]

c220 接受的后缀与操作数组合

CPU 后缀 操作数形状 可复制语法 编码
dav-c220-cube bf162f32 [Xn], [Xn], [Xn], Xn MMAD.bf162f32 [X0], [X1], [X2], X3 0xf040110d
dav-c220-cube f162f32 [Xn], [Xn], [Xn], Xn MMAD.f162f32 [X0], [X1], [X2], X3 0xf0c0110c
dav-c220-cube f322f32 [Xn], [Xn], [Xn], Xn MMAD.f322f32 [X0], [X1], [X2], X3 0xf080110d
dav-c220-cube s4 [Xn], [Xn], [Xn], Xn MMAD.s4 [X0], [X1], [X2], X3 0xf180110c
dav-c220-cube s8 [Xn], [Xn], [Xn], Xn MMAD.s8 [X0], [X1], [X2], X3 0xf040110c
dav-c220-cube tf322f32 [Xn], [Xn], [Xn], Xn MMAD.tf322f32 [X0], [X1], [X2], X3 0xf0c0110d

汇编器级最小示例:

.text
.a64
MMAD.bf162f32 [X0], [X1], [X2], X3

周期与冲突

项目 架构周期模型
路径 CCU Cube issue→get_mmad_iter→CubeUop queue→FSM→L0A/L0B read→PE/systolic stages→L0C accumulate/write→unit flag→retire
延迟/公式 \(U=G\!\cdot\!\left\lceil\frac{M}{P}\right\rceil\!\cdot\!\left\lceil\frac{N}{P}\right\rceil\!\cdot\!R_k,\quad T=F(N_{\mathrm{cube\,stage}})+\operatorname{schedule}(U,\mathrm{FSM},\mathrm{NPE})+S_{\mathrm{L0A/L0B/L0C}}+T_{\mathrm{retire}}\)
发射间隔 由 cube_uop_iss_que、FSM、NPE/PE 组和 L0 端口决定
uop 展开 P=cube_pe_num,G=P²/cube_spec_npe;Rk=ceil(K/4P)@class0,ceil(K/2P)@class⅔/23/24,ceil(K/(P/2))@class27,其余 ceil(K/P):L0A/L0B 请求、bank/port 与 unit flag 动态决定/由 cube_stage_num、fsm_ver、cube_spec_npe、U 和数据类共同决定/L0C 请求/累加/端口仲裁与 unit flag 动态决定
退休 全部 CubeUop 完成,L0C/unit flag 条件满足并进入 cube_retire_q
动态停顿 Cube queue/FSM、L0A/L0B 数据未就绪、L0C 端口、unit flag、前序 MMAD 相关

这些数值是架构周期模型,不是 910B 芯片的实测吞吐率。设备结果状态:待目标设备执行。 数值异常、掩码、描述字和访存副作用分别见数值语义MASK/VA 与访存配置字

ID 229 — MMAD_SP

项目 内容
指令域/执行位置 cube / Cube(pipe 2)
格式类 C-MMAD
参数角色 dst=L0C;src0=L0A;src1=L0B;Xs=shape 与控制
作用 稀疏矩阵乘加;额外稀疏元数据语义由配置寄存器决定。
文本语法状态 c220 汇编器接受

32 位编码布局

  • 位 31→0 模式:111.101.........................0/1 为固定值,. 为该解码项的可变位)。
  • 完整分段:[31:29]=111(fixed); [28]=cube mode; [27:25]=101(fixed); [24:22]=dtype/mode; [21:17]=L0C dst; [16:12]=L0A src; [11:7]=L0B src; [6:2]=shape Xs; [1:0]=mode
  • 解码条件:(word & 0xee000000) == 0xea000000

X 寄存器操作数位域

下表通过逐个改变该 X 操作数的 5 个编号位得到;word bits 是机器字中的精确承载位。

操作数序号 样例 token 编码掩码 word bits 输入位→机器位
0 X0 0x003e0000 17,18,19,20,21 r0->word[17]; r1->word[18]; r2->word[19]; r3->word[20]; r4->word[21]
1 X1 0x0001f000 12,13,14,15,16 r0->word[12]; r1->word[13]; r2->word[14]; r3->word[15]; r4->word[16]
2 X2 0x00000f80 7,8,9,10,11 r0->word[7]; r1->word[8]; r2->word[9]; r3->word[10]; r4->word[11]
3 X3 0x0000007c 2,3,4,5,6 r0->word[2]; r1->word[3]; r2->word[4]; r3->word[5]; r4->word[6]

c220 接受的后缀与操作数组合

CPU 后缀 操作数形状 可复制语法 编码
dav-c220-cube s8 [Xn], [Xn], [Xn], Xn MMAD_SP.s8 [X0], [X1], [X2], X3 0xfa40110c

汇编器级最小示例:

.text
.a64
MMAD_SP.s8 [X0], [X1], [X2], X3

周期与冲突

项目 架构周期模型
路径 CCU Cube issue→get_mmad_iter→CubeUop queue→FSM→L0A/L0B read→PE/systolic stages→L0C accumulate/write→unit flag→retire
延迟/公式 \(U=G\!\cdot\!\left\lceil\frac{M}{P}\right\rceil\!\cdot\!\left\lceil\frac{N}{P}\right\rceil\!\cdot\!R_k,\quad T=F(N_{\mathrm{cube\,stage}})+\operatorname{schedule}(U,\mathrm{FSM},\mathrm{NPE})+S_{\mathrm{L0A/L0B/L0C}}+T_{\mathrm{retire}}\)
发射间隔 由 cube_uop_iss_que、FSM、NPE/PE 组和 L0 端口决定
uop 展开 P=cube_pe_num,G=P²/cube_spec_npe;Rk=ceil(K/4P)@class0,ceil(K/2P)@class⅔/23/24,ceil(K/(P/2))@class27,其余 ceil(K/P):L0A/L0B 请求、bank/port 与 unit flag 动态决定;另含稀疏元数据/由 cube_stage_num、fsm_ver、cube_spec_npe、U 和数据类共同决定/L0C 请求/累加/端口仲裁与 unit flag 动态决定
退休 全部 CubeUop 完成,L0C/unit flag 条件满足并进入 cube_retire_q
动态停顿 Cube queue/FSM、L0A/L0B 数据未就绪、L0C 端口、unit flag、前序 MMAD 相关、稀疏索引/元数据

这些数值是架构周期模型,不是 910B 芯片的实测吞吐率。设备结果状态:待目标设备执行。 数值异常、掩码、描述字和访存副作用分别见数值语义MASK/VA 与访存配置字

ID 230 — MOV_SRC_TO_FB

项目 内容
指令域/执行位置 fixpipe / Fixpipe(pipe 10)
格式类 X-FIX
参数角色 L0C 源、目标、转换和搬出控制;无 c220 公共文本形式
作用 把源缓冲搬到 Fixpipe FB;仅用于识别内部编码。
文本语法状态 仅机器格式;无 c220 公共语法

32 位编码布局

  • 位 31→0 模式:11000000........................0/1 为固定值,. 为该解码项的可变位)。
  • 完整分段:[31:24]=11000000(fixed); [23:22]=route/mode; [21:17]=dst; [16:12]=src; [11:7]=descriptor; [6:0]=conversion/control
  • 解码条件:(word & 0xff000000) == 0xc0000000

公共文本形式

当前 c220 后端没有接受该目录项的完整文本形式。OP<dtype><mode> 等占位符不是汇编语法;目录样例字只用于机器格式识别,不能作为可运行内核。

周期与冲突

项目 架构周期模型
路径 CCU Fixpipe issue→Fixpipe command→源接口读取→FB 写入→退休
延迟/公式 \(T=\max_{i}\!\left(t_{\mathrm{read},i}+\left\lceil\frac{\mathrm{bytes}_{i}}{B_{\mathrm{L0C\,read}}}\right\rceil+T_{\mathrm{convert},i}+\left\lceil\frac{\mathrm{out}_{i}}{B_{\mathrm{dst}}}\right\rceil+L_{\mathrm{rsp},i}\right)+S\)
发射间隔 受 fixp FIFO、read/write queue、write_otsd 和目标接口限制
uop 展开 按源块、FB 目标块和接口粒度展开读/写 uop:MTE.l0c_read_bandwidth 或所选源接口带宽/转换/量化/布局模式动态决定/目标 L1/UB/BIU/FB 接口和 outstanding 动态决定
退休 最后写 uop/ACK 完成,所有临时转换数据排空
动态停顿 L0C unit flag/端口、Fixpipe FIFO、nz2nd trans buffer、store buffer、write outstanding、目标回压

这些数值是架构周期模型,不是 910B 芯片的实测吞吐率。设备结果状态:待目标设备执行。 数值异常、掩码、描述字和访存副作用分别见数值语义MASK/VA 与访存配置字

ID 231 — FIX_L0C_TO_DST

项目 内容
指令域/执行位置 fixpipe / Fixpipe(pipe 10)
格式类 X-FIX
参数角色 L0C 源、目标、转换和搬出控制;无 c220 公共文本形式
作用 通过 Fixpipe 把 L0C 结果定点化/转换并写到目标;仅用于识别内部编码。
文本语法状态 仅机器格式;无 c220 公共语法

32 位编码布局

  • 位 31→0 模式:1100001.........................0/1 为固定值,. 为该解码项的可变位)。
  • 完整分段:[31:25]=1100001(fixed); [24:22]=route/mode; [21:17]=dst; [16:12]=src; [11:7]=descriptor; [6:0]=conversion/control
  • 解码条件:(word & 0xfe000000) == 0xc2000000

公共文本形式

当前 c220 后端没有接受该目录项的完整文本形式。OP<dtype><mode> 等占位符不是汇编语法;目录样例字只用于机器格式识别,不能作为可运行内核。

周期与冲突

项目 架构周期模型
路径 CCU Fixpipe issue→L0C read→转换/量化/NZ2ND→L1/UB/OUT 写出→退休
延迟/公式 \(T=\max_{i}\!\left(t_{\mathrm{read},i}+\left\lceil\frac{\mathrm{bytes}_{i}}{B_{\mathrm{L0C\,read}}}\right\rceil+T_{\mathrm{convert},i}+\left\lceil\frac{\mathrm{out}_{i}}{B_{\mathrm{dst}}}\right\rceil+L_{\mathrm{rsp},i}\right)+S\)
发射间隔 受 fixp FIFO、read/write queue、write_otsd 和目标接口限制
uop 展开 普通模式按 L0C slice/目标块展开;NZ2ND 按转换 tile、临时缓存和写出块继续拆分:MTE.l0c_read_bandwidth 或所选源接口带宽/转换/量化/布局模式动态决定/目标 L1/UB/BIU/FB 接口和 outstanding 动态决定
退休 最后写 uop/ACK 完成,所有临时转换数据排空
动态停顿 L0C unit flag/端口、Fixpipe FIFO、nz2nd trans buffer、store buffer、write outstanding、目标回压

这些数值是架构周期模型,不是 910B 芯片的实测吞吐率。设备结果状态:待目标设备执行。 数值异常、掩码、描述字和访存副作用分别见数值语义MASK/VA 与访存配置字