一、NEON简介
NEON是通用的SIMD(单指令多数据)引擎。通过NEON可以加速多媒体和信号的处理算法。NEON可以处理当前和未来的多媒体格式,从而改善用户体验。
二、NEON原理
o
NEON 指令可执行“打包的 SIMD”处理:
n
寄存器被视为同一数据类型的元素的矢量
n
数据类型可以为:签名/未签名的 8 位、16 位、32 位、64 位单精度浮点
n
原理图如下:

下图通过SISD(单指令单数据)和SIMD(单指令多数据)的对比,来说明NEON的工作原理:

从图上可以看到,对于SISD,每个指令只能处理一个数据,而SIMD一个指令可以处理多个数据,因为多个数据的处理是平行的,因此从时间来说,一个指令执行的时间,SISD和SIMD是差不多的。由于SIMD一次可以处理N个数据,所以它的处理的时间也就缩短到SISD的1/N。
需要指出一点,NEON是需要硬件的支持的,需要有一块寄存器放到硬件上来处理这个的。
三、NEON的使用
o
NEON的函数是C语言风格,但是编译后成为汇编语句,这样执行的效率会提高。
o
四、NEON举例
下面是一个用C现实的将GRB转化成灰度图的算法

下面是一个用NEON现实的将GRB转化成灰度图的算法

对以上函数进行说明如下:

把权重放入
NEON寄存器

一次载入
8 pixles
到三个
NOEN
寄存器,这个地方是重点可以说明NEON的高效率。

计算结果

