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
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 Programmer's Guide Version:1.0
利用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架构配置文件和处理器。
多个合作伙伴提供各种编解码器和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 阅读(...) 评论(...) 编辑 收藏