vsetvli/vsetivli/vsetvl

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

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

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

  • vtype的值,放在vsetvli 和 vsetivli 的立即数字段中,以及 vsetvl 的 rs2 寄存器中。
  • vl需要根据AVL的值进行判断,确定写入值;
    • AVL放在vsetvli 和 vsetvl的 rs1 和 rd 字段,编码如下:
      • 当 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的计算

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

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值