neon 指令 c语言,NEON初步使用

前言

指令集并行是CPU的优化加速的一个方向,在ARM芯片主要是利用NEON指令集实现指令集并行

NEON简介

NEON就是高级SIMD,单指令多数据,适用于图像、音频等数据处理。ARMv6就叫SIMD,ARMv7开始叫NEON,aarch64又有点不一样,下文只针对ARMv7或者ARMv8 aarch32的NEON进行

022ee42be2c1aa130928998a20c68023.png

NEON有32个64位长的寄存器(D0-D31,每个D可以装2个浮点数据),也可以看做为16个128位长的寄存器(Q0-Q15,每个Q可以装4个浮点数据),所以一句指令最多可以同时实现4个乘法操作,理论速度可以提升4倍

4919cab4e78d80ae11c6a34f293d8732.png

如何使用NEON

三种使用NEON的方法

库函数

官方给了2个库可以使用,OpenMax DL和Ne10,后者在github上有,也是我用来参考学习的主要对象

汇编函数

用汇编语句编写.s文件

在C/C++代码中嵌入汇编语句(inline assembly)

内联函数(intrinsics function)

在C代码中直接嵌入内联函数用以实现功能,但是性能会取决于编译器和具体设备

023fdc1e1b6a2c99b30a188f07b906e4.png

汇编函数基础

想要高效利用NEON的话,汇编是避不开的。下面是ARM汇编相关的准备知识

参考资料

汇编基础原理

b、bx、bl指令

arm汇编指令

GNU ARM Assembler Quick Reference

特殊寄存器

9527e01ea3f68bc416a08c096ae0c6d1.png

TODO: sb、ip是干嘛的

汇编函数文件directive(指令、

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值