RISC-V向量化扩展1.0手册阅读笔记


2. 实现中定义的常量参数

hart是什么意思?

每个hart支持定义了两个参数的向量扩展:

  1. $ELEN≥8$,且ELEN必须是2的指数。

ELEN:(任意操作可produce和consume的)向量元素的最大bit size。

  1. $ELEN≤VLEN≤2^{16}$,且VLEN必须是2的指数,

VLEN:单个向量寄存器中的bit数

在未来的扩展中可能ELEN>VLEN,因为一个元素可以使用来自多个向量寄存器的bit。

VLEN的上限允许软件知道索引满足16位。

向量化扩展支持编写二进制代码,在某些约束条件下,这些代码将在具有不同VLEN或ELEN值的harts上移植执行,前提是harts支持所需的元素类型和指令。

3. 向量化扩展编程模型

向量化扩展增加了32个向量寄存器和7个非特权的CSR到一个基准的RISC-V ISA中。

新的向量CSR

四个地址在0x00B-0x00E的CSR暂时为未来的向量CSR保留,其中一些可能被镜像到vcsr。

3.1 向量寄存器

向量扩展将32个结构向量寄存器v0-v31添加到基准的RISC-V ISA,每个向量寄存器都有一个Š固定的VLEN位状态。

3.2 mstatus中的向量上下文状态

向量上下文状态域VS(vector context status)已经被加入到mstatus[10:9],并且被隐藏(shadow)在sstatus[10:9]。它类似于浮点的上下文状态域FS。

为了执行任何向量指令或访问向量CSR,需要在mstatus.VS设置为Off时引发非法指令异常。

当mstatus.VS被设置为初始值(Initial)或者被清除(Clean)时,执行任何会更改向量状态(包括向量CSR)的指令,都会将mstatus.VS置为脏(Dirty)。即使向量状态没有被改变,一些实现也可能会将mstatus.VS从Initial或Clean更改为Dirty。

准确设置mstatus.VS是一种优化措施。软件通常会使用VS来减少上下文切换(context-swap)的开销。

如果mstatus.VS是Dirty,那么mstatus.SD就是1;否则,按照现有的规格设置mstatus.SD。

一些实现中可能有一个可写的misa.V域。类似于浮点单元的处理方式,即使misa.V被清除了,mstatus.VS仍可能存在。

当misa.V被清除时允许mstatus.VS存在,能支持向量模拟并简化在具有可写misa.V的系统中对mstatus.VS的处理。

3.3 vsstatus中的向量上下文状态

当hypervisor出现时,向量上下文状态Š域VS被添加到vsstatus[10:9]中。它类似于浮点上下文状态Š域FS。

当V=1且vsstatus.VS和mstatus.VS生效时,尝试去执行任何向量指令或者访问向量CSR,若vsstatus.VS或mstatus.VS被设置成了Off,会引发非法指令异常。

当V=1且vsstatus.VS和mstatus.VS都没被设置成Off,执行任何会更改向量状态(包括向量CSR)的指令,都会将mstatus.VS和vsstatus.VS置为Dirty。即使向量状态没有被改变,一些实现也可能在任意时刻将mstatus.VS或vsstatus.VS从Initial或Clean更改为Dirty。

如果vsstatus.VS是Dirty,则vsstatus.SD是1;否则按照现有的规格设置vsstatus.SD。

如果mstatus.VS是Dirty,那么mstatus.SD就是1;否则,按照现有的规格设置mstatus.SD。

在具有可写的misa.V的一些实现中,即使misa.V被清除了,vsstatus.VS仍可能存在。

3.4 向量寄存器类型vtype

4. 向量元素和向量寄存器之间的映射

4.1 LMUL=1

4.2 LMUL<1

4.3 LMUL>1

5. 向量指令格式

6. 配置设置指令vsetvli/vsetivli/vsetvl

7. 向量load和store

7.9 Vector Load/Store Whole Register指令

与unmasked unit-stride load and store instructions操作相似


文章作者: kkqq
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kkqq !
评论
  目录