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向量的运算