http://realworldtech.com/にある多くのフォーラムスレッドは、MIPSのような単純なデコードISAと比べて、x86カウントのCPUがトランジスタの数/性能/消費電力の点でどれくらいの費用がかかるかを議論しています。
10%は野生の推測として投げられた数字です。そのコストの一部は固定されており、CPUをより強力にするにつれて拡張されません。例えばx86命令をMIPS命令を分離するのに似ている複雑なuopsのストリームにデコードするには、おそらく3つの余分なパイプラインステージが必要です。メモリ宛先を持つADDは、ロード、ADD、およびストアにデコードされる可能性があります。可変長x86命令のデコード処理は並列処理(現在の設計ではクロックあたり最大4個)に非常に負荷が掛かります。パイプラインのいくつかの部分でマイクロ・フュージョンを使用すると、それよりも複雑になります。
x86は単なる可変長ではなく、長さ(すなわち、次の命令の開始)を決定するためには、オプションの接頭語および他の様々な複雑さがあるため、多くのビットを見る必要がある。インテルとAMDの間のAgner Fog's blog post about the "instruction set war"では、x86オペコードのコーディングスペースの面倒な状態のコストについて説明しています。 (実際のコードでのボトルネックを見つけたり、パフォーマンスカウンタを理解することを目的とした、AMDとIntelの最新のx86デザインのパイプラインについては、彼のmicroarch pdfも参照してください。
x86命令のデコードに要するコストは、Intel's Sandybridge microarchitecture family uses a small/fast decoded-uop cacheと伝統的なL1 Iキャッシュほど高くなっています。大規模なループであっても、通常、uopキャッシュに収まり、電力を節約し、レガシーデコーダからの実行と比べてフロントエンドのスループットを向上させます。他のほとんどのISAは、デコードされた命令キャッシュからほとんど利益を得ることができないため、それらを使用しません。 (Intel以前は、Pentium 4でデコードされたuopトレースキャッシュ(L1 Iキャッシュなし、弱いデコーダあり)を試していましたが、SnBのuopキャッシュはではなく、トレースキャッシュとレガシーデコーダはまだまだ高速です。)
OTOH、一部のx86のレガシー手荷物(一部のFLAGSアップデートなど)は、残りのパイプラインとアウトオブオーダーのコアにコストを課します。最新のx86 CPUは、DEC/JNZのようなものでの偽の依存関係を避けるために、FLAGの別の部分の名前を別々に変更する必要があります。 ()。 Intelはこれをやっていないことを実験しました(Pentium4、別名netburstマイクロアーキテクチャファミリ)。彼らは、INC/DECを避けたコンパイラで全員に自分のコードを再コンパイルするように指示し、add eax, 1
(すべてのフラグを変更する)を使用すると考えました。 (This optimization advice stuck around for ages in their official optimization manual, long after P4 was obsolete, and many people think it's still relevant。)
一部の人々は、x86のの強いメモリー注文セマンティクスは、パイプラインCPUを活用できる並列処理を減らす「のx86税」の一部とみなされるべきであると主張しているが、他(例えば、Linus Torvalds)は、ハードウェアを使用することで、マルチスレッドコードのどこにでもバリア命令が必要ないことを意味すると主張します。そして、バリア命令を持つことは、ハードウェアがメモリの順序付けを十分に詳細に追跡することを必要とするだけでなく、安価である(記憶バッファの完全なフラッシュではない)。
https://en.wikipedia.org/wiki/Micro-operationを参照してください。用語は、マイクロオペレーションまたはマイクロオペレーションです。また、Agner Fogの何かがうまくいくので、http://www.agner.org/optimize/ –