欢迎来到我司Viking代理产品网站!
SVE架构功能和基本说明简介
Viking代理 2024-04-27

SVE(ScalableVectorExtension)是armAArch64架构下的下一代SIMD指令集。

它旨在加速高性能计算。

SVE引入了许多新的体系结构功能,例如•可变矢量长度•每个通道的预测•聚合加载和分布式存储•水平操作本文将对SVE进行基本介绍。

1. SIMD指令开发历史的智能从上图可以看出,SIMD指令的总体趋势正在朝着越来越长的方向发展。

通过armSVE,它最多可以支持2048位向量操作。

2.背景Armv7的高级SIMD(即,armNEON或“ MPE”多媒体处理引擎)指令集已于2005年发布,并且已经存在了十多年。

Armv7NEON的主要功能如下:•支持8/16/32位整数运算,支持非IEEE兼容的单精度浮点运算,支持指令条件执行•32个64位向量寄存器,也可以是被视为16个128位向量寄存器•设计用于加速CPU端的多媒体处理任务。

升级到armv8架构时,AArch64NEON指令集已进行了许多改进,例如:•支持IEEE兼容的单精度和双精度浮点运算以及64位整数矢量运算•32个128位矢量寄存器•这些改进使NEON指令集更适合于通用计算,而不仅仅是多媒体计算。

但是到目前为止,armv8的新市场需要更彻底的SIMD指令改进。

我们需要能够并行处理非常规数据和复杂数据结构,并且我们还需要更长的向量。

SVE是出于这个原因而诞生的。

SVE旨在加速高性能计算。

3. SVE功能SVE是armv8AArch64体系结构的下一代SIMD指令集。

它不是NEON的替代品,而是专注于高性能计算。

主要功能如下:•可变矢量长度•128位的整数倍。

支持多达2048位•不同的实现可以适应不同的应用场景而无需更改指令集•每个通道的预测•支持复杂的嵌套循环以及if / then / else条件跳转,无循环尾数。

•聚合加载和分布式存储支持复杂的数据结构,例如步骤数据访问,数组索引,链表等。

•水平运算•支持基本的归约运算以减少循环依赖性。

4. SVE寄存器SVE寄存器有两种类型:向量寄存器和预测寄存器。

SVE共有32个可变长度向量寄存器Z0-Z31(128位的整数倍,最大2048位),其中Z0-Z31的低128位[127:0]与AArch64SIMD&FP寄存器共享硬件资源V0-V31。

假设SVE的向量长度为​​256,则向量寄存器视图如下。

SVE支持8/16/32/64位整数运算和单精度/双精度浮点运算。

SVE预测寄存器用于控制每个通道的操作。

有16个变长预测寄存器P0-P15。

预测寄存器的每个位对应于向量寄存器的字节。

假设SVE的向量长度为​​256,则当预测寄存器管理32位和64位操作时,视图如下。

当控制32位数据操作时,如果Pg寄存器的最小值为1,则激活通道操作,并且通道操作的结果通常存储在目标寄存器中;如果Pg寄存器的最小值为0,则通道操作处于非活动状态,该通道的操作结果将不会存储在目标寄存器中。

目的寄存器中的通道数据有两种可能性:•将指令指定为Pg / z清除模式,并清除通道数据。

•该指令被指定为Pg / m组合模式,并且通道数据保持原始值。

5. SVE指令示例下面,我们通过一些示例介绍常用SVE指令的用法。

一种。

向量加法每个人都可能熟悉NEON的指令格式(如下所示)。

NEON指令通过加“ f”来区分整数运算和浮点运算。

指令助记符的前缀,例如“ add”。

和“添加”;另外,通过寄存器后缀“ .2s”,“。

4s”和“ .2d”也可以通过寄存器“ .2s”,“。

4s”和“ .2d”来实现。

表示两个32位数据,四个32位数据和两个64位数据的操作。

•通过添加“ f”,还添加了addv0.4s,v0.4s,v1.4s•faddv0.2s,v0.2s,v1.2s•faddv0.2d,v0.2d,v1.2dSVE指令。

指令助记符的前缀区分整数运算和浮点运算。

但是SVE是