ARM NEON
文章平均质量分 90
亦梦云烟
高性能计算工程师
展开
-
ARM NEON优化6.GCC汇编指令的使用
C/C++代码最终都是被编译成汇编代码然后翻译成机器指令,编译器一般都会对代码进行优化,但往往优化的效果不是最高效的。针对最核心的计算部分仍然需要使用汇编指令编写。在程序中使用汇编一般有三种方式:1.使用汇编源码,一般为.s文件,定义汇编函数,这种方式比较繁琐,需要用户自己维护栈,很容易出错。2.GCC内嵌汇编,由__asm__关键字定义汇编代码,嵌入在C/C++函数内部。一般使用第二种方式进行优化性能计算部分代码,本文介绍如何在GCC中嵌入ARM汇编。GCC ASM声明...原创 2021-11-10 23:19:03 · 1253 阅读 · 0 评论 -
ARM NEON优化5.图像旋转
对灰度图进行向右旋转90度,需要至少遍历访问所有元素一遍,时间复杂度为o(mn),利用NEON加速可以并行读取多个元素,虽然没有改变时间复杂度,但常数因子减小了。问题描述针对灰度图进行旋转,假设输入图像尺寸为Height*Width,转换后的图像尺寸为Width*Height。转换效果如下图所示:转换后的图像坐标对应关系如下:C代码实现int GrayImageRotation90(uint8_t * in,uint8_t* out, int height.原创 2020-12-13 16:03:22 · 1895 阅读 · 2 评论 -
ARM NEON优化4.RGB图像转灰度图
问题描述灰度图像是用不同饱和度的黑色来表示每个图像像素,用0~255之间的数表示“灰色”的程度,比如0表示黑色,255表示白色,RGB值与灰度图之间的转换公式如下:一幅640*360*3的图像,转换成灰度图需要计算69万次浮点乘法运算,进行优化显得非常必要,但该转换算法最低的复杂度是O(n),无法从算法计算算法上进行优化了,但是,可以通过将浮点计算转成成定点整数计算来提高计算速度,另外还可以将除法计算转换为位操作进一步提高计算速度。对上面的公式进行16位定点转化:.原创 2020-12-13 15:53:38 · 908 阅读 · 0 评论 -
ARM NEON优化3.RGB Packed转RGB Planar
问题描述RGB Packet图像格式在内存中的排布顺序为 R, G, B, R, G, B,...,每个像素都是由连续的三个字节按RGB的顺序组成(8bit每像素的图像)。现在,我们想要将RGB的各个通道分离开,数据在内存中的排布变成R,R,R...,G,G,G,...,B,B,B...。如下图所示:C代码实现基本的C语言处理该问题代码如下:int RGB_Packed2Planar(uint8_t * packed, uint8_t* planar, int height,原创 2020-12-13 13:21:16 · 2754 阅读 · 0 评论 -
ARM NEON优化2.NEON基本数据类型与基本指令集
目录一. 基本数据类型1.1 64bit数据类型1.2 128bit数据类型1.3 结构化数据类型二. 基本指令集2.1 初始化寄存器vcreatevdupvmov2.2 加载数据进寄存器vldvld_lane2.3 存储寄存器到内存vstvst_lane2.4 读取/修改寄存器数据vget_lanevget_lowvget_highvset_lane2.5 数据重排vextvtblvrevvtrnvzi原创 2020-12-09 23:41:11 · 5504 阅读 · 0 评论