vsetvli/vsetivli/vsetvl

转载自:【《RISC-V “V“ Vector Extension Version 1.0》阅读笔记】_risc v的rvv-CSDN博客

vsetvli/vsetivli/vsetvl_第1张图片

 上述指令的作用:快速配置 vl 和 vtype 中的值以匹配应用程序需求

 vset{i}vl{i} 指令根据参数设置 vtype 和 vl CSR,并将 vl 的新值写入 rd。

  • vtype的值,放在vsetvli 和 vsetivli 的立即数字段中,以及 vsetvl 的 rs2 寄存器中。
    • vsetvli/vsetivli/vsetvl_第2张图片
  • vl需要根据AVL的值进行判断,确定写入值;
    • AVL放在vsetvli 和 vsetvl的 rs1 和 rd 字段,编码如下:
    • vsetvli/vsetivli/vsetvl_第3张图片
      • 当 rs1 不是 x0 时,AVL 是一个无符号整数,保存在 rs1 指定的 x 寄存器中,新的 vl 值也写入 rd 指定的 x 寄存器。
      • 当 rs1=x0 但 rd!=x0 时,最大无符号整数值 (~0) 用作 AVL,生成的 VLMAX 写入 vl 以及 rd 指定的 x 寄存器。
      • 当 rs1=x0 且 rd=x0 时,指令的操作就像将 vl 中的当前向量长度用作 AVL,并将结果值写入 vl,但不写入目标寄存器。这种形式只能在 VLMAX 和因此 vl 实际上没有被新的 SEW/LMUL 比率改变时使用。保留使用将导致 VLMAX 变化的新 SEW/LMUL 比率的指令。在这种情况下,实现可能会设置 vill。
  • 对于 vsetivli 指令,AVL 被编码为 rs1 字段中的 5 位零扩展立即数 (0-31)。

VLMAX的计算

vsetvli/vsetivli/vsetvl_第4张图片

VL的约束

vset{i}vl{i} 指令首先根据它们的 vtype 参数设置 VLMAX,然后设置 vl 遵守以下约束:

  1. 如果 AVL ≤ VLMAX,则 vl = AVL

  2. ceil(AVL / 2) ≤ vl ≤ VLMAX 如果 AVL < (2 * VLMAX)

  3. 如果 AVL ≥ (2 * VLMAX),则 vl = VLMAX

  4. 对相同输入 AVL 和 VLMAX 值的任何给定实现具有确定性

  5. 这些特定属性遵循先前的规则:

​         a. 如果 AVL = 0,则 vl = 0

​         b. vl > 0 如果 AVL > 0

​         c. vl ≤ VLMAX

​         d. vl ≤ AVL

​         e. 从 vl 读取的值用作 vset{i}vl{i} 的 AVL 参数时会在 vl 中产生相同的值,前提是结果 VLMAX 等于读取 vl 时的 VLMAX 值。

你可能感兴趣的:(risc-v,risc-v)