初识neon指令
来源:互联网 发布:知乎中科大软件学院 编辑:程序博客网 时间:2024/06/14 17:08
1、neon指令是什么
NEON就是将增强性SIMD的扩展使用在ARM处理器上的实现。也就是说NEON是指用一种特定的方式去实现的过程。现在ARM Cortex-A8的系列是具有着NEON,具有NEON技术的处理器都会配备了32个64位的寄存器和16个128位的寄存器,它们分别被标识为(D0-D31),(Q0-Q15) 两种寄存器重叠。NEON的指令集只是ARM和THUMB指令集中的子集,ARM和THUMB要管理所有程序流和同步的问题。NEON指令通常执行的就是:内存的访问 、在NEON寄存器和传统寄存器之间的数据拷贝、数据类型的转化、数据的处理。
SIMD又是什么呢,就是单指令多数据流。通常我们进行多媒体处理的时候,很多的数据都是16位或者8位的,如果这些程序运行在32位的机器上,那么计算机有一部分的计算单元是没有工作的,所以这是一种浪费。SIMD这种技术就是使用一条指令,但对多个相同类型和尺寸的数据进行并行处理。
2、neon的指令类型
(1)正常指令:生成大小相同且类型通常与操作数向量相同到结果向量。
(2)长指令:对双字向量操作数执行运算,生产四字向量到结果。所生成的元素一般是操作数元素宽度的两倍,并属于同一类型。L标记
(3)宽指令:一个双字向量操作数和一个四字向量操作数执行运算,生成四字向量结果。W标记
(4)窄指令:四字向量操作数执行运算,并生成双字向量结果,所生成的元素一般是操作数元素宽度的一半。N标记
(5)饱和指令:当超过数据类型指定到范围则自动限制在该范围内。Q标记
3、neon的指令
neon指令的一个显著特点就是都以v开头;在结尾以一个字母+一个数字的形式组成说明符,说明操作数的类型和长度。具体指令很多就不罗列了,参考这里。
举一个例子:
vmulq.I8 q12,q0,d15[0]vmul是乘法指令,q表示这条指令为饱和指令,I8表示所要处理的数据为8位整型,q12,q0表示两个128bit寄存器,d15[0]表示d15寄存器的第一个数据。整条指令执行的命令就是将q0中的数据依次和d15[0]相乘,结果放入q12寄存器中。一条指令,就完成了16次乘法运算。
此外,使用neon指令就要在代码中加入头文件arm_neon.h;编译的命令也要变为arm-none-linux-gnueabi-gcc -mfpu=neon ***.cpp (用gcc编译的话)
4、neon指令在图像处理中的应用
目前我只能实现简单的矩阵相乘,还有很多问题要向前辈请教。
学习:http://blog.csdn.net/jaych/article/details/50346075、http://blog.csdn.net/jaych/article/details/50346225
参考文献:
http://blog.csdn.net/ccjjnn19890720/article/details/7291228#
http://www.cnblogs.com/xylc/p/5410517.html
阅读全文
0 0
- 初识neon指令
- ARM NEON 指令
- ARM NEON 指令
- ARM和NEON指令
- Neon指令C模拟器
- Android NEON指令学习
- ARM和NEON指令
- neon指令数据解析
- ARM Neon指令
- ARM和NEON指令
- NEON指令集综述
- ARM和NEON指令
- NEON指令集
- arm neon 指令集
- neon指令速查
- ARM和neon指令集
- ARM与NEON指令加速
- math-neon基于NEON指令的数学库
- 【NOIP2017提高A组冲刺11.5】总结
- 我的学习记录26
- unity简介
- 习题6.1(3)
- Qt中漂亮的几款QSS收藏
- 初识neon指令
- MyBatis(一)基础组件
- Android闹钟设置的解决方案
- 机器学习相关基础~
- 2017.11.05离线赛总结
- 蓝桥杯 算法提高 现代诗如蚯蚓
- 习题5
- 从零开始前端学习[44]:工欲善其事必先利其器,了解下js的调试console下的函数,与alert弹出框
- 第一次注册