2012-06-16 16 views
9

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

-mthumbは、互換性とパフォーマンスのためにのみ使用されます。 android-cmakeがリリースモードで-mthumbを使用し、デバッグで-marmが使用されているので、私には非常に混乱しています。

答えて

21

Thumbは古い命令セットではありませんが、実際は新しい命令セットです。現在のリビジョンは、混合16/32ビット命令セットであるThumb-2です。 Thumb1命令セットは、元のARM命令セットの圧縮バージョンでした。 CPUは命令をフェッチし、ARMに展開して処理します。最近(ARMv7以上)、Thumb-2は、パフォーマンスクリティカルまたはシステムコード以外のすべてに適しています。たとえば、GCCでは、16/32ビットISAによって提供されるコード密度が高いほど、より良いICA利用が可能になるため、ARMv7のThumb2(Tegra3のように)をデフォルトで生成します。しかし、これは、通常のベンチマークでは測定が非常に難しいものです。なぜなら、ほとんどのベンチマークはL1 icacheに適合するからです。 http://en.wikipedia.org/wiki/ARM_architecture#Thumb

+1

優れた答え:詳細については

は、ウィキペディアのサイトをご確認ください。ゲームボーイアドバンスは主に16ビットであり、ゼロ待機状態ではなく、データバスとサムのパフォーマンスはARMよりもはるかに優れていました。親指は腕よりも指示が多いので、その点では遅いです。 thumb2はサムの拡張であり、あなたはまだサムの説明を持っており、thumb2は以前の定義を使わず、多くは32ビットの命令です。 –

+0

すばらしきQ&A – tniles09