パイプラインのスーパーパイプライン化と周波数限界
段数を深めれば本当に速くなるのか。スーパーパイプラインの周波数利得が、ラッチ遅延と分岐ミス増大でどこから収穫逓減に転じるかを原理から押さえ、最適段数の勘所を掴めます。
- 1.段数を増やすとクロック周期が短くなり周波数は上がるが、各段に挟むラッチのセットアップ時間とクロックスキューが固定オーバーヘッドとして残り、段数に比例しては縮まない。
- 2.深いほど分岐ミスペナルティ(フラッシュするサイクル数)が増え、ミス率が一定でも実効CPIが悪化するため、周波数の利得を実効スループットが食い潰す。
- 3.周波数の利得と分岐・依存のペナルティ増大が釣り合う点に最適段数が存在し、論理1段あたり約6〜8 FO4が経験的な底値とされる。
なぜ段を深めると速くなるのか
命令パイプラインは処理を IF/ID/EX/MEM/WB のようなステージに分け、各ステージを別命令で同時に埋めてスループットを稼ぎます。クロック周期は最も遅い1ステージの遅延で決まるので、長いステージをさらに細かく割れば、最も遅い段の遅延が縮み、周期を短く=周波数を高くできます。
スーパーパイプライン化とは、この分割をさらに推し進め、各論理ステージを複数のサブステージに割って段数を深め、周波数を引き上げる手法です。たとえば1つの EX を2段に割れば、その段の遅延は半分に近づきます。理想的には、段数を N 倍にすればクロック周期も 1/N に近づき、スループットも N 倍に近づくはずです。
浅い: [ ---- EX ---- ] 周期 = 段の論理遅延
深い: [- EX1 -][- EX2 -] 周期 ≒ 論理遅延/2 + ラッチ遅延
歴史的な代表例が Intel の Pentium 4(NetBurst)で、整数パイプを20〜31段まで深め、当時として極端に高い周波数を狙いました。だが「段数を倍にすれば倍速い」は成り立ちません。理由は次の2つのオーバーヘッドにあります。
1命令が入口から出口を通り抜ける時間(レイテンシ)は段数に比例して増えます。深いパイプラインが速くするのは単位時間あたりの完了数=スループットだけで、個々の命令の所要サイクルはむしろ増える、という非対称性を最初に押さえてください。
オーバーヘッド1:ラッチのセットアップとスキュー
ステージ間には必ずパイプラインレジスタ(フリップフロップ/ラッチ)を挟みます。論理回路の遅延だけを段数で割っても、各段の周期はゼロには向かいません。1段あたり、論理遅延に加えて次の固定費が乗るからです。
- クロックからQへのD-Q伝搬遅延:フリップフロップが入力を出力に出すまでの時間。
- セットアップ時間:次段のフリップフロップが、クロック端の手前で入力を安定させておくべき余裕時間。これだけ周期を食う。
- クロックスキュー:同じクロックが配線距離やバッファ差で各フリップフロップにばらついて届くずれ。最悪方向のスキューはタイミング余裕を直接削るため、設計上は周期に上乗せして見込む。
段あたりの最小周期はおおよそ次の形になります。
周期 ≒ (論理遅延 / 段数) + D-Q伝搬 + セットアップ + スキュー余裕
右辺の後ろ3項は段数を増やしても縮まない固定オーバーヘッドです。段数を深めるほど論理遅延の項は小さくなりますが、固定費の比重が相対的に増大し、ある点から周波数はほとんど伸びなくなります。この固定費はFO4(4個の同型インバータを駆動する1インバータの遅延、プロセス非依存の遅延単位)で測るのが定石で、フリップフロップ1組の往復オーバーヘッドは概ね2〜3 FO4に相当します。
| 段数の方針 | 1段あたり論理遅延 | 固定費の比重 | 実効周波数の伸び |
|---|---|---|---|
| 浅い(論理10〜12 FO4) | 大きい | 小さい | 周期は長いが効率は高い |
| 中庸(論理6〜8 FO4) | 中 | 釣り合う | 周波数あたり性能の底 |
| 過深(論理 < 4 FO4) | 小さい | 支配的 | 周波数はほぼ頭打ち |
経験則として、論理1段あたりおよそ6〜8 FO4より浅く割っても、ラッチ固定費に食われて周波数あたりの性能が悪化し始めます。これが「これ以上は割っても割に合わない」物理側の壁、すなわち周波数限界の一面です。
オーバーヘッド2:分岐ミスペナルティの増大
物理側の壁だけなら、周波数が頭打ちになっても遅くはなりません。実効性能をむしろ押し下げるのが、深さに比例して増える投機ミスの後始末です。
分岐予測が外れると、誤って取り込んだ命令を全部捨て(フラッシュ)、正しい先から取り直します。捨てるサイクル数=分岐ミスペナルティは、分岐の解決段(飛び先と成否が確定する段)から命令フェッチ段までの段数の距離にほぼ等しくなります。段を深めれば、この距離が伸びます。
実効 CPI は概ね次のように積み上がります。
実効CPI ≒ 1 + (分岐予測ミス率 × ミスペナルティ段数) + (その他ストール)
ここで重要なのは、予測器を改善してもミス率はゼロにできない点です。ミス率が一定でも、ミスペナルティ段数が段数に比例して増えるため、深くするほど第2項が膨らみます。NetBurst が高周波数のわりに体感が伸び悩んだ核心がこれで、20段超のパイプラインでは1回のミスが20サイクル前後を吹き飛ばし、上げた周波数の利得を実効スループットが食い潰しました。
スループットは「周波数 ÷ 実効CPI」に比例します。深くして周波数を f 倍にできても、ミスペナルティ増で実効CPIが f 倍以上に膨らめば、正味のスループットは下がります。深いパイプラインで予測精度がいっそう死活的になるのは、1回の誤りの代償が段数とともに増えるからです。
同じことはロード遅延などの依存にも当てはまります。深いほど結果確定までの段数が伸び、フォワーディングで隠せない待ちが増えます。
収穫逓減と最適段数
利得とオーバーヘッドを1本にまとめると、段数 N に対するスループットはおおよそ次の競合で決まります。
スループット ∝ 周波数(N) / 実効CPI(N)
周波数(N) … Nが増えると上がるが、固定オーバーヘッドで頭打ち(上に凸)
実効CPI(N) … Nが増えると分岐・依存ペナルティで悪化(増加)
分子は段数とともに飽和し、分母は段数とともに増えます。両者の比はある段数で最大を取り、それより深くすると逆に下がります。これが収穫逓減であり、最大点が最適段数です。最適段数は分岐頻度・予測精度・ワークロードの依存密度に依存し、分岐が多く予測が当てにくいコードほど浅い段数で最適に達します。
「段数を増やすと周波数は上がるがレイテンシは伸びる」「周期はゼロに向かわず、D-Q伝搬・セットアップ・スキューが固定費として残る」「分岐ミスペナルティは解決段からフェッチ段までの段数に比例する」「周波数の飽和とCPI悪化の積が最適段数を決める」の4点が頻出です。
加えて、深いパイプラインは高周波数ゆえに消費電力も押し上げます。動的電力は周波数にほぼ比例し、高クロックに必要な高電圧と相まって電力効率を悪化させるため、現代の設計は単純な周波数追求からクロック・電力ゲーティングやヘテロジニアスコアによる効率重視へ舵を切りました。これが、2000年代半ばに極端なスーパーパイプライン化が退潮し、段数を10数段に抑えてマルチコアへ向かった理由でもあります。
まとめ
- スーパーパイプライン化は段を細かく割って周波数を上げる手法だが、クロック周期は固定オーバーヘッド(D-Q伝搬・セットアップ・スキュー余裕)のためゼロには向かわない。
- 段数に比例して分岐ミスペナルティが伸び、ミス率が一定でも実効CPIが悪化する。周波数の利得を食い潰す主因。
- スループットは「周波数 ÷ 実効CPI」に比例し、周波数の飽和とCPIの悪化の積が最適段数を決める。論理1段あたり約6〜8 FO4が経験的な底値。
- 電力効率の悪化も重なり、過度なスーパーパイプライン化は退潮し、設計の主軸はマルチコアと効率重視へ移った。
CPU/メモリ/ディスク Article
パイプラインのスーパーパイプライン化と周波数限界を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
スーパーパイプライン
比較で見る軸
難易度: advanced / カテゴリ: CPU/メモリ/ディスク / タグ数: 6
導入後に効く点
深いほど分岐ミスペナルティ(フラッシュするサイクル数)が増え、ミス率が一定でも実効CPIが悪化するため、周波数の利得を実効スループットが食い潰す。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- CPU/メモリ/ディスク
- タグ数
- 6
判断チェックリスト
- 自社の用途が「スーパーパイプライン / クロック周波数」に近いか確認する。
- 強みである「段数を増やすとクロック周期が短くなり周波数は上がるが、各段に挟むラッチのセットアップ時間とクロックスキューが固定オーバーヘッドとして残り、段数に比例しては縮まない。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。