RISC-V指令集是一种矢量指令集,与SIMD的固定长度指令集不同。对于RISC-V指令集来说,其vector长度可变(通过VLEN或者SLEN参数控制),多个vector可以合并为一个更大vector使用(通过VMUL参数控制)。
一、 矢量长度控制寄存器
VMUL:控制多个vector合并为一个更大的vector,得到更少但是更长的向量寄存器,被允许的向量名字必须是偶数名字,例如:VMUL = m2 {v0,v2,v4…}, VMUL = m4 {v0,v4,v8…} , VMUL = 1 {v0, v1, v2~v30}。可取的数值:m1, m2, m3 ~ m8
SEW:控制每个vector按照多少bits进行切割作为基本的数据类型(int8, int16, fp32),比如e8:按照字节,e16:按照双字节他。
VLEN(向量长度):向量寄存器的长度, 32b or 64b or 128b or 256b,以来与
vl(向量长度寄存器, 实际可用的):通过vl寄存器修改,是实际的可操向量长度,vl = min (VLEN / SEM, RQV)(此处一般以字节为单位, RQV:requested application vector length)
vsetvli指令配置vtype寄存器(向量类型寄存器)(包含vedit, vsew, vlmul字段对向量进行配置)
vsetvli rd, rs1, e8 # set SEW=8, vl = min(VLEN / SEW, rs1), rd = vl
# 设置元素宽度是字节,向量长度是vl,返回给rd寄存器中。
# rs1 使用户请求的长度,单位是字节(在e8情况下)