
コンピュータの中央処理装置において、マイクロオペレーション(マイクロオプスまたはμオプスとも呼ばれ、歴史的にはマイクロアクションとも呼ばれる[ 2 ] )は、一部の設計において複雑な機械語命令(この文脈ではマクロ命令と呼ばれることもある)を実装するために使用される詳細な低レベル命令である[ 3 ]: 8-9
通常、マイクロオペレーションは、1 つ以上のレジスタに格納されたデータに対して基本的な操作を実行します。これには、レジスタ間またはレジスタと中央処理装置(CPU)の外部バス間のデータ転送、およびレジスタに対する算術演算または論理演算の実行が含まれます。マイクロオペレーションは通常、レジスタ転送言語を使用して表現されます。[ 4 ]一般的なフェッチ - デコード - 実行サイクルでは、マクロ命令の各ステップは実行中に分解され、CPU は一連のマイクロオペレーションを決定して実行します。マイクロオペレーションの実行は、CPU の制御ユニットの制御下で行われ、制御ユニットは、並べ替え、融合、キャッシュなどのさまざまな最適化を実行しながら、マイクロオペレーションの実行を決定します。[ 1 ]
様々な形式のμopは、特定のCPU設計の実装を簡素化するため、あるいは特定の複数ステップ操作やアドレッシングモードのシーケンス化を行うために使用される従来のマイクロコードルーチンの基盤として長年利用されてきました。近年では、最新のCISCプロセッサが非同期並列実行や投機的実行をより容易に処理できるように、μopは別の方法でも利用されています。従来のマイクロコードと同様に、機械語命令のエンコーディングとセマンティクスに基づいて適切なμopシーケンスを見つけるために、1つ以上のテーブルルックアップ(またはそれに相当するもの)が行われます(デコードまたは変換ステップ)。しかし、マイクロコードROMから直接CPUを制御する固定的なμopシーケンスを持つのではなく、ここではμopは実行前に再スケジューリングのために動的にバッファリングされます。[ 5 ]: 6-7、9-11
このバッファリングにより、フェッチおよびデコード段階は、従来型のマイクロコード(またはハードワイヤード)設計よりも実行ユニットから分離できます。これにより実行順序に関してある程度の自由度が得られるため、通常のシングルスレッドプログラムから命令レベルの並列性を抽出することが可能になります(依存関係のチェックなどが前提となります)。また、より多くの分析が可能になり、コードシーケンスの並べ替えによって、μopのマシンリソース(ALU、ロード/ストアユニットなど)へのマッピングとスケジューリングを動的に最適化することもできます。これはμopレベルで行われるため、異なるマシン(マクロ)命令のサブオペレーションが特定のμopシーケンス内で混在し、複数のマクロ命令からのマイクロ命令の順不同ディスパッチの結果として、部分的に並べ替えられたマシン命令が形成されることがよくあります。しかし、これはマイクロオペレーション融合とは異なります。マイクロオペレーション融合は、特定の状況において、より複雑なマイクロ命令がいくつかの単純なマイクロ命令を置き換えることを目的としており、通常は状態変化とキューおよびリオーダーバッファ領域の使用を最小限に抑え、それによって消費電力を削減します。マイクロオペレーション融合は、一部の最新のCPU設計で使用されています。[ 3 ]: 89–91、105–106 [ 5 ]: 6–7、9–15
実行最適化はさらに進んでおり、プロセッサは多数の機械語命令を一連のμopに変換するだけでなく、必要に応じてその逆も行います。つまり、特定の機械語命令シーケンス(比較命令に続く条件付きジャンプなど)を、実行モデルにより適した、より複雑なμopに組み合わせることで、より高速に、あるいはより少ないマシンリソースで実行できるようになります。これはマクロ命令融合とも呼ばれます。[ 3 ] : 106–107 [ 5 ] : 12–13
パフォーマンスを向上させるもう 1 つの方法は、デコードされたマイクロオペレーションをマイクロオペレーション キャッシュにキャッシュすることです。これにより、同じマクロ命令が再度実行される場合、プロセッサはデコードされたマイクロオペレーションを再度デコードする代わりに、キャッシュから直接アクセスできます。Intel NetBurstマイクロアーキテクチャ ( Pentium 4 )にある実行トレース キャッシュは、この手法の一般的な例です。[ 6 ]このキャッシュのサイズは、格納できるマイクロオペレーションの数 (千単位、または厳密に 1024 の倍数) で表すことができます。Kμopsです。[ 7 ]