RISC-V向量指令基本问题

**

写在前面

**
在讲述向量指令格式之前,先解决一些基本问题。
有很多朋友问起上节我们提到的一个尾部元素和被屏蔽元素具体指的是什么?
实际上是这样,我们知道在RISC-V向量扩展指令中,基本都会带有mask功能,向量指令格式中的vm字段,后续会具体讲述。
在这里插入图片描述

也就是说,被屏蔽元素是被mask掉的字段,这些字段不被操作;而尾部元素取决于vl,元素索引大于vl元素不被操作。
**

向量元素至向量寄存器的映射状态

**
该节主要讲述了元素在向量寄存器中的存储方式,核心理念其实很简单,就是小端存储模式,即元素元素数据地位存储在向量寄存器的低位,依次存放,并支持不同宽度的向量数据映射。RISC-V规定的该映射是为软件开发提供最简单可移植的模型。具体存储方式按LMUL大小分来,如下:
①LMUL = 1,即一个向量寄存器为一个向量寄存器组,元素按照索引从向量寄存器的最低有效位开始存储,共存储vl个元素,或存满整个向量寄存器组。
②LMUL < 1,即一个向量寄存器组的长度小于一个向量寄存器的长度,也就是说一个向量寄存器的部分字段作为单个指令的操作的对象。同样元素按照索引顺序,依次从向量寄存器组的最低有效位开始存储,元素最多为LMUL * (VLEN/SEW)。向量寄存器组的其余字段按照尾部元素根据vta字段进行赋值。
③LMUL > 1,即多个向量寄存器组成一个向量寄存器组。同样元素按照索引顺序,依次从向量寄存器组的最低有效位开始存储,存储最多vl个元素,当然vl可以等于VLEN。
另外,当LMUL > 1时,允许SEW大于VLEN,也就是说一个元素宽度可以跨越一个向量寄存器,使用多个向量寄存器存储一个元素。
因此,针对于SEW的大小,再结合RISC-V指令中的扩宽(目的元素宽度大于源元素宽度)和缩宽(目的元素宽度小于源元素宽度)等混合位宽指令。在指令运算前后,源和目的操作数的SEW会出现差异,按照前边所说,这种指令会使前后元素个数发生变化,显然这是不符合逻辑的,一条指令运算的对象就是元素,怎么会改变元素的个数,因此需要动态的设置LMUL的大小,以保持运算前后元素个数不变,有以下公式

										SEW/LMUL = EEW/EMUL

其中EEW、EMUL分别为有效元素宽度和有效元素分组数,即实际运算的参数值,原则上EEW = SEW , EMUL = LMUL ,但当遇到上述情况时会动态设置,以保持元素个数不变。
同样,掩码寄存器只有一个向量寄存器存储,与其无关。
**

更多内容欢迎关注微信公众号: 司晔

**

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值