RISC-V 学习笔记之可伸缩矢量扩展指令集

RISC-V 学习笔记之可伸缩矢量扩展指令集

在学习 RISC-V 指令集时,注意到 V 扩展指令集:可伸缩矢量扩展指令集,这个名字就成功的勾起了我的好奇心,于是对其进行了进一步的学习,以下是一些简单的学习分享,欢迎大家一起交流学习。

对于“矢量”的理解

首先最让我好奇的就是 矢量 这个词,矢量是怎么和基本的运算联系在一起的呢?经过学习后,下面是我的简单理解。

在我们之前的数学概念中,与矢量相对的就是标量。在这里,标量运算就是指令在同一个时刻只能处理一个数据元素;而矢量运算下指令在同一个时刻可以处理多个数据元素,这样并行的效果大大加快了数据的处理速度。到这里是不是还是比较抽象呢,举一个简单的例子:

标量运算下让多个数据分别相加,是逐步执行以下步骤:

V0[1] = V0[2] +V0[3]
V1[1] = V1[2] +V1[3]
V2[1] = V2[2] +V2[3]

矢量运算想要实现同样的效果,执行以下步骤即可:

V[1] = V[2] +V[3]
//其中 V[1] = (V0[1],V1[1],V2[1]) , V[2] 和 V[3] 同理

矢量运算可以将多个数据合并装到一个大寄存器里,并且执行一次指令的过程中互不干扰。这样的写法和运算规则是不是和我们初中学的矢量一样呢。这其实涉及到 SIMD(Single Instruction Multiple Data,单指令多数据)即对多个数据元素同时执行相同的操作。其大大提高了处理数据的效率。

对于“可伸缩”的理解

在前面对矢量的介绍中,注意到要实现 SIMD ,用来装合并后的这个大寄存器起着关键作用。”可伸缩“这个概念就是针对这种寄存器的。在矢量运算的发展史上,矢量寄存器的位数不断提升,性能不断增强。但同样也由于不同的位数,出现兼容性的问题,不同位宽矢量寄存器的平台之间的程序移植成了问题,于是可伸缩矢量扩展指令集应运而生,设计者可以根据需求选择合适的矢量长度。

你可能感兴趣的:(risc-v,学习)