VGPR¶
向量寄存器称为VGPR(General Purpose Vector Register),用于存储和管理多线程计算的中间结果。
向量寄存器通过 寄存器队列 的方式进行管理,并且采用 相对索引 的方式进行编码。
当前版本,灵犀指令集中定义了4种向量寄存器队列,分别命名为VT、VU、VM、VN,每种队列均包含4个寄存器。
| 队列类型 | 寄存器名称 | 别名 | 说明 |
|---|---|---|---|
| VT寄存器队列 | VTR1-VTR4 | VT#1-VT#4 | 保存T寄存器队列的结果 |
| VU寄存器队列 | VUR1-VUR4 | VU#1-VU#4 | 保存U寄存器队列的结果 |
| VM寄存器队列 | VMR1-VMR4 | VM#1-VM#4 | 保存M寄存器队列的结果 |
| VN寄存器队列 | VNR1-VNR4 | VN#1-VN#4 | 保存N寄存器队列的结果 |
寄存器位宽¶
向量寄存器宽度不固定,可以是64bit(.d),32bit(.w),16bit(.h),8bit(.b)。实际位宽由使用的指令定义。
示例如下:
l.lwi [a3, 8], ->vt.w # 指示指令输出寄存器位宽为32bit(.w)
l.lwi [a1, 8], ->vt.w # 指示指令输出寄存器位宽为32bit(.w)
l.add vt#1.sw, vt#1.sw, ->vt.w
Reuse特性¶
向量寄存器作为指令的输入时,允许带有reuse标记。其语义为:
- 当源寄存器被标记为 reuse 时:该寄存器在当前指令执行完成并提交(commit)后仍需保持可用,硬件不得在此提交点释放该寄存器。
- 当源寄存器未标记为 reuse 时:在当前指令提交时,该寄存器的占用可以被硬件回收(kill/release),后续指令不应再使用该寄存器。
可见性与生命周期:
- 标记为 reuse 仅影响当前指令提交时的寄存器保留行为,确保其值在后续指令中仍可被读取。
- 未标记为 reuse 的源寄存器在当前指令提交后不再保证可读性;任何后续对其的读取均视为非法。
对已被释放的寄存器进行后续读取时,硬件必须产生异常。
示例说明
v.lwi [ri0, 0], ->vt.w ; i0
v.lwi [ri0, 4], ->vt.w ; i1
v.lwi [ri0, 8], ->vt.w ; i2
v.add vt#1.sw, vt#2.reuse.sw, ->vt.w ; i3
在 i3 中,对 vt#2 源操作数使用 .reuse 标记,意味着在 i3 提交后,vt#2 对应的寄存器不得被硬件释放,从而允许后续指令继续读取该寄存器;若未标记 .reuse,则在 i3 提交后该寄存器可被回收,后续读取应触发异常。
reuse 属性仅适用于源寄存器,不影响目的寄存器的分配与释放策略。
访问属性¶
这组寄存器都是可读可写的(RW)。