为ARM优化库

时间:2011-11-06 13:29:55

标签: optimization assembly arm cpu

我正在为Android编写应用程序,该应用程序使用库SoX。这个库是非常强大的ARM处理器负载。提示请:我可以在哪里阅读有关如何为ARM优化库的信息。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

从Amiga的MC68000开始,主要是ARM9E(ARMv5E),我一直在组装代码优化很长一段时间。 使用新的SIMD指令和饱和度ARM11很好。然后是Coretex。

你知道吗?与Coretex-A系列捆绑在一起的NEON从我身上夺走了优化ARM的整体动力。

开箱即用的未经优化的NEON代码运行速度比装配优化的ARM代码大约快5倍,并且它比ARM本身更容易:我必须努力工作才能使事情发生变化,NEON几乎总是有完全相同的拟合指令或一次对多个元素更加准确。

我读到除了双重发布功能之外,ARM指令时序在Coretex上发生了很大变化,这意味着我必须做很多事情而不是在ARM9上以获得最大性能,但老实说,我不在乎了。 NEON是要走的路。

bye-bye ARM

不要在ARM上浪费你的时间 - 尤其是NEON内在函数。开始学习NEON吧。

对NEON的精彩介绍:http://bit.ly/8XzPXM

答案 1 :(得分:1)

您尚未指定目标硬件。 Android设备的范围从低端ARMv5E处理器到最新的Tegra3。如果您希望代码在各种各样的设备上运行良好,那么您将需要支持ARMv5(没有NEON)。即使是Tegra2(目前最流行的Android平板电脑CPU)也缺少NEON支持。您可以在Android中使用“Fat binary”解决此问题,其中包含单个APK中的ARMv5和ARMv7代码。关于优化ARM代码的一些一般规则:

1)ARMv5 / ARMv6处理器具有微小的缓存 - 优化您的数据集以适应最小的空间并重用缓冲区而不是不断分配/释放它们以避免将它们从缓存中逐出

2)ARMv5 / ARMv6处理器只有4个写缓冲区。这意味着在紧密循环中,由于占用写缓冲区,写入字节或短路的速度大约是写入long的一半。

3)对于内存绑定数据处理循环,预取高速缓存(PLD指令)。它通常可以加快20-25%的速度。

4)对于操作位/字节的代码,在ASM中编写通常是个好主意,因为更高级别的语言在处理这种类型的数据方面做得不好。

L.B。