ARM NEON 简介

ARM NEON 简介

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0472j/chr1360928373893.html

https://doc.rust-lang.org/nightly/core/arch/arm/index.html

https://developer.arm.com/technologies

https://developer.arm.com/technologies/neon

NEON Programmer’s Guide Version: 1.0

https://developer.arm.com/products/architecture/cpu-architecture/a-profile/docs/den0018/a

 

https://community.arm.com/processors/b/blog/posts/coding-for-neon---part-1-load-and-stores

https://community.arm.com/processors/b/blog/posts/coding-for-neon---part-2-dealing-with-leftovers

https://community.arm.com/processors/b/blog/posts/coding-for-neon---part-3-matrix-multiplication

https://zyddora.github.io/2016/02/28/neon_1/

https://blog.csdn.net/rony2012/article/details/76433431

https://blog.csdn.net/may0324/article/details/72847800

http://galoisplusplus.coding.me/galoisplusplus/blog/2017/06/10/use-arm-neon-to-accelerate-bgr888-to-yuv444/

http://projectne10.github.io/Ne10/

 

原文:https://developer.arm.com/technologies/neon

Arm NEON技术是Arm Cortex-A系列和Cortex-R52处理器的高级SIMD(单指令多数据)架构扩展。 

NEON技术被引入Armv7-A和Armv7-R型材。它现在也是Armv8-A和Armv8-R型材的扩展。 

NEON技术旨在通过加速音频和视频编码/解码,用户界面,2D / 3D图形或游戏来改善多媒体用户体验。NEON还可以加速信号处理算法和功能,以加速音频和视频处理,语音和面部识别,计算机视觉和深度学习等应用。

概观

NEON技术是一种压缩的SIMD架构。NEON寄存器被认为是相同数据类型的元素的向量。该技术支持多种数据类型。下表描述了体系结构版本支持的数据类型。

  的ARMv7-A / R Armv8-A / R  Armv8-A  
    AArch32 AArch64
浮点 32位 16位* / 32位 16位* / 32位/ 64位
整数 8位/ 16位/ 32位 8位/ 16位/ 32位/ 64位 8位/ 16位/ 32位/ 64位

NEON指令在向量的所有通道中执行相同的操作。执行的操作数取决于数据类型。NEON指令最多允许:

  • 16x8位,8x16位,4x32位,2x64位整数运算

  • 8x16位*,4x32位,2x64位**浮点运算

NEON技术的实现还可以并行支持多个指令的发布。

*仅限于Armv8.2-A

**仅限于Armv8-A / R. 

如何使用NEON?

NEON可以多种方式使用,包括支持NEON的库,编译器的自动矢量化功能,NEON内在函数,最后是NEON汇编代码。有关NEON编程的详细信息,请参阅NEON Programmer's Guide Version:1.0

library

利用NEON的最简单方法之一是使用已经使用NEON的开源库。

用于机器学习和计算机视觉的臂计算库

Arm Compute Library是针对Arm CPU和GPU架构优化的低级功能集合,主要针对图像处理,计算机视觉和机器学习。有关更多信息,请访问:https://developer.arm.com/technologies/compute-library

Ne10  是一个开源C库,由arm托管在github上,包含一组最常用于Arm的处理密集型功能。Ne10是一个由几个较小的库组成的模块化结构。目前,这些包括: 

 

数学函数 信号处理功能 图像处理功能 物理功能
矢量添加 浮动和固定点 图像调整大小 碰撞检测
矩阵添加 复杂到复杂的FFT 图像旋转   
矢量减法 浮动和固定点    
矢量减去 实对复FFT    
矩阵减法 FIR滤波器    
矢量乘法 FIR Decimator    
矢量乘法累加 FIR插补器    
矩阵乘法 FIR格子滤波器    
矩阵向量乘法 FIR稀疏滤波器    
矢量分裂 IIR格子滤波器     
矢量包      
矢量长度      
矢量标准化      
矢量绝对值      
矢量点产品      
矢量交叉产品      
矩阵行列式      
矩阵逆      
矩阵转置      
矩阵身份      

libyuv  是一个开源项目,包括YUV缩放和转换功能。

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

自动向量化

Arm编译器支持自动矢量化功能,其中它们自动利用NEON功能。

此功能受以下支持:

  • Arm编译器5

  • Arm基于LLVM的编译器6

  • GCC

查看NEON程序员指南版本:1.0。Arm编译器用户指南还为NEON优化提供了额外的指导。 

