ARM Neon基础介绍



        ARM NEON 是适用于ARM Cortex-A和Cortex-R52系列处理器的一种128位SIMD(single instruction multiple data, 单指令多数据)扩展结构。
        ARM CPU最开始只有普通的寄存器,可以进行基本数据类型的基本运算。自ARMv5开始引入了VFP(Vector Floating Point)指令,该指令用于向量化加速浮点运算。自ARMv7开始正式引入NEON指令,NEON性能远超VFP,因此VFP指令被废弃。类似于Intel CPU下的MMX/SSE/AVX/FMA指令,ARM CPU的NEON指令同样是通过向量化来进行速度优化。使用场景包含但不局限于:


1. 灵活的视频转码(Flexible video transcoding)
2. 声音识别、先进的语音处理(Speech Recognition,Advanced audio processing)
3. 视频捕获增强(Enhanced captured video)
4. 计算机视觉AR/VR(Computer Vision)
5. 机器学习及深度学习(Machine and deep learning)
6. 游戏及先进的人机交互界面(Gaming, Advanced user interface)


       关于SIMD(单指令多数据)和SISD(单指令单数据)。以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。这个特点使SIMD特别适合于多媒体应用等数据密集型运算:

                                                                  

       NEON技术是从ARMv7-A和ARMv7-R指令集引入的,目前已经扩展到了ARMv8-A和ARMv8-R指令集。
       NEON技术旨在通过加速多媒体(video/audio)编解码,用户界面,2D/3D图形及游戏来提高人对多媒体的体验度。
       NEON也可以通过加速信号处理算法和函数来加快应用程序,比如音频和视频处理,语音和面部识别,计算机视觉和深度学习。


概述
       NEON是一个打包的SIMD架构,NEON寄存器被视为相同数据类型的向量元,并且支持多种数据类型的一种技术。
       下表描述了不同架构下所支持的数据类型:

   ARMv7-A/R ARMv8-A/R  ARMv8-A
    AArch32 AArch64
Floatin-point 32-bit 16-bit*/32-bit 16-bit*/32-bit/64-bit
Integer 8-bit/16-bit/32-bit 8-bit/16-bit/32-bit/64-bit 8-bit/16-bit/32-bit/64-bit


NEON指令在所有向量通道上执行相同操作。执行操作数是由数据类型来决定的,Neon指令遵循如下的规则:

16x8-bit, 8x16-bit,4x32-bit,2x64-bit         整形操作
8x16-bit*,4x32-bit,2x64-bit**                      浮点操作

多个并行指令的操作仅在ARMv8.2-A, ARMv8-A/R上被支持。


怎样使用NEON
       有多种方式来使用NEON,其中包含了以使用的库文件,编译器的自动向量化,内嵌NEON代码等方式。


Library

       使用NEON最简单的方式就是使用已经包含了NEON的开源库。


       ARM计算库用于机器学习和计算机视觉
       ARM计算库是基于ARM CPU和GPU架构且针对图像处理,计算机视觉和机器学习的低层次的函数集合。
       更多信息可参考:https://developer.arm.com/technologies/compute-library


       Ne10是一个基于C的开源库,由ARM托管在github上,包含了一系列在ARM上重度优化的最常用的增强处理过程。
       Ne10是有几个小型的库构成的模块化的开源库。包含:

数学功能 信号处理功能 图像处理功能 物理功能
Vector Add Floating & Fixed Point Image Resize Collision Detection
Matrix Add Complex-to-Complex FFT Image Rotate  
Vector Subtract Floating & Fixed Point    
Vector Subtract From Real-to-Complex FFT    
Matrix Subtract FIR Filters    
Vector Multiply FIR Decimator    
Vector Multiply-Accumulate FIR Interpolator    
Matrix Multiply FIR Lattice Filters    
Matrix Vector Multiply FIR Sparse Filters    
Vector Divide IIR Lattice Filters    
Vector Set      
Vector Length      
Vector Normalize      
Vector Absolute Value      
Vector Dot Product      
Vector Cross Product      
Matrix Determinant      
Matrix Inverse      
Matrix Transpose      
Matrix Identity      


        Libyuv

        是一个包含YUV数据的转换和扩展功能的开源库.

        Skia

        是一个开源的2D图形库,用作谷歌Chrome和Chrome OS、Android、Mozilla Firefox和Firefox OS以及其他许多产品的图形引擎。


Neon生态系统

        Neon在如下表格所示的领域内有广泛的使用。其中包含了很多跨平台的开源项目:

Video Codecs Audio Codecs Voice and speech codecs Audio enhancement algorithms Computer Vision Machine and deep Learning  
VP9 OTT encoder, VP9 Consumer encoder/decoder MP3 encoder/decoder G.711 Echo cancellation Canny Edge detection On-device object recognition
H.264(AVC) encoder/decoder MPEG-2 layer I&II encoder/decoder G.722, G.722.1, G.722.2-A Noise Reduction Harris Corner On-device scene recognition
MPEG4 SP/ASP encoder/decoder MPEG-1 layer III audio encoder G.723.1 Beam Forming ORB Human pose recognition
MPEG2 decoder MPEG-1 layer III audio encoder/decoder G.726 Comfort Noise Convolution filter Defect detection
H.263 decoder HE-AACv1, v2 encoder/decoder G.727 AudioZoom Erosion/Dilation  
  WMA Standard encoder/decoder G.728 Equalization Face detection  
  WMA Pro, WMA Lossless decoder G.729, G.729A, G.729B Wind noise reduction Pedestrian detection  
  SBC Bluetooth encoder/decoder G.729AB Audomatic Gain Control Fast9/Fast12 corner detection  
  OggVorbis encoder/decoder AMR Narrowband, Wideband, Wideband+ Voice Activity Detection Object tracking  
  FLAC encoder/decoder GSM-HR, GSM-ER, GSM-EFR Key word spotting Lane departure  
  Dolby Digital AC-3 encoder/decoder Opus Voice trigger Connected components  
  Dolby Digital eAC-3 decoder iLBC Voice biometrics    
  Dolby MS10/MS11 Multistream SILK Speeker verification    
  Dolby Digital Plus 5.1/7.1 Consumer decoder SPEEX      
  Dolby Digital 5.1 Creator Consumer encoder MELPe      
  Dolby Pro Logic I&II encoder/decoder        
  iSAC encoder/decoder        
  CELT encoder/decoder        
  DTS core encoder/decoder        
  DAB+ encoder/decoder        
  Dolby Mobile encoder/decoder        
  Dolby TrueHD consumer decoder        
  Dolby UDC encoder/decoder        


相关内容推荐