圧縮命令セット、または単に圧縮命令は、マイクロプロセッサの命令セットアーキテクチャ(ISA)のバリエーションであり、命令をよりコンパクトな形式で表現できます。実際のほとんどの例では、圧縮命令は、通常は 32 ビット命令を使用するプロセッサでは 16 ビット長です。16 ビット ISA は、完全な 32 ビット ISA のサブセットであり、独立した命令セットではありません。形式が小さいと、いくつかのトレードオフが発生します。一般に、使用できる命令が少なくなり、プロセッサ レジスタも少なくなります。
このコンセプトはもともと日立が、SH-5バージョンで16ビット命令から32ビット命令に移行した際にSuperH RISCプロセッサ設計のコード密度を向上させる方法として導入したものです。新しい設計には2つの命令セットがありました。1つは新しい設計のISA全体へのアクセスを提供するもので、もう1つはSHcompactと呼ばれるより小さな16ビット命令セットで、これによりプログラムをより小さなメインメモリで実行できるようになりました。現在では、最小のシステムでもメモリがコンセプトを生み出したシステムよりも桁違いに大きくなっているため、サイズはもはや主要な懸念事項ではありません。今日では、メインメモリへのアクセス回数が減り、それによってモバイルデバイスのエネルギー使用量が削減されるという利点があります。
日立の特許は、 Arm Ltd.によって同社のプロセッサ用にライセンス供与され、そこでは「Thumb」と呼ばれていました。同様のシステムは、MIPS16e およびPowerPC VLE に見られます。元の特許は期限切れであり、その概念は、最初からそれを使用することを意図して設計されたRISC-V を含む、多くの最新の設計に見られます。64ビット コンピューティングの導入により、この用語はそれほど広く使用されなくなりました。これらのプロセッサは一般に 32 ビット命令を使用し、技術的には圧縮 ISA の一種ですが、ほとんどが同じプロセッサ ファミリの 32 ビット バージョンの古い ISA の修正バージョンであるため、実際の圧縮はありません。
コンセプト
マイクロプロセッサは、命令を一連のビットとしてエンコードします。これは通常、8 ビットのバイト に分割されます。たとえば、MOS 6502では、ADC命令はオペランド値とアキュムレータにすでに格納されている値との間で 2 進加算を実行します。プロセッサがオペランドを見つける場所はさまざまです。メイン メモリにある場合もあれば、特別なゼロ ページにある場合もあれば、「10」のような明示的な定数である場合もあります。これらのバリエーションごとに、異なる 8 ビット命令、つまりオペコード が使用されています。定数 10 をアキュムレータに追加する場合、命令はメモリ内で としてエンコードされ、$0A は 10 進数値 10 の16 進数$69 $0Aです。代わりにメイン メモリの $4400 に格納されている値を加算する場合は、 となり、リトルエンディアンのアドレスになります。[1]$6D $00 $44
メモリアドレスが16ビット長であるため、2番目の命令には3バイトが必要であることに注意してください。命令に応じて、1、2、または3バイトを使用します。[1]これは現在では可変長命令セットとして知られていますが、メインフレームやミニコンピュータを含むほとんどのプロセッサが通常この概念の何らかのバリエーションを使用していたため、この用語は当時は一般的ではありませんでした。 1970年代後半にマイクロプロセッサが8ビット形式から16ビット形式に移行し始めたときでも、この概念は一般的であり続けました。Intel 8088は、アドレッシングモードに応じて0〜6バイトの追加バイトが続く可能性のある8ビットオペコードを使用し続けました。[2]
可変長命令が廃れ始めたのは、32 ビット システムへの移行中、特にRISCコンセプトがプロセッサ設計に浸透し始めた頃でした。たとえば、 MIPS アーキテクチャでは、すべての命令は単一の 32 ビット値で、最上位ビットに 6 ビットのオペコードがあり、残りの 26 ビットはさまざまな方法で使用され、限られたアドレッシング モード セットを表します。ほとんどの RISC 設計は同様です。固定長命令形式への移行は、初期の RISC 設計のパフォーマンスを支える重要な設計コンセプトの 1 つでした。以前のシステムでは、命令の読み取りに 1 ~ 6 メモリ サイクルかかることがあり、データが準備される前にプロセッサが命令を実行しないように、ロジックのさまざまな部分間の配線が必要でした。RISC 設計では、操作は通常 1 サイクルで済むため、デコードが大幅に簡素化されます。これらのインターロック回路の節約は、代わりに追加のロジックやプロセッサ レジスタの追加に適用され、パフォーマンスに直接影響します。[3]
コード密度
RISC アプローチの欠点は、多くの命令が 4 バイトを必要としないことです。たとえば、論理シフト レフト命令は、レジスタ内のビットを左にシフトします。6502 には算術レジスタ A が 1 つしかなく、この命令は 8 ビットのオペコードで完全に表すことができます$06。[1]レジスタがもっと多いプロセッサでは、必要なのはオペコードとレジスタ番号、つまり 4 ビットまたは 5 ビットだけです。たとえば、MIPS では、命令に必要なのは 6 ビットのオペコードと 5 ビットのレジスタ番号だけです。しかし、ほとんどの RISC 設計の場合と同様に、命令は 32 ビットをフルに使用します。このような種類の命令は比較的一般的なので、RISC プログラムは一般に、可変長プロセッサ上の同じプログラムよりも多くのメモリを消費します。[4]
RISC設計の中で注目すべき、特に初期の例外はIBM 801アーキテクチャで、5つの命令フォーマットが維持されています。2つは16ビット命令長を使用し、3つは32ビット命令長を使用します。[5] : 10 レジスタオペランドのみを使用するシフト命令など、より少ないスペースを必要とする命令では、より短い16ビット命令フォーマットが使用されます。[5] : 51–58
RISC の概念が初めて登場した 1980 年代には、プログラム サイズの増加が一般的な不満点でした。命令が占める領域が増えると、システムはメモリから命令を読み取るのに多くの時間を費やす必要があります。これらの余分なアクセスによって、実際にプログラムの速度が低下する可能性があると示唆されました。広範なベンチマークにより、RISC はほぼすべてのケースで高速であることが最終的に実証され、この議論は消えました。ただし、パフォーマンスに関係なくメモリ使用量が懸念されるケースがあり、それは小規模システムと組み込みアプリケーションです。2000 年代初頭でさえ、DRAMの価格が高かったため、コストに敏感なデバイスではメモリが制限されていました。日立は、この市場向けにSuperH設計を開発しました。[6]
初期の SuperH 設計、SH-1 から SH-4 では、命令は常に 16 ビットを占めます。結果として得られる命令セットには、現実的な制限があります。たとえば、この設計では という形式の 2 オペランド演算しか実行できませんがA = A + B、当時のほとんどのプロセッサでは という 3 オペランド形式が使用されていましA = B + Cた。オペランドを 1 つ削除すると、命令から 4 ビットが削除されます (レジスタは 16 個あり、4 ビット必要)。ただし、このため、演算コードの記述が多少複雑になります。SuperH がターゲットとする市場にとって、これは簡単に妥協できるものでした。16 ビット形式の大きな利点は、命令キャッシュが、任意の量のSRAMに対して 2 倍の命令を保持できるようになったことです。これにより、システムのパフォーマンスが向上しますが、1 つの 3 オペランド命令で実行できる操作を実行するために必要な追加命令を使用することで、その一部は緩和される可能性があります。[7]
SH-5では、日立は32ビット命令フォーマットに移行した。以前の設計との下位互換性を保つために、2番目の命令セットであるSHcompactが組み込まれた。SHcompactは、元の16ビット命令を内部の32ビット命令に一方向にマッピングした。以前のマイクロコードプロセッサのように複数の命令を実行するのではなく、単に同じ命令のより小さなフォーマットであった。これにより、元の小さなフォーマットのプログラムを新しいSH-5に簡単に移植することができ、命令デコーダの複雑さはほとんど増加しなかった。[8]
ARM は命令設計の側面に関する日立の特許を多数ライセンスし、それを使用して Thumb 命令を実装しました。名前に「T」が付く ARM プロセッサには、元の 32 ビット バージョンに加えてこの命令セットが含まれており、BXコマンドを使用して 32 ビット モードから 16 ビット モードにオンザフライで切り替えることができます。Thumb モードでは、ARM の通常の 16 個のレジスタのうち上位 8 個のレジスタのみが表示されますが、これらは 32 ビット モードと同じレジスタであるため、これらのレジスタを使用して Thumb と通常のコード間でデータを渡すことができます。すべての Thumb 命令は 32 ビット バージョンの対応物であるため、Thumb は元の ISA の厳密なサブセットでした。[9] ARM のモデルと SuperH の重要な違いの 1 つは、Thumb が 16 ビット形式で 3 オペランド命令をいくつか保持していることです。これは、表示されるレジスタ ファイルを 8 つに減らすことによって実現されたため、レジスタを選択するのに必要なビットは 3 つだけです。[10]
MIPSアーキテクチャは、 Thumbに非常によく似たMIPS16eにも同様の圧縮セットを追加しました。これも8つのレジスタのみを使用できますが、これらは単に最初の8つではありません。MIPSの設計ではレジスタ0をゼロレジスタとして使用するため、16ビットモードのレジスタ0と1はMIPS32レジスタ16と17にマップされます。システムの他のほとんどの詳細はThumbに似ています。[11]同様に、最新バージョンのPower ISA(旧PowerPC)には、基本的に同一の「VLE」命令が含まれています。これらはFreescale Semiconductorの要請により追加されたもので、同社のPowerへの関心は主に組み込み市場を対象としています。[12]
現代の使用
2015年頃から、多くのプロセッサが64ビット形式に移行しました。これらは通常、32ビット命令形式を維持しながら、内部レジスタを64ビット形式に拡張しました。元の定義では、これらは圧縮命令であり、基本データワードサイズよりも小さいためです。ただし、この用語はこの文脈では使用されていません。圧縮命令への言及は常に16ビットバージョンを指します。[13]
参考文献
引用
- ^ abc Verts 2004年。
- ^ 「ARM アーキテクチャを理解する」。informIT。2010年 8 月 23 日。
- ^ Bacon, Jason. 「MIPS命令コードフォーマット」。コンピュータサイエンス315講義ノート。2019年7月17日時点のオリジナルよりアーカイブ。 2021年4月9日閲覧。
- ^ ウィーバー&マッキー 2009年。
- ^ ab System 801 Principles of Operation (PDF) . International Business Machines. 1976年1月16日. 2024年11月11日閲覧。
- ^ 「16ビット命令の効果」Renesas .
- ^ スーパーH 1996.
- ^ SH-5 CPU コア、第 1 巻: アーキテクチャ(PDF)。p. 8。
- ^ ルミュー 2004.
- ^ 「Thumb命令の概要」ARM7TDMIテクニカルリファレンスマニュアル。
- ^ MIPS16e2 アプリケーション固有拡張テクニカルリファレンスマニュアル。MIPS。2016 年 4 月 26 日。
- ^ Power ISA V2.07。IBM。
- ^ Alpha アーキテクチャ ハンドブック(PDF) . DEC. 1996 年 10 月. p. 1.4.
文献
- Weaver, Vincent、McKee, Sally (2009)。新しいアーキテクチャのコード密度に関する懸念(PDF)。ICCD 2009。
- Verts, William (2004 年 1 月 30 日)。「6502 プロセッサ」(PDF)。マサチューセッツ大学。
- Lemieux, Joe (2004 年 9 月 24 日)。「ARM サムの紹介」。埋め込み。
- SuperH RISC Engine SH-1/SH-2 (PDF) . 日立アメリカ. 1996 年 9 月 3 日.
