我是靠谱客的博主 怕孤单胡萝卜,最近开发中收集的这篇文章主要介绍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/RARMv8-A/R ARMv8-A
  AArch32AArch64
Floatin-point32-bit16-bit*/32-bit16-bit*/32-bit/64-bit
Integer8-bit/16-bit/32-bit8-bit/16-bit/32-bit/64-bit8-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 AddFloating & Fixed PointImage ResizeCollision Detection
Matrix AddComplex-to-Complex FFTImage Rotate 
Vector SubtractFloating & Fixed Point  
Vector Subtract FromReal-to-Complex FFT  
Matrix SubtractFIR Filters  
Vector MultiplyFIR Decimator  
Vector Multiply-AccumulateFIR Interpolator  
Matrix MultiplyFIR Lattice Filters  
Matrix Vector MultiplyFIR Sparse Filters  
Vector DivideIIR 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 CodecsAudio CodecsVoice and speech codecsAudio enhancement algorithmsComputer VisionMachine and deep Learning  
VP9 OTT encoder, VP9 Consumer encoder/decoderMP3 encoder/decoderG.711Echo cancellationCanny Edge detectionOn-device object recognition
H.264(AVC) encoder/decoderMPEG-2 layer I&II encoder/decoderG.722, G.722.1, G.722.2-ANoise ReductionHarris CornerOn-device scene recognition
MPEG4 SP/ASP encoder/decoderMPEG-1 layer III audio encoderG.723.1Beam FormingORBHuman pose recognition
MPEG2 decoderMPEG-1 layer III audio encoder/decoderG.726Comfort NoiseConvolution filterDefect detection
H.263 decoderHE-AACv1, v2 encoder/decoderG.727AudioZoomErosion/Dilation 
 WMA Standard encoder/decoderG.728EqualizationFace detection 
 WMA Pro, WMA Lossless decoderG.729, G.729A, G.729BWind noise reductionPedestrian detection 
 SBC Bluetooth encoder/decoderG.729ABAudomatic Gain ControlFast9/Fast12 corner detection 
 OggVorbis encoder/decoderAMR Narrowband, Wideband, Wideband+Voice Activity DetectionObject tracking 
 FLAC encoder/decoderGSM-HR, GSM-ER, GSM-EFRKey word spottingLane departure 
 Dolby Digital AC-3 encoder/decoderOpusVoice triggerConnected components 
 Dolby Digital eAC-3 decoderiLBCVoice biometrics  
 Dolby MS10/MS11 MultistreamSILKSpeeker verification  
 Dolby Digital Plus 5.1/7.1 Consumer decoderSPEEX   
 Dolby Digital 5.1 Creator Consumer encoderMELPe   
 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    


最后

以上就是怕孤单胡萝卜为你收集整理的ARM Neon基础介绍 (一)的全部内容,希望文章能够帮你解决ARM Neon基础介绍 (一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部