RISCV 矢量处理器

RISC-V向量的工作过程

  • setp1 : 首先要确定向量的类型

    比如你要做一个向量运算 Y = a*X + Y ,如果X, Y 都是双精度的浮点的向量,那么就需要申请两个F64类型的向量v0和v1,
    如果是 Z = a*X + Y ,同样X,Y是双精度的浮点的向量,那么就需要至少申请3个F64类型的向量v0和v1,v2分别给X,Y,Z使用
    RV32V 向量寄存器类型的编码如下

Type Floating Poing Signed Interger Unsigned Interger
Width Name vetype Name vetype Name vetype
8bit — — X8 10100 X8U 11100
16bit F16 01101 X16 10101 X16U 11101
32bits F32 01110 X32 10110 X32U 11110
64bits F64 01111 X64 10111 X64U 11111
  • setp2 : 然后申请向量的个数
    假如向量寄存器总共有1024Byte ,如果只给2个向量使用,那么对半分,每个向量可以分得512Byte的空间,F64=8Byte,所以
    每个向量可以有512/8=64个F64类型的元素,也就是mvl(max_vecotr_length)=64, 一次可以计算的个数是64个元素。
    如果我们的X,Y的长度假设是100,那么完成 Y = a*X + Y 需要2次向量操作,
    第一次vl选64, 计算64个F64向量的运算
    第二次vl选100-64= 36, 计算剩余的36个F64向量的运算