本指南总结了可伸缩矢量扩展(SVE)编码和霓虹灯编码之间的重要区别。对于已经将应用程序移植到Armv8-A Neon硬件的用户,本指南还强调了将应用程序迁移到SVE时需要考虑的关键差异。
Arm Neon技术是Armv8-A架构配置文件的高级单指令多数据(SIMD)功能。Neon是指令集架构(ISA)的一个功能,提供可以对多个数据流并行执行数学运算的指令。
SVE是Armv8-A指令集的下一代SIMD扩展。它不是Neon的扩展,而是针对HPC工作负载开发的一组新的矢量指令。简而言之,SVE可以实现循环的矢量化,而使用Neon进行矢量化是不可能的,或者是没有好处的。重要的是,与其他SIMD体系结构不同,SVE可以是矢量长度不可知(VLA)。VLA意味着矢量寄存器的大小不是固定的。相反,硬件实现者可以自由选择最适合预期工作负载的大小。
在本指南的最后,您可以检查您的知识。您将了解SVE和Neon之间的基本区别,包括寄存器类型、谓词指令和矢量长度不可知编程。
本主题的第一部分总结了开发使用Neon扩展的代码和开发使用SVE的代码之间的重要区别。本教程的第二部分和后续部分描述了在准备将Neon代码迁移到SVE时以及在迁移Neon代码时要考虑的事项,以及一些示例。