跳转至

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)。