前言
为什么需要向量(矢量)指令集?
一般的处理器都是单指令单数据(SISD),处理数据能力有限。在面向人工智能领域,需要进行大量的矩阵运算、向量运算,已经难以满足计算需求,因此需要提高指令处理效率,一条指令处理多个数据,即SIMD。
SIMD指令和RV扩展的向量指令的区别?
SIMD指令中向量为固定长度,RV-V中的向量长度可由CSR某些位设置,更灵活;
寄存器大小可以设置,固定的寄存器文件空间可由用户自己切割
CPU中SIMD的向量运算如何执行?
图中,v1/v2/v3表示不同的向量寄存器,可以看到,一个向量寄存器可以存放多个元素,同时进入多个ALU中进行运算。
一、概念
VLEN:向量寄存器位宽
ELEN:单个向量元素最大位宽
SEW:一个选定元素位宽
EEW:指令实际操作的有效元素位宽 一般情况SEW=EEW 或EEW=nSEW
LMUL:一个寄存器组中寄存器的个数(要求寄存器中每个元素位宽为SEW,可取分数值,LMUL=1/2,1/4,1/8,1,2,4,8等)
EMUL: 寄存器中元素位宽为EEW时寄存器组中寄存器个数 其中,LMUL/SEW=EMUL/EEW
SEWLMUL1min:LMUL=1时SEW能取得最小值
SEWLMUL1max: LMUL =1时SEW能取到得最大值 一般=VLEN
VLMAX:一条向量指令可以操作的元素最大个数 VLMAX=LMUL×(VLEN/SEW)
field: 由EMUL个寄存器组成的寄存器组