我想知道是否有人对ARM VS上iPhone 3GS的Thumb代码性能的任何确凿的数据。具体地,对于非浮点(VFP或NEON)码 - 我知道的具有浮动在Thumb模式点性能的问题

是否有其中的更大的ARM指令额外的代码大小成为性能危害问题?换言之,如果相对于可用存储器我的可执行代码是相对小的,是否有任何的测量性能差,以接通Thumb模式?

我想问的原因是,虽然我可以在Xcode中使用“-marm”选项的NEON特定的源文件,支持ARM,这打破了模拟器建立,因为海合会正在建设86。我不知道我是否应该关掉“编译拇指”,并用它做。

有帮助吗?

解决方案

我不知道的iPhone,但毯子声明拇指慢于ARM是不正确的。给出32位宽的零等待状态存储器,拇指会有点慢,像5%或10%的数字。现在,如果它是的Thumb2这是一个不同的故事,据说的Thumb2可以跑得更快,我不知道iPhone有我的猜测是,它不是的Thumb2。结果 如果您没有用完零等待状态,32位内存那么你的结果会有所不同。一件大事是32位宽度的存储器。如果你是一个16位宽的总线像GameBoy Advance的家庭上运行,并有一些等待该内存或ROM状态,然后拇指可以轻松地进行竞选高性能ARM即使它需要更多的Thumb指令来执行相同的任务。

测试你的代码!不难发明一种测试,为您提供有兴趣或没有结果。这是因为容易证明手臂吹走了大拇指,因为它是拇指吹走了手臂。谁在乎根据Dhrystones是什么,它是如何快速它运行代码今天事项。

我已经找到了在ARM测试代码性能的岁月是你的代码和编译器是很重要的因素。因此,拇指在理论上是慢了百分之几,因为它使用了百分之几的说明的[执行相同的任务。但是你知道吗,你最喜欢的编译器可能是可怕的,通过简单地切换编译器,你可以更快地运行数次(GCC属于这一类)?或使用相同的编译器和混合了优化选项。无论哪种方式,你可以通过阴影聪明有关使用工具的ARM / Thumb差异。你可能知道这一点,但你会惊讶地知道有多少人认为他们知道如何编写代码的一种方式是唯一的途径,并获得更好的性能,唯一的办法就是抛出这个问题更多的内存或其他硬件。

如果您是在iPhone上我听到那些人正在使用LLVM?我喜欢在许多方面LLVM的概念,并很渴望当它成熟时,用它作为我的日常驾驶,但发现它产生的代码,为10-20%(或更多)慢于特定的任务,我在做什么。我是在单臂模式,我没有尝试拇指模式,我有上L1和L2缓存。如果我没有真正比较拇指武装我可能会看到拇指慢百分之几的缓存测试,但如果你认为它(这我不是当时的兴趣),你可以缓存比ARM代码两倍多拇指代码可能意味着,即使有更整体的百分之几码的任务,通过缓存显著更多的它,并降低平均提取时间拇指可明显加快。我可能会去尝试。

如果您正在使用LLVM,你有多个地方的其他问题进行优化。由C将字节码可以优化,然后可以优化自身的字节码,然后可以合并所有的字节码和字节代码将汇编可以优化优化的时候,作为一个整体,然后。如果你也只有3源文件,并且假设有每个机会只有两个优化级别,它们是:不要优化或不优化,用gcc你将有8个组合进行测试,与LLVM的实验次数数量级更高的几乎是以命令。比你能真正运行,几百到几千。对于一个测试,我正在运行,而不是opimizing在C字节码一步,那么没有优化的字节码而分开,但字节码文件合并成一个大的(德国)后优化一个。途中具有LLC优化到臂产生最好的结果。

底线...测试,测试,测试

编辑:

我一直在使用这个词的字节码,我认为正确的说法是在LLVM世界位码。在.BC文件中的代码是什么我的意思是......

如果您选自C打算使用LLVM到ARM,有在中间位码(BC)。有命令行选项对C优化公元前STE页。公元前后可为每个文件优化,公元前公元前。如果您选择,您可以合并两个或两个以上公元前文件到更大的BC文件,或者只是把所有的文件合并成一个大的BC文件。然后每个这些组合的文件也可以被优化。

我的理论,只有有几个是远远落后的测试用例是,如果你,直到你有一个大的BC文件的完整计划/项目没有做任何优化,优化器的最高金额,如果信息与完成其工作。因此,这意味着由C到公元前无优化。然后,所有的BC文件合并成一个大文件的BC。一旦你的整个事情作为一个大文件BC然后让优化发挥其优化步骤,最大限度地发挥信息和优化的希望质量。然后,从公元前优化文件ARM汇编去。为有限责任公司的默认设置是对,你想允许的优化,因为它是一个知道如何为目标优化的唯一步骤优化。对BC公元前优化是通用的,针对特定的(AFAIK)。

您还是要测试,测试,测试。来吧,与步骤之间的优化试验,看看它使你的程序运行更快或更慢。

其他提示

请参阅从ARM /拇指性能/代码尺寸/功率消耗权衡此PDF。

简介ARM和Thumb的定向选择 说明结果 - 计算机科学系,美国亚利桑那州通过拉吉夫·古普塔大学

Thumb代码将基本上总是比等效ARM慢。在一个情况下Thumb代码可以是一个很大的性能取胜是如果它使你的代码嵌入到片上存储器或高速缓存之间的差别。

这是很难在性能上的差异给出确切的数字,因为它完全依赖于你的代码实际上做。

可以在XCode中设置每个架构编译器标志,这将避免折断模拟器构建。请参阅Xcode的构建设置文档。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top