2016-11-01 28 views
8

私がSOの質問に書いた回答の中には、マイクロコードの指示があります。私はこれらが何であるか不思議でした。マイクロコード化された命令とは何ですか?

誰かがこれが何であり、なぜそこにいるのか説明できますか?

+4

マイクロコード化されたCPUは、高水準言語用のオペコードベースのインタプリタのように、露出された機械語の命令は、実行しやすい小さなステップに分解されます。 Wikipediaにはjargon-ful、[もっと長い説明](https://en.wikipedia.org/wiki/Microcode)がありますが、_real_の説明にはコンピュータアーキテクチャの教科書全体が必要です。 – zwol

答えて

14

CPUはマシンコードを読み取り、正しい実行ユニットに正しいデータを送信する内部制御信号にデコードします。

ほとんどの命令は1つの内部操作にマップされ、直接デコードすることができます。 (例えばx86の上、add eax, edxだけADD操作のために、整数ALUにEAXとEDXを送信し、EAXに結果を置きます。)

他のいくつかの単一の命令はより多くの作業を行います。例えばx86のrep movsmemcpy(edi, esi, ecx)を実装しており、ループするにはCPUが必要です。

命令デコーダがそのような命令を参照すると、内部制御信号を直接生成するのではなく、マイクロコードをマイクロコードROMから読み出す。

マイクロコード化された命令は


現代のx86 CPUは常に内部マイクロオペレーションにx86命令をデコード多くの内部動作にデコードするものです。この用語では、add [mem], eaxがロードされて[mem]からロードされ、ALU ADD操作が実行され、ストアが[mem]に戻っても、「マイクロコード化された」とカウントされません。別の例はxchg eax, edxであり、decodes to 3 uops on Intel Haswellです。興味深いことに、スクラッチレジスタとのやり取りに3つのMOV命令を使用することから得られるものとまったく同じではありません。ゼロレイテンシではないからです。

Intel/AMD CPUでは、マイクロコード化されたとは、複数のuopを直接生成するのではなく、マイクロコードシーケンサをオンにしてROMからパイプラインにuopsを供給することを意味します。

現在のIntel CPUでは、マイクロコードROMを使用せずにデコーダが直接生成できるものの上限は4 uops(fused-domain)です。 AMDも同じようにFastPathのシングルまたはダブル命令を持っていますが、具体的にはそのデコーダについて語っているin David Kanter's in-depth look at AMD Bulldozerで説明されているように、VectorPathまたはマイクロコードを超えています。

もう1つの例は、Intel Has Haswellのような最新のCPUでもマイクロコード化されたx86の整数DIV命令です。番号はWhy is this C++ code faster than my hand-written assembly for testing the Collatz conjecture?の私の答えを参照してください。

FP分割も遅くなりますが、1つのuopにデコードされるため、フロントエンドにボトルネックは生じません。 FP分割がまれでレイテンシのボトルネックの一部ではない場合、FP乗算と同じくらい安くなる可能性があります。 (実行がその結果を待つ必要がない、またはそのスループットのボトルネックなら、それはずっとに遅いです。)

整数の除算およびその他のマイクロコード化された命令は、CPUに苦労を与えることができ、かつcreates effects that make code alignment matter where it wouldn't otherwise.


x86 CPUの内部構造の詳細については、タグwiki、特に​​を参照してください。


古い/よりシンプルなCPUでは、すべての命令が効果的にマイクロコード化されていました。例えば、6502は6502の命令by running a sequence of internal instructions from a PLA decode ROMを実行した。これは、CPUの異なる部分を使用する順序が命令ごとに異なる非パイプラインCPUの場合に有効です。


歴史的に、「マイクロコード」には、命令語からデコードされた内部制御信号のようなものがあります。特にMIPSのようなCPUでは、命令語が複雑なデコードなしでそれらの制御信号に直接マッピングされる。 (これは部分的に間違っているかもしれませんが、私はこのようなものを読んでいますが、この質問の削除された答え以外のものですが、後でそれを見つけることはできませんでした)

+0

あなたはOPのために必要だと思ったよりも詳細に行きましたが、私は同じことを言って+2票から-1票に行きました。ただし、xchgやdivなどのアセンブリ言語命令を使用してOPを混乱させる可能性があります。これは、ちょうど基本を学んでいる誰かのために、私が簡単に言い換えると軽減しようとしていた彼の混乱の原因です。 – Rob

+2

@Rob:あなたの答えは、デコードされている命令のいくつかのビットが*マイクロコードであると主張しています。マイクロコードROMからの内部命令の流れをトリガする命令や、制御信号に直接影響を及ぼす命令については何も言及していません(現代のx86 CPUでは、単一の命令でさえ、注文機械)。いくつかのISAs(私が思っているようなMIPSのような)のデザインは、マイクロコードをまったく使用せず、命令ビットを制御信号に直接デコードすることができます。 –

+0

私は彼が理解するだろうと思ったよりもパイプに入ることを望んでいなかったので。私はそれよりも複雑になると言っていました。 – Rob