GCC -mthumb反对-marm

exb*_*ker 15 optimization gcc arm

我正致力于使用GCC编译的ARM C/C++代码的性能优化.CPU是Tegra 3.我知道标志-mthumb意味着生成旧的16位Thumb指令.在不同的测试中,我使用-marm对-mthumb的性能提高了10-15%.

-mthumb仅用于兼容性和性能 - marm总是更好吗?我问,因为android-cmake在Release模式下使用了-mthumb而在Debug中使用了-marm,这对我来说非常困惑.

Nic*_*rth 26

Thumb不是较旧的指令集,但实际上是较新的指令集.当前版本是Thumb-2,它是一个混合的16/32位指令集.Thumb1指令集是原始ARM指令集的压缩版本.CPU将获取指令,将其解压缩到ARM中然后处理它.目前(ARMv7及更高版本),Thumb-2是除性能关键或系统代码之外的所有内容的首选.例如,GCC默认会为ARMv7生成Thumb2(与Tegra3一样),因为16/32位ISA提供的更高代码密度可以更好地利用icache.但这在普通基准测试中非常难以衡量,因为大多数基准测试无论如何都适合L1 icache.

有关更多信息,请访问维基百科网站:http://en.wikipedia.org/wiki/ARM_architecture#Thumb

  • 很好的答案。Gameboy Advance 大部分为 16 位,非零等待状态,数据总线和拇指性能比 ARM 好得多。拇指比手臂接受更多指令,因此在这方面速度较慢。拇指2是拇指的扩展,你仍然有拇指指令,拇指2使用以前的未定义并且许多是32位指令。 (2认同)