17

GCC でコンパイルされた ARM C/C++ コードのパフォーマンスの最適化に取り組んでいます。CPU は Tegra 3 です。私が知っているように、フラグ-mthumbは古い 16 ビット Thumb 命令を生成することを意味します。-marmさまざまなテストで、に対してを使用するとパフォーマンスが 10 ~ 15% 向上しました-mthumb

-mthumb互換性とパフォーマンスのためにのみ使用されますが、-marm一般的には優れていますか? Android-cmake-mthumbが Release モードと-marmDebug で使用されているため、質問しています。これは私にとって非常に紛らわしいです。

4

2 に答える 2

27

Thumb は古い命令セットではなく、実際には新しい命令セットです。現在のリビジョンは Thumb-2 で、16/32 ビットの命令セットが混在しています。Thumb1 命令セットは、元の ARM 命令セットの圧縮バージョンです。CPU は命令をフェッチし、それを ARM に解凍してから処理します。最近 (ARMv7 以降)、Thumb-2 は、パフォーマンスが重要なコードやシステム コード以外のすべてに好まれています。たとえば、GCC はデフォルトで ARMv7 用の Thumb2 を生成します (Tegra3 と同様)。これは、16/32 ビット ISA によって提供されるコード密度が高いため、icache の使用率が向上するためです。しかし、これは通常のベンチマークで測定するのが非常に難しいものです。なぜなら、ほとんどのベンチマークはとにかく L1 icache に収まるからです。

詳細については、Wikipedia サイトを確認してください: http://en.wikipedia.org/wiki/ARM_architecture#Thumb

于 2012-06-16T17:58:01.203 に答える