该系统基于CORTEX-A和Linux系统。在Linux中使用的编译器是GCC。本文采用通用C语言优化和NEON编程优化对图像相关函数进行了优化,并进行了测试比较。方差函数方差代码在优化前后进行比较,如图所示。
对于一般的C语言级优化,对于矩阵数据,如图像,主要用于循环优化。以第一个循环为例,如图所示,C语言级优化的代码如图所示。
从优化结果可以看出,回路跳数被有效地减少到。但是也可以发现,加法运算的数目与原始运算的数目几乎相同,并没有减少。在对其他循环函数和其他函数进行优化之后,测试时间对比如表所示。
从表中的数据可以看出,使用公共C语言边界优化并没有明显的改进,因为Linux系统使用GCC编译器进行编译,在选择-O级优化时,循环已经优化,所以速度还没有达到明显改善。
GCC编译器从.版本开始,为ARM氖技术提供了良好的支持,例如GCC中的函数:
Unt xyt vADuju(uTIN xxyt,utIntxxyt),对应于宿语言:VADD。I d,d,d。uintx_t表示两个位无符号整数的数据类型。当在GCC编译器中使用NEON技术时,需要包括头文件arm_neon.h.NEON增强指令集,该指令集只有在发布了Cortex-A系列后才可用,因此ARM不能使用NEON技术。比较第一个for循环之后的方差函数的第一个差异如图所示。
从优化的程序代码中,我们可以看到循环跳数是,但是由于使用了与氖有关的VLDQUU函数,可以在四位的NEN寄存器中加载位的值,调用VADQQUU可以同时添加四个数据,在一个指令周期内完成F。我们的加法运算,加法运算的次数是,大大提高了运算性能。
类似的方法可以用来优化第二个for循环,但是调用的函数略有不同,具体参考了GCC的技术文档,详细描述了使用。
与此方法类似,其它函数如预处理、角点、相关函数优化等都集中在循环码和并行码的优化上。
利用ARM NEON技术,对图像处理等矩阵运算进行并行优化,可以大大提高处理速度。优化后,速度比优化前提高了两倍,比ARM快了八倍。SIR和其他多媒体处理算法。
免责声明:本网站内容来源网络,转载是出于传递更多信息之目的,并不意味赞成其观点或证实其内容真实性。转载稿涉及版权等问题,请立即联系网站编辑,我们会予以更改或删除相关文章,保证您的权利。
作者:徐州百都网络 | 来源: | 发布于:2022-04-03 11:00:52