【问题标题】:Writing android app parts in assembly在程序集中编写 android 应用程序部件
【发布时间】:2016-05-04 20:30:29
【问题描述】:

我正在使用 Marmalde 和 C/C++ 为 android 编写游戏。 现在我想在汇编程序中编写一些重要的部分来提高性能。 但我想知道这个应用程序是否可以在大多数安卓设备上运行? (约 90%) 因为通常汇编代码取决于处理器,并且不同的安卓手机可能有不同的处理器,例如 Intel 或 ARM,所以我必须为每个不同的处理器用不同的汇编语言编写这些部分!?

【问题讨论】:

  • 在大多数情况下,人类无法编写比编译器/优化器更好的 asm。所以一般来说,你应该远离自己写 asm。与仅将其留给工具相比,您可能会产生更糟糕的代码和更多的问题。 (警告:自负可能会干扰)。
  • 错误的尝试。你不会写出比编译器更好的 ASM。
  • 可能被误导了。您可以针对非常特定的代码片段(想到音频混合和过滤器)击败编译器,但总的来说,这通常是不值得的。
  • 谢谢,但这实际上不是我的问题。我想知道我是否需要再次为每个处理器(英特尔、ARM...)编写汇编代码?
  • 答案是肯定的。汇编映射(非常非常非常)非常接近指令集,并且 ARM 和 x86 指令集非常不同。虽然拥有一个映射到不同 ISA 的简单程序集可能是一个有趣的想法,但听起来它并不真正有用,因为在这一点上,你所做的只是一种蹩脚的语言,而不是接近金属,这样你就可以用可用的指令做一些高级语言无法很好地表达的事情。

标签: android c++ assembly arm marmalade


【解决方案1】:

是的,当然你必须为每个处理器 ABI编写汇编代码。

Android NDK 有specific support for different ABIs

请记住,虽然目前仅支持三个处理器系列(Intel x86/64、ARM 和 MIPS),但您必须针对所有不同的 ABI 而不是处理器系列本身。

您可以安全地丢弃 MIPS 设备,它们非常罕见。
英特尔设备主要是平板电脑,但也有一些手机。
绝大多数设备都是 ARM。

如果您查看官方的optimization guide from ARM v8 或非常有用的optimization guide for Intel,您会发现编写好的汇编代码实际上需要一些时间,这不仅仅是让某些东西工作(您应该已经能够轻松做到这一点)。

提示
首先用 C++ 编写关键部分,然后查看反汇编,看看是否可以做得更好,或者是否可以识别一些次优模式。
只有在汇编中重写代码。

在进行此类微优化之前,请尝试使用更好的数据结构、更好的算法和更好的资源处理。

【讨论】:

  • 最后一句话是绝对正确的,总结了一切!
猜你喜欢
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 2013-03-20
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多