本文主要是介绍记ARM NEON指令集深度优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近和同事一直讨论优化的事情,优化这个概念是模糊的,通常我们都是为了达到某种性能才考虑优化,当某种算法跑在CPU上较为消耗算力,达不到性能指标,可能就要优化。如果我们的代码是用JAVA编写的,那么可以使用Native(C/C++)语言替代其实现。如果Native语言还是无法满足性能要求,那么我们首先想到的应该是如何将Native实现为最优的版本,比如可以使用空间换时间—将一部分固定值先计算好,通过查表的方式实现。
当Native版本也无法满足要求的时候,这个时候就要考虑使用其他硬件资源了,比如使用GPU分担一些算力,这需要CPU和GPU之间做好数据同步。现在很多ARM CPU实际上都是支持NEON指令集的,具体一点就是单指令多数据,官方的描述为ARM NEON是适用于ARM Cortex-A系列处理器的一种128位SIMD(Single Instruction, Multiple Data,单指令、多数据)扩展结构。通俗一点讲就是一条指令可以处理多条数据。我今天介绍的正是NEON优化的方式。
为了降低大家书写NEON指令的难度,arm_neon.h这个头文件定义了很多常用的数据结构和包装好的指令。但总体来说使用这个头文件定义的数据结构和函数确实降低了使用NEON的门槛,但效果却不尽如人意。反汇编后得到的代码并非最优的。
比如下面一段使用NEON代码优化的例子。
int *testDataArr1 = new int
这篇关于记ARM NEON指令集深度优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!