RISC-V向量扩展指令(一)

概述

在计算机指令执行过程中,主要分为三个步骤,取数-运算-回写,用汇编指令表示为

									lw a,0(x1)
									addi b,a,4
									sw b,0(x3)

对于标量指令,每执行一次相同的指令,都会反复一次上述过程,即都需要执行至少一次lw和sw,且该过程是顺序执行,不能流水。

在向量指令中,vl,vs指令可以进行流水,将整个取向量的时间分散在单个元素上,去除了多次指令执行程序中loop的次数,可以很好的掩藏存储器延迟。

相对于标量指令来说,向量指令按统一操作处理向量寄存器里的所有分量,可有效的提高计算机的运行速度。

向量指令的划分

目前根据官方文档,向量指令主要分为配置指令、向量整型指令、向量定点指令、向量浮点指令、向量缩减指令、向量掩码指令、向量置换指令、存储器访问指令。

根据向量指令操作类型分类,分为以下几个类型:

1、对一个向量的各分量执行同一运算,如:

a) 向量浮点分类指令vfclass.v,具体操作为

								vfclass.v vd vs2,vm 

将源寄存器中的各个元素(操作数)按ieee754标准划分为规范数、非规范数、qnan、snan等特殊和非特殊数据,并根据不同的数据给予目的寄存器vd相应的值。具体的ieee754标准后续会详细描述,指令操作中vm为掩码操作,后续讲述。

b) 向量开根指令vfsqrt.v,具体操作为

								vfsqrt.v vd vs2,vm 

将源操作寄存器vs2中的各个元素进行求根运算,并给到vd中。

2、对同样维数的两个向量的对应分量执行同一运算,如:

a) 向量整型加法指令vadd.vv,具体操作为

								vadd.vv vd vs2,vs1,vm  

将源操作寄存器vs1,vs2中的各个元素对应相加,结果给到vd相应元素中,如vd[0]=vs2[0]+vs1[0].

b) 向量定点加法指令vsaddu.vv,具体操作为

								vsaddu vd vs2,vs1,vm 

与vadd.vv类似。

c) 向量浮点比较指令vmfeq.vv 具体操作为

								vmfeq.vv vd vs2,vs1,vm  

将vs1和vs2相应元素进行比较,相等的将vd掩码位置1,不等置0.

3、 一个向量的各分量都与同一标量执行同一运算

该类指令均可产生一个新的向量,如:

a)向量整型加法指令vadd.vx 具体操作为

								vadd.vx vd vs2,rs1,vm 

其中rs1为整型标量寄存器,将rs1中的标量数据依次与向量寄存器vs2中的各个元素进行相加,结果写到目的向量寄存器vd的各个元素中(受掩码vm控制)。

b) 向量浮点最值指令 vfmin.vf

								vfmin.vf vd vs2,rs1,vm 

其中rs1为浮点标量寄存器,将rs1中的浮点数据依次与向量寄存器vs2的各个元素进行比较,较小者给到vd相应元素中。

这些是基本的向量运算。此外,可在一个向量的各分量间执行某种运算,如连加、连乘或连续比较等操作,使之综合成一个标量。为了提高向量处理能力,基本型向量运算在执行中可以有某种灵活性,如在位向量(指令中vm)控制下使某些分量不执行操作,或增加其他特殊向量操作,如两个维数不等的单调上升整数向量的逻辑合并、向量的压缩和还原。

另外,相对于标量指令处理的标量寄存器而言,向量寄存器的位宽到底是多少?指令一次的操作对象宽度又是多大的?前边提到的元素又是怎么划分的?这就需要risc-v指令集架构的向量配置指令中的参数和自定义参数来控制。

Risc-v标准定义了两个重要的参数:VLEN和ELEN,分别表示通用向量寄存器的宽度和单个向量元素的最大宽度;并且二者必须是2的幂,ELEN >= 8,128 =< VLEN < 2^16。

(本文以及后文有可能提到XLEN、FLEN,分别代表整型和浮点型通用寄存器的位宽)

除定义的两个重要参数外,其他控制参数由配置寄存器提供,RISC-V提供了32个通用向量寄存器(V0-V31),7个非特权控制状态寄存器CSR,分别为vstart、vxsat、vxrm、vcsr、vl、vtype、vlenb。所有的向量控制都由他们来提供,具体的控制方法下节详细论述。

总结

介绍了向量指令的划分和向量寄存器的组成,下期讲述向量控制参数的具体使用方法和向量寄存器的格式说明,以及如何在代码中体现它们,下期见。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值