什么是SVE
NEON指令集是ARM64架构的单指令多数据流(SIMD)的标准实现。SVE(可扩展矢量指令Scalable Vector Extension)是针对高性能计算(HPC)和机器学习等领域开发的一套全新的矢量指令集,它是下一代SIMD指令集实现,而不是NEON指令集的简单扩展。SVE指令集中有很多概念与NEON指令集类似,例如矢量、通道、数据元素等。SVE指令集也提出了一个全新的概念:可变矢量长度编程模型(VectorLength Agnostic,VLA)。
传统的SIMD指令集采用固定大小的向量寄存器,例如NEON指令集采用固定的128位长度的矢量寄存器。而支持VLA编程模型的SVE指令集则支持可变长度的矢量寄存器。这样允许芯片设计者根据负载和成本来选择一个合适的矢量长度。SVE指令集的矢量寄存器的长度最小支持128位,最大可以支持2048位,以128位为增量。SVE设计确保同一个应用程序可以在支持不同矢量长度的SVE指令机器上运行,而不需要重新编译代码,这是VLA编程模型的精髓。
SVE指令集是在A64指令集的基础上新增的一组指令集,而SVE2是在ARMv9架构上发布的,它是SVE指令集的一个超集和扩充。
SVE指令集包含了几百条指令,它们可以分成如下几大类。
Ø 加载存储指令以及预取指令
Ø 向量移动指令
Ø 整数运算指令
Ø 位操作指令
Ø 浮点数运算指令
Ø 预测操作指令
Ø 数据元素操作指令
SVE2指令集在SVE指令集的基础进一步扩充和完善,新增了部分指令和扩展。本节不对每条指令做详细的介绍,有兴趣的读者可以阅读ARMv9指令集文档:《Arm A64 Instruction SetArchitecture,Armv9, for Armv9-A architectureprofile》。
什么是矢量计算?
SIMD,全称Single Instruction Multiple Data,一条指令操作多个数据,提供小数据并行处理能力。ARM从ARMv7架构开始加入NEON指令集扩展,矢量化并行计算,用于图像处理、音视频处理、视频编解码等场景。
SISD(Single Instruction Single Data)指的是单指令