インオーダー実行とアウトオブオーダー実行の違い:発行順・ハザード・回路規模・IPCを比較
インオーダー実行のCPUは、命令をプログラムの順に発行して実行します。前の命令がキャッシュミスなどで待つと、後ろの命令も止まります。アウトオブオーダー実行のCPUは、依存関係を調べて準備のできた命令から先に実行し、結果はリオーダバッファ(ROB)でプログラムの順に確定させます。待ち時間の間に別の命令を進められるのでIPCが高くなりますが、レジスタリネーミングや命令を選ぶ回路が必要になり、回路の規模と電力が大きくなります。
| 項目 | インオーダー実行 | アウトオブオーダー実行 |
|---|---|---|
| 命令の発行・実行の順 | プログラムの順 | 準備のできた命令から、順序を入れ替えて実行する |
| 結果の確定(リタイア) | プログラムの順 | リオーダバッファ(ROB)で、プログラムの順に確定する |
| 前の命令が待っているとき | 後ろの命令も止まる(ストール) | 依存しない後ろの命令を先に進める |
| データハザードへの対応 | フォワーディングとストール。命令の並べ方はコンパイラに頼る | フォワーディングに加え、ハードウェアが動的に命令をスケジューリングする |
| 見かけの依存(WAR・WAW) | 順序を守るので、基本的に問題になりにくい | レジスタリネーミングで物理レジスタを割り当て直して取り除く |
| 主な追加の回路 | 少ない。簡素なパイプライン | リネーミングの表、物理レジスタ、発行キュー、ROB、ロード・ストアキュー |
| キャッシュミスの影響 | 大きい。ミスのたびにパイプラインが止まりやすい | 数百命令分の窓の中で別の命令を進め、待ち時間の一部を隠せる |
| IPC | 低め。同じ発行幅ならアウトオブオーダーより低い | 高い。広い発行幅と組み合わせて1を大きく超える |
| 回路規模と電力 | 小さい。面積や電力あたりの性能を高めやすい | 大きい。命令を選ぶ回路やROBの面積と電力が増える |
| 使われる場所 | マイコン、組込み用の小さなコア、省電力を優先するコアの一部、GPUの演算コア | PC・サーバー・スマートフォンの高性能コア |
数値は代表的な目安で、世代や製品によって異なります。