关于NEON的一些总结

来源:互联网 发布:c4d软件中文版设置 编辑:程序博客网 时间:2024/06/11 10:37

一、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的高效率。
   
  
       计算结果
      
       
      
     NEON函数参考gcc工具里面的gcc.pdf文档NEON部分。
       指令在所有通道中执行同一操作