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向量的运算
FAQ
何为mvl
max_vector_何为ml