arm中文社区
直播中

小麦地

12年用户 1671经验值
私信 关注
[资料]

SVE编程示例

ARMv8-A高级SIMD指令集在64位或128位的固定长度向量上运行。
对于处理大量数据的行业应用,例如计算机视觉和机器学习、服务器、数据分析,人们已经认识到,运行较长向量长度的处理器可能更适合。
然而,没有一个特定的矢量长度可以很好地适用于所有应用。
由于每次需要新的矢量长度时指定一个新的指令集的编码成本相对较高,ARM采用了一种新颖的方法,并创建了一个可根据不同的矢量长度进行缩放的唯一指令集。
这种下一代ARM SIMD指令集称为可伸缩向量扩展(SVE)。
它允许矢量长度不可知的编码风格,其中代码不需要重新编写或重新编译,因为它动态地适应所实现的矢量长度。
SVE架构允许实现最大为2048位的矢量长度,其中矢量长度必须是128位的倍数。
SVE还支持为固定向量长度编写的代码。
由ARMv8-A高级SIMD指令集促进的矢量化方法对循环计数不是向量长度的倍数的情况很敏感。
为了适应这种情况,ARMv8-A高级SIMD矢量化循环之后是处理剩余数据的标量循环。
SVE支持的向量分割机制允许控制对向量的哪些元素进行操作。
这使得能够更容易地处理循环终止条件。
这套精心挑选的指令将条件语句或控制流转换为谓词向量操作,从而实现无缝循环控制。
因此,大多数复杂的嵌套循环变得可向量化。
SVE支持许多算术运算的归约指令。
这些指令实现了这样的矢量化,其中在不同的矢量通道中计算部分结果。
在矢量化循环完成之后,借助归约指令从这些部分结果中获得最终结果。
SVE指令集提供了广泛的加载/存储指令支持、谓词和循环控制支持以及逻辑和按位指令支持。
SVE指令集还提供全面的浮点算术支持和基本整数算术支持。
SVE2是可伸缩向量扩展v2,是具有扩展功能的ARMv8-A SVE的超集。
SVE2指令集添加了全面的整数算术支持

更多回帖

发帖
×
20
完善资料,
赚取积分