命令パイプライン構造図(5段 → スーパースカラ)
なぜ最近のCPUは1サイクルに複数命令を捌けるのか。古典5段を起点に、発行幅・ステージ深さ・フォワーディング経路がどう増えていくのかを構造として一望できます。
- 1.古典5段はIF/ID/EX/MEM/WBを各1命令で埋めるスカラ構成で、理想スループットは1サイクル1命令。サイクル時間は最も遅い1ステージで決まる。
- 2.スーパーパイプラインは各ステージをさらに細分してクロックを上げ、スーパースカラは同一ステージを複製して発行ポートを増やし、1サイクルに複数命令を並行発行する。
- 3.発行幅を増やすほどフォワーディング経路はポート数の二乗で増え、依存検出・分岐ミスペナルティ・配線が支配的コストになる。多発行はアウトオブオーダと組んで初めて効く。
構造を3軸で読む
命令パイプラインの発展は、互いに直交する3つの軸で整理すると見通せます。どの軸を伸ばすかで増えるハードウェアと支配的コストが変わります。
| 軸 | 何を変えるか | 狙い | 主な代償 |
|---|---|---|---|
| パイプライン化 | 処理をステージに分割する | スループット向上 | レイテンシ増・ハザード |
| スーパーパイプライン(深さ) | 各ステージをさらに細分する | クロック周波数向上 | 分岐ミスペナルティ増 |
| スーパースカラ(幅) | 同一ステージを複製する | 1サイクルあたり命令数増 | 依存検出・配線の爆発 |
古典5段は「分割」軸だけを使った最小構成です。スーパーパイプラインは縦(深さ)に、スーパースカラは横(幅)に伸ばします。現代の高性能コアは両方を同時に使います。
古典5段:スカラの基準点
基準となる RISC の5段は、1命令を IF/ID/EX/MEM/WB に分けて各ステージを1命令ぶんだけ持ちます。
時間 → c1 c2 c3 c4 c5 c6 c7
i1: lw IF ID EX MEM WB
i2: add IF ID EX MEM WB
i3: sub IF ID EX MEM WB
i4: or IF ID EX MEM WB
定常状態では5命令が並走し、毎サイクル1命令が WB に到達します。サイクル時間は最も遅い1ステージの遅延で決まり、理想スループットは1サイクル1命令(IPC=1、CPI=1)です。ステージ分割とハザードの基礎は命令パイプラインの原理で扱うので、本稿は構造の拡張に集中します。
フォワーディング経路も基準として押さえます。スカラ5段では、EX/MEM ラッチと MEM/WB ラッチの出力を ALU の2入力へ戻す経路があれば、ほとんどの RAW 依存を1サイクル待たずに解消できます。残るのは load-use の1ストールだけです。
スーパーパイプライン:深さで周波数を稼ぐ
サイクル時間は最も遅いステージで決まるので、その重いステージを分割すればクロックを上げられます。これがスーパーパイプラインです。たとえば EX を2段(EX1/EX2)、MEM をキャッシュアクセスの段数ぶんに割ると、1ステージあたりの論理段数が浅くなり周波数が上がります。
段数を増やした例(EXとMEMを細分)
IF1 IF2 ID RR EX1 EX2 M1 M2 WB
ただし深くするほど代償が増えます。
- 分岐ミスペナルティの増大:分岐の解決ステージから IF までの距離(段数)がそのままペナルティのサイクル数になります。深いほど予測ミス1回の損失が大きく、的中率の重要性が増します。
- フォワーディング段数の増加:EX が複数段になると、結果が確定するまでの距離が延び、フォワーディング経路の本数と、残るストールのパターンが増えます。
- ラッチ遅延の比率上昇:段あたりの仕事が減ると、相対的にパイプラインレジスタの遅延が無視できなくなり、深さに対する周波数の伸びが逓減します。
段数を増やすとサイクル時間は短くなりますが、ラッチ遅延とハザード頻度が同時に増えます。ある深さを超えると、周波数の伸びよりハザードによる空きサイクルの増加が勝り、実効性能は頭打ちか悪化に転じます。2000年前後の超深パイプライン(30段級)が消費電力と分岐ペナルティで行き詰まったのが歴史的な実例です。
スーパースカラ:幅で同時発行する
スーパースカラは、同一ステージのハードウェアを複製して発行ポートを増やし、1サイクルに複数命令を取り込み・実行・完了させる構造です。2命令同時なら2-wide、4命令なら4-wide と呼びます。
2-wide スーパースカラ(理想時)
c1 c2 c3 c4
i1,i2: IF×2 ID×2 EX×2 ...
i3,i4: IF×2 ID×2 EX×2
↑1サイクルに2命令ずつ流れる → 理想IPC=2
複製されるのはステージだけではありません。同時に複数命令のオペランドを読むためレジスタファイルの読み出しポート/書き込みポートが増え、実行段には用途別の機能ユニット(整数ALU・ロードストア・分岐・浮動小数点など)が並びます。各機能ユニットへ命令を振り分ける入口が発行ポートです。
発行ポートの例(4-wide の振り分け先)
port0: 整数ALU / 分岐
port1: 整数ALU / 乗算
port2: ロード/ストアアドレス生成
port3: ストアデータ / 浮動小数点
ここで理想 IPC が発行幅 W に達するのは、毎サイクル W 個の独立命令が見つかる場合だけです。実際のプログラムには依存と分岐が詰まっており、これが多発行の効きを直接制限します。
なぜ幅を増やすほど割に合わなくなるか
発行幅を W に増やしたときに増える主なコストは、線形では済みません。
- フォワーディング経路は W の二乗:W 個の演算結果のどれもが、同サイクルに発行された W 個の命令のどの入力にも要りうるので、結果→入力の配線とマルチプレクサは概ね W の二乗に比例します。幅2→幅4で経路は約4倍です。これが多発行コアの配線遅延と面積を支配します。
- 依存検出が W の二乗:同時発行候補 W 命令の相互依存(先行が後続のオペランドを書くか)を総当たりで調べるため、比較器も W の二乗で増えます。
- レジスタファイルのポート増:W 命令を同時に読むには 2W の読み出しポート、書くには W の書き込みポートが要り、ポート数の増加はセル面積とアクセス遅延を悪化させます。
インオーダの多発行は、先頭の1命令が依存で止まると同サイクルの後続もまとめて発行できず、実効 IPC が幅に届きません。プログラム順のまま並べた命令列には独立命令が連続しにくいからです。幅の投資を回収するには、順序を超えて独立命令をかき集める仕組みが要ります。
幅を本当に活かす鍵がアウトオブオーダ実行です。レジスタリネーミングで偽の依存(WAR/WAW)を消し、命令ウィンドウから準備の整った命令を順不同に発行ポートへ送り込むことで、毎サイクル発行ポートを埋める独立命令を確保します。現代の高性能コアが「深い × 広い × 順不同」の三点セットなのはこのためです。
系統:5段からの分岐
構造の発展を年代と分岐で整理すると次のようになります。
| 世代/方式 | 代表時期 | 発行幅 | 順序 | 構造上の主眼 |
|---|---|---|---|---|
| 古典5段スカラ | 1980年代中盤 | 1 | インオーダ | 分割でスループット獲得 |
| スーパーパイプライン | 1990年代前半 | 1 | インオーダ | 深さで周波数獲得 |
| インオーダ・スーパースカラ | 1990年代前半 | 2〜3 | インオーダ | 幅で同時発行(依存に弱い) |
| アウトオブオーダ・スーパースカラ | 1990年代中盤以降 | 3〜6+ | アウトオブオーダ | 深さ×幅×順不同の統合 |
枝分かれの本質は「同じ5段の骨格を、深さ方向に割るか・幅方向に複製するか・両方やった上で順序制約を動的に外すか」です。命令レベル並列(ILP)を1コアで搾り尽くす方向の到達点が最後の行で、そこから先の並列度はスレッド並列(SMT)やデータ並列(GPUのSIMT)へと軸を変えて伸ばすことになります。
「スーパーパイプライン=段を深くして周波数を上げる」「スーパースカラ=同一ステージを複製して1サイクル複数命令を発行する」の定義の取り違えが頻出ポイントです。さらに「理想IPCは発行幅Wだが依存・分岐で届かない」「フォワーディングと依存検出のコストはWの二乗で増える」「多発行はアウトオブオーダと組んで実効化する」を押さえましょう。
まとめ
- 古典5段は分割軸だけのスカラ構成で、理想は1サイクル1命令。フォワーディング2経路で多くの RAW を解消し、load-use だけ1ストールが残る。
- スーパーパイプラインは深さ(段数)で周波数を稼ぐが、分岐ミスペナルティとラッチ遅延比率が増し、深さの効果は逓減する。
- スーパースカラは幅(発行ポート)で同時発行数を稼ぐが、フォワーディング経路と依存検出が発行幅の二乗で増え、配線・面積・電力を支配する。
- 幅の投資はアウトオブオーダ実行が依存の壁を越えて初めて回収でき、現代コアは深い×広い×順不同の統合形になる。
CPU/メモリ/ディスク Article
命令パイプライン構造図(5段 → スーパースカラ)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
パイプライン
比較で見る軸
難易度: advanced / カテゴリ: CPU/メモリ/ディスク / タグ数: 5
導入後に効く点
スーパーパイプラインは各ステージをさらに細分してクロックを上げ、スーパースカラは同一ステージを複製して発行ポートを増やし、1サイクルに複数命令を並行発行する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- CPU/メモリ/ディスク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「パイプライン / スーパースカラ」に近いか確認する。
- 強みである「古典5段はIF/ID/EX/MEM/WBを各1命令で埋めるスカラ構成で、理想スループットは1サイクル1命令。サイクル時間は最も遅い1ステージで決まる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。