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指令一樣是經過向量化來進行速度優化。使用場景包含但不侷限於:git
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)github
關於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寄存器被視爲相同數據類型的向量元,而且支持多種數據類型的一種技術。
less
NEON指令在全部向量通道上執行相同操做。執行操做數是由數據類型來決定的,Neon指令遵循以下的規則:dom
16x8-bit, 8x16-bit,4x32-bit,2x64-bit 整形操做
8x16-bit*,4x32-bit,2x64-bit** 浮點操做機器學習
多個並行指令的操做僅在ARMv8.2-A, ARMv8-A/R上被支持。ide
怎樣使用NEON
有多種方式來使用NEON,其中包含了以使用的庫文件,編譯器的自動向量化,內嵌NEON代碼等方式。模塊化
Library函數
使用NEON最簡單的方式就是使用已經包含了NEON的開源庫。
ARM計算庫用於機器學習和計算機視覺
ARM計算庫是基於ARM CPU和GPU架構且針對圖像處理,計算機視覺和機器學習的低層次的函數集合。
更多信息可參考:https://developer.arm.com/technologies/compute-library
Ne10是一個基於C的開源庫,由ARM託管在github上,包含了一系列在ARM上重度優化的最經常使用的加強處理過程。
Ne10是有幾個小型的庫構成的模塊化的開源庫。
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 recognitionH.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 recognitionMPEG4 SP/ASP encoder/decoder MPEG-1 layer III audio encoder G.723.1 Beam Forming ORB Human pose recognitionMPEG2 decoder MPEG-1 layer III audio encoder/decoder G.726 Comfort Noise Convolution filter Defect detectionH.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 --------------------- 版權聲明:本文爲CSDN博主「rony2012」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/rony2012/article/details/76433431