- 比较NEON与其它的技术实现
- NEON与ARMv6 SIMD的比较
ARMv6架构引入了一个很小的SIMD指令集,它能够并行执行打包到标准32-bit通用寄存器的多个16-bit或8-bit值。这些指令在没有增加额外计算单元情况下,提升了2倍或4倍的速度。
ARMv6 SIMD 指令“UADD8 R0, R1, R2”并行执行一个32-bit寄存器里的4个8-bit值与另一个32-bit寄存器里的4个8-bit值相加,如图所示:
图 ARMv6 SIMD 指令的4 lane的8-bit并行运算
ARM NEON技术建立在SIMD理念的基础上并支持128-bit向量操作,而不是ARMv6 框架内的32-bit向量操作。
NEON单元默认包含在 Cortex-A7和 Cortex-A15处理器中的;但是,在其它的 ARMv7 Cortex-A 系列处理器中是可选的。
The NEON unit is included by default in the Cortex-A7 and Cortex-A15 processors, but is
optional in other ARMv7 Cortex-A series processors.
特性
ARMv7 NEON扩展
ARMv6 SIMD
打包的数据
4 x 16-bit, 2 x 32-bit, 8x8-bit
4 x 8-bit
数据类型
支持整数;如果有VFP单元,支持单精度浮点数。
只支持整数
同步执行操作个数
最大16,当16x8-bit时
最大4,当4 x 8-bit
专用寄存器
运行在单独的NEON寄存器文件上,与VFP共享;32x64-bit或者16x128-bit寄存器
使用32-bit通用寄存器。
流水线
NEON有专门的流水线来优化性能
与其它指令使用相同的流水线
表1-1 NEON与ARMv6 SIMD的比较
-
-
- 比较NEON与其它SIMD方案
NEON与MMX、 Altivec比较如下:
特性
NEON
x86 MMX/SSE
Altivec
寄存器个数
32×64-bit(also visible as 16 × 128-bit)
SSE2: 8 × 128-bit XMM (in x86-32 mode)
Additional 8 registers in x86-64 mode
32 × 128-bit
内存和寄存器操作符
基于寄存器的3-操作符指令
Mix of register and memory operations
Register-based 3- and 4-operand instructions
打包数据的加载和存储支持
Yes as 2,3, or 4 element
NO
NO
标量与向量寄存器之间移动
Yes
Yes
no
浮点运算支持
单精度
单精度和双精度
单精度
表1-2 NEON与MMX、 Altivec比较
-
-
- 比较NEON与数字信号处理器
许多ARM处理器也可以与数字信号处理器(DSP)协作,或者用户定制的信号处理硬件;因此,它们可以包含一个NEON单元和一个DSP单元。使用NEON技术与使用DSP有一些不同。
NEON技术特征如下:
- 扩展了ARM处理器的流水线;
- 为内存寻址使用了ARM core registers;
- 控制的单线程可以更容易开发和调试;
- OS多任务的支持(如果OS能保存/恢复NEON和浮点寄存器文件)。
- SMP能力。在一个MPCore处理器中,每个ARM core有一个NEON单元。在多核中,它提供了比使用标准线程高好几倍的性能。
- 作为ARM处理器架构的一部分,NEON单元可以运行在更快的处理器上,并且很多SoCs的ARM处理器都支持它。
- 由开源社区和ARM生态系统提供了广泛的NEON tools支持。
DSP特征如下:
- 与ARM处理器并行执行;
- 没有OS和任务频繁切换,能提供可靠的性能。当然前提是,DSP系统设计要预测性能。
- 通常应用开发者更难使用,两套工具集,独立的调试,潜在的同步问题;
- 与ARM处理器集成比较松散。在DSP与ARM处理器之间转移数据时,需要cache clean或出现flush overhead,这使得在处理小的数据块时使用DSP效率会更低。