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

前言

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

NEON简介

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

neon 指令 c语言,NEON初步使用_第1张图片

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

neon 指令 c语言,NEON初步使用_第2张图片

如何使用NEON

三种使用NEON的方法

库函数

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

汇编函数

用汇编语句编写.s文件

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

内联函数(intrinsics function)

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

neon 指令 c语言,NEON初步使用_第3张图片

汇编函数基础

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

参考资料

汇编基础原理

b、bx、bl指令

arm汇编指令

GNU ARM Assembler Quick Reference

特殊寄存器

neon 指令 c语言,NEON初步使用_第4张图片

TODO: sb、ip是干嘛的

汇编函数文件directive(指令、

你可能感兴趣的:(neon,指令,c语言)