最終更新日:2026年10月7日
fe fe-technology computer-architecture cpu
まず結論
パイプライン制御とは、1つの命令処理を複数のステージに分け、複数の命令を少しずつずらして同時進行させる方式です。
基本情報技術者試験では、次の表現が出たらパイプラインを疑います。
命令処理を複数ステージに分ける
+
複数命令を重ねて実行する
→ パイプライン制御
単に「複数命令を並列に実行する」だけでは、スーパースカラやMIMDなど別の方式も候補になるので、「ステージに分ける」「段階をずらす」という表現が重要です。
特に似た名前の3つは、次の1点で切り分けます。
| 技術 | 高速化の方向 | 一言でいうと |
|---|---|---|
| パイプライン | 処理を段階に分けて重ねる | 流れ作業にする |
| スーパーパイプライン | 1段をさらに細かく分ける | 段を細分化する |
| スーパースカラ | 複数の命令を同時に実行する | 実行ラインを増やす |
スーパー「パイプライン」→ パイプラインの段をもっと細かくする
スーパー「スカラ」→ 複数命令を同時に実行する
直感的な説明
工場の流れ作業をイメージすると分かりやすいです。
1人が製品を最初から最後まで全部作るのではなく、
工程1 → 工程2 → 工程3
のように役割を分けます。
例えば命令A・B・Cを処理するとき、次のようにずらして進めます。
時間1 命令A:取出し
時間2 命令A:解読 命令B:取出し
時間3 命令A:実行 命令B:解読 命令C:取出し
命令Aが全部終わるまで命令Bを待たせるのではなく、空いたステージに次の命令を流します。
これによって、単位時間あたりに処理できる命令数を増やすことができます。
定義・仕組み
CPUでは、1つの命令をいくつかの処理段階に分けて実行できます。
代表的には、次のような段階です。
命令取出し
↓
命令解読
↓
実行
↓
結果書込み
パイプライン制御では、これらの各段階を重ねて使います。
パイプライン化しない場合
命令A:取出し → 解読 → 実行 → 書込み
命令B: 取出し → 解読 → 実行 → 書込み
命令Aが完全に終わるまで、命令Bが始まりません。
パイプライン化する場合
命令A:取出し → 解読 → 実行 → 書込み
命令B: 取出し → 解読 → 実行 → 書込み
命令C: 取出し → 解読 → 実行 → 書込み
各ステージを並行して利用できるので、全体として効率よく命令を流せます。
ただし、1つの命令そのものの処理時間が必ず短くなるというより、複数命令を連続して処理するときのスループットを高める仕組みと考えるのが大切です。
スーパーパイプラインとスーパースカラ
普通のパイプラインを基準にすると違いが見えます。
パイプライン
→ 処理を段階に分けて、命令をずらして流す
スーパーパイプライン
→ その段階をさらに細かく分割する
→ より短い間隔で次の処理を流す
スーパースカラ
→ 複数の実行系を用意する
→ 複数命令を同時に実行する
工場で考えるなら、
パイプライン
→ 流れ作業にする
スーパーパイプライン
→ 1工程をさらに細かな工程へ分ける
スーパースカラ
→ 作業ラインを複数にする
という違いです。
「段を増やす方向か、同時に処理する本数を増やす方向か」を見ると切り分けやすくなります。
科目Aでどう出る?
科目Aでは、パイプライン制御と似たCPU高速化技術・並列処理方式を見分ける問題に注意します。
| キーワード | 用語 |
|---|---|
| 命令処理を複数ステージに分割して重ねる | パイプライン制御 |
| パイプラインの各段をさらに細分化 | スーパーパイプライン |
| 複数の演算器を使い、実行時に複数命令を同時実行 | スーパースカラ |
| コンパイラが複数の演算を1つの長い命令語にまとめる | VLIW |
| 1つの命令で複数のデータを同時処理 | SIMD |
| 複数のプロセッサがそれぞれ独立した命令を実行 | MIMD |
| マイクロ命令の組合せで機械語命令を実行 | マイクロプログラム制御 |
最短の判断基準は次のとおりです。
ステージに分けて、段階をずらして流す
→ パイプライン
パイプラインの段をさらに細分化
→ スーパーパイプライン
複数の演算器で同時実行
→ スーパースカラ
コンパイラ側で並列実行を組み込む
→ VLIW
1命令 × 複数データ
→ SIMD
複数プロセッサ × 独立した命令
→ MIMD
マイクロ命令で制御
→ マイクロプログラム制御
「1命令を速くする」と「スループットを上げる」を分ける
パイプラインの説明問題では、次の違いも重要です。
1つの命令そのものを短時間で終わらせる
→ パイプラインの本質ではない
複数命令を少しずつずらして流し、
単位時間あたりの処理命令数を増やす
→ パイプライン
「処理時間を短縮」という表現だけで選ばず、何を短縮・向上させているのかを確認します。
どんな場面で使う?
パイプライン制御は、CPUの命令処理を高速化するために広く使われる考え方です。
連続して多くの命令を処理するとき、各ステージを遊ばせずに使えるため、処理効率を高められます。
ただし、命令同士に依存関係がある場合や、分岐命令がある場合には、きれいに流れないことがあります。
命令Aの結果が必要
↓
命令Bが待つ
このような状態は、パイプラインの効率を下げる原因になります。
特に分岐命令では、次に実行する命令がすぐには確定しません。そこで、分岐先を予測して結果確定前に先の命令を実行する投機実行が使われることがあります。
分岐予測との関係や、アウトオブオーダー実行・SMT・マルチコアとの違いは、投機実行とは?分岐予測・アウトオブオーダー実行との違いで整理しています。
よくある誤解・混同
スーパーパイプラインとスーパースカラは同じ?
違います。名前は似ていますが、高速化する方向が違います。
スーパーパイプライン
→ パイプラインの「段」を細かくする
スーパースカラ
→ 同時に実行する「命令数」を増やす
問題文に「ステージをさらに細分化」とあればスーパーパイプライン、「複数の命令を同時実行」「複数の演算器」とあればスーパースカラを疑います。
「複数命令を並列に実行」なら全部パイプライン?
違います。
スーパースカラやMIMDも、複数命令を並列に扱います。
パイプライン
→ 1つのプロセッサ内部で処理段階を分け、命令をずらして流す
スーパースカラ
→ 複数の演算器を使って、複数命令を同時に実行する
MIMD
→ 複数のプロセッサが、それぞれ独立した命令を実行する
問題文に「複数のステージ」「段階をずらす」という表現があるかを確認します。
SIMDとの違いは?
SIMDは、1つの命令を複数のデータに対して同時に実行する考え方です。
SIMD
→ 1命令 × 複数データ
パイプライン
→ 複数命令を段階をずらして流す
「複数データ」が強調されていればSIMD、「複数命令をずらす」が強調されていればパイプラインと切り分けます。
VLIWとの違いは?
VLIWでは、どの処理を同時に実行するかを主にコンパイラ側で決めます。
パイプライン
→ CPU内部の処理段階を重ねる
VLIW
→ コンパイラが並列に実行できる処理をまとめる
マイクロプログラム制御との違いは?
マイクロプログラム制御は、1つの機械語命令をさらに細かなマイクロ命令の組合せで実現する方式です。
パイプライン
→ 複数命令を効率よく流す
マイクロプログラム制御
→ 1つの命令を内部の細かな制御手順で実行する
1命令の実行時間が必ず短くなる?
必ずしもそうではありません。
パイプラインの主な目的は、複数命令を連続して処理するときのスループット向上です。
「1個の命令を速くする」というより、命令の流れ全体を効率化すると考えると理解しやすいです。
まとめ(試験直前用)
- パイプライン制御は、命令処理を複数ステージに分けて重ねて実行する
- 「複数ステージ」「段階をずらす」が重要キーワード
- 1命令×複数データはSIMD、複数プロセッサ×独立命令はMIMD
- スーパーパイプラインは段を細分化、スーパースカラは複数命令を同時実行
- VLIWはコンパイラ側で並列化
- 1命令の時間短縮ではなく、主にスループット向上を狙う
- 段階に分けて、ずらして流す → パイプライン と覚える