サム32ビットの命令セットと比較した場合、サムの16ビット命令セット(サム2の拡張はまだありません)は命令のサイズが半分であるため、スペースが少なくなりますが、一般にパフォーマンスが低下します。それは腕の場合と同じことをするより多くの指示が必要です。命令セットには機能が少なく、ほとんどの命令はレジスタr0〜r7でのみ動作します。 Apples to Apples比較同じことをするためのより多くの指示は遅くなります。
thumb2拡張機能は以前は未定義のサム命令を受け取り、32ビットのサム命令を作成します。 thumb2拡張のセットが複数あることを理解してください。おそらくARMv6mは数十を追加します。 ARMv7mはサム命令セットに150命令のようなものを追加しますが、ARMv8または将来のものについてはわかりません。だから、ARMv7mを前提にして、彼らはあなたが経験できることとARMでできることとのギャップを橋渡してきました。したがって、thumb2はサムのように縮小されたARM命令セットですが、縮小されません。だから、同じことをやっているARMと比較して、同じことをthumb2(想像を絶すると仮定します)で実行するために、より多くの指示が依然としてかかるかもしれません。
これは、腕の中の1つの指示とそれに相当する親指の問題を味わうことができます。
ARM
and r8,r9,r10
THUMB
push {r0,r1}
mov r0,r8
mov r1,r9
and r0,r1
mov r1,r10
and r0,r1
mov r8,r0
pop {r0,r1}
今、コンパイラは、コンパイラは、それが親指を狙っている知っているし、他のレジスタを選択することによって違うことをするだろう、それを行うwouldntは。あなたはまだ少ないレジスタと命令当たりが少ない特徴があります。
mov r0,r1
and r0,r2
それでもオペランドを変更せずに、一緒に2つの命令/実行サイクルへと二つのレジスタをとり、第3のレジスタに結果を置きます。 Thumb2には3つのレジスタがあるため、thumb2拡張を使用して単一の命令に戻ります。また、thumb2命令は、親指がr0〜r7に制限されている3つのレジスタのいずれかでr0〜r15を許可します。
ARMv5アーキテクチャリファレンスマニュアルを参照してください。各サム命令の下に、同等のARM命令が表示されます。その後、そのARM命令に行き、サム命令ではできないそのアーム命令でできることを比較してください。サム命令(thumb2ではなく)がARM命令と1対1の関係を持つ一方向パスです。すべてのサム命令には同等のアーム命令があります。すべてのアーム命令に同等のサム命令があるわけではありません。このエクササイズでは、サム命令セットを使用するときのコンパイラの制限を確認することができます。次に、ARMv7mアーキテクチャリファレンスマニュアルを入手し、命令セットを見て、 "すべてのサムバリアント"エンコーディング(ARMv4Tを含むもの)とARMv6および/またはv7に限定されたものを比較し、サムの間の機能の拡張を参照してくださいthumb2だけでなく、親指を持たない指示を持つthumb2のみの指示も含む。これは、コンパイラが親指と親指の間で動作しなければならないことを明確にするはずです。 thumb + thumb2と完全に壊れたARM命令(ARMv7 ARはそれが呼び出されているのですか?また、thumb2はARMにもっと近づきますが、すべての命令で条件の例が失われるので、経験則による実行はコードの分岐との比較になります。ARMでは分岐なしでif-then-elseを持つことがあります。
パフォーマンスは常に相対的です。 「親指」のコードが「腕」よりも優れている場合が多い。主にメモリバスがボトルネックの場合。一般に、「親指」は多くのレジスタを持たないので、命令セットがよりコンパクトであるにもかかわらずアルゴリズムによっては、レジスタをスピルするためにより頻繁にメモリにアクセスしなければならない。 –
私は配送トラックAと配送トラックBがAの半分の大きさであれば配送されるものはトラックAに収まるが、トラックBには2つ大きいのでトラックBを2回以上運ぶ同じ仕事。 ThumbはARMと同じくらい効率的ではありませんが、ARMと同じことを行うには10〜15%多くの命令に似ています。 –
関連項目:Stackoverflowの[Gcc -mthumb vs -marm](http://stackoverflow.com/questions/11062936/gcc-mthumb-against-marm)、[Arizona paper](http://www.cs.arizona .edu /〜arvind/papers/lctes02.pdf)を参照してください。 –