编译器内在函数

NEON内在函数是编译器用适当的NEON指令或NEON指令序列替换的函数调用。内在函数提供与编写汇编语言几乎一样多的控制,但是将寄存器的分配留给编译器,以便开发人员可以专注于算法。它还可以执行指令调度以移除指定目标处理器的流水线停顿。这使得源代码比使用汇编语言更易于维护。ARM编译器,gcc和LLVM支持NEON Intrinsics。

Arm NEON内在参考

NEON内在的例子

#include 
uint32x4_t double_elements(uint32x4_t input)
{
return(vaddq_u32(input, input));
}

 

有关更多信息,请参阅Arm NEON Intrinsics参考文档,这是针对Armv7和Armv8架构的NEON内在函数的参考。

汇编代码

对于非常高的性能,手工编码的NEON汇编程序是有经验的程序员的最佳方法。GNU汇编程序(气体)和Arm编译器工具链汇编程序(armasm)都支持NEON指令的汇编。

工具

Arm DS-5 Development Studio为基于Arm的平台提供了用于C / C ++软件开发的端到端工具套件。DS-5完全支持NEON架构的编程和调试。 

DS-5调试器提供NEON指令的完整调试功能和架构寄存器的可视化。DS-5调试器支持所有Arm架构配置文件和处理器。

ARM NEON 简介_第1张图片

NEON生态系统

多个合作伙伴提供各种编解码器和DSP模块。

一些关键可用功能的示例详述如下:

视频编解码器: 音频编解码器: 语音和语音编解码器: 音频增强算法: 计算机视觉 机器和深度学习
VP9 OTT编码器,VP9消费者编码器/解码器 MP3编码器/解码器 G.711 回声消除 Canny边缘检测 设备上的对象识别
H.264(AVC)编码器/解码器 MPEG-2层I和II编码器/解码器 G.722,G.722.1,G.722.2 降噪 哈里斯角 设备上的场景识别
MPEG4 SP / ASP编码器/解码器 MPEG-1第三层音频编码器 G.723.1 梁成型 ORB 人体姿势识别
MPEG2解码器 MPEG-1第三层音频编码器/解码器 G.726 舒适噪音 卷积滤镜 缺陷检测
H.263解码器 HE-AACv1,v2编码器/解码器 G.727 AudioZoom 侵蚀/扩张  
  WMA标准编码器/解码器 G.728 均衡 人脸检测  
  WMA Pro,WMA无损解码器 G.729,G.279A,G.729B 风降噪 行人检测  
  SBC蓝牙编码器/解码器 G.729AB 自动增益控制 Fast9 / Fast12角点检测  
  OggVorbis编码器/解码器 AMR窄带,宽带,宽带+ 语音活动检测 对象跟踪  
  FLAC编码器/解码器 GSM-HR,GSM-ER,GSM-EFR 关键词发现 车道出发  
  杜比®数字AC-3编码器/解码器 作品 语音触发 连接组件  
  杜比®  数字eAC-3解码器 iLBC的 语音生物识别技术    
  杜比® MS10 / MS11多码流 演讲者验证    
  杜比®数字+ 5.1消费者解码器 SPEEX      
  杜比®数字5.1制作器消费者编码器 MELPe      
  杜比®定向逻辑I&II编码器/解码器        
  iSAC编码器/解码器        
  CELT编码器/解码器        
  DTS核心编码器/解码器        
  DAB +编码器/解码器        
  杜比®移动编码器/解码器        
  杜比® TrueHD技术的消费者解码器        
  杜比® UDC编码器/解码器        

  有关我们生态系统合作伙伴的更多详细信息,请访问我们的DSP生态系统合作伙伴页面。

资源

影片

驯服Armv8 NEON:从理论到基准测试结果 - 介绍NEON的YouTube视频,比较Armv8和Armv7 NEON,然后提供有关如何成功使用NEON的提示。

博客

关于NEON编程的一系列博客:

  • NEON的编码 - 第1部分:负载和商店 

  • NEON的编码 - 第2部分:处理残羹剩饭

  • NEON的编码 - 第3部分:矩阵乘法。

手臂编译器

  • Arm编译器5

  • Arm编译器6

 

 

《end》

posted on 2018-08-29 16:53 sundaygeek 阅读(...) 评论(...) 编辑 收藏

你可能感兴趣的:(嵌入式/IoT/物联网)