DSP

比较NEON与其它的技术实现

2019-07-13 11:52发布

  1. 比较NEON与其它的技术实现
    1. 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的比较
      1. 比较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比较  
      1. 比较NEON与数字信号处理器
许多ARM处理器也可以与数字信号处理器(DSP)协作,或者用户定制的信号处理硬件;因此,它们可以包含一个NEON单元和一个DSP单元。使用NEON技术与使用DSP有一些不同。 NEON技术特征如下:
  1. 扩展了ARM处理器的流水线;
  2. 为内存寻址使用了ARM core registers;
  3. 控制的单线程可以更容易开发和调试;
  4. OS多任务的支持(如果OS能保存/恢复NEON和浮点寄存器文件)。
  5. SMP能力。在一个MPCore处理器中,每个ARM core有一个NEON单元。在多核中,它提供了比使用标准线程高好几倍的性能。
  6. 作为ARM处理器架构的一部分,NEON单元可以运行在更快的处理器上,并且很多SoCs的ARM处理器都支持它。
  7. 由开源社区和ARM生态系统提供了广泛的NEON tools支持。
  DSP特征如下:
  1. 与ARM处理器并行执行;
  2. 没有OS和任务频繁切换,能提供可靠的性能。当然前提是,DSP系统设计要预测性能。
  3. 通常应用开发者更难使用,两套工具集,独立的调试,潜在的同步问题;
  4. 与ARM处理器集成比较松散。在DSP与ARM处理器之间转移数据时,需要cache clean或出现flush overhead,这使得在处理小的数据块时使用DSP效率会更低。