パイプライン処理とは(全体像)
ふつうのCPUは、1つの命令を「読む→解読→実行→書き戻す」と最後まで終えてから、次の命令に取りかかる。これだと、各工程の担当が手すきになる時間が多くてもったいない。
そこで使うのがパイプライン処理。工場のベルトコンベアのように、1つ目の命令が「読む」を終えたら、すぐ2つ目の命令の「読む」を始める。こうして複数の命令を、工程をずらしながら同時に流す。
身近にいえば、洗濯のイメージ。洗濯機が回っている間に、乾いた服をたたみ、次の洗濯物を入れる——待たずに次々こなすと、全体が速く片づく。これがパイプラインの発想だ。
詳しく:5段の流れと3種のハザードだけ覚えれば戦える
ここが記事の心臓部。まず命令を流す5段の工程を押さえよう。
5段パイプライン
| 段 | 略称 | やること |
|---|---|---|
| ① | IF | 命令を読む(フェッチ) |
| ② | ID | 命令を解読する(デコード) |
| ③ | EX | 計算する(実行) |
| ④ | MEM | 必要ならメモリを読み書き |
| ⑤ | WB | 結果をレジスタに書き戻す |
5つの命令が工程をずらして同時に流れれば、理想的には5倍くらい速くなる。ところが、いつも理想通りとはいかない。流れがつかえる「ハザード(渋滞)」が起きるからだ。
3種のハザードと対策
| ハザード | 渋滞の原因 | おもな対策 |
|---|---|---|
| データハザード | 前の命令の結果を次の命令が使う | フォワーディング(途中結果を直接渡す) |
| 制御ハザード | 分岐で次の命令がまだ決まらない | 分岐予測(先に進む側を予想する) |
| 構造ハザード | 同じ部品(メモリなど)の取り合い | 部品を増やして競合をなくす |
つまり、パイプラインは速くなる一方で、ハザードが起きると流れが止まって遅くなる。だから、フォワーディングや分岐予測で渋滞をやわらげるのがカギ、というわけだね。なお、分岐予測は当たれば速いが、外れると予想ぶんをやり直す手間がかかるので、いつもうまくいくわけではない。
わかりやすく言い換えると
要するに、パイプラインは「工程をずらして命令を同時に流す」やり方だ。
①考え方 … ベルトコンベアのように、待たずに次々流す(洗濯のイメージ)
②5段 … 読む(IF)→解読(ID)→計算(EX)→メモリ(MEM)→書き戻す(WB)
③ハザード … データ(フォワーディング)・制御(分岐予測)・構造(部品を増やす)
「速くなるが、渋滞(ハザード)で止まることもある」のがポイント。
試験のツボ
🔴 一番出る:5段の順番
①IF(読む)→ID(解読)→EX(計算)
②MEM(メモリ)→WB(書き戻す)の順
🔴 次に出る:3種のハザード
①データハザードはフォワーディングで軽減
②制御ハザードは分岐予測で軽減
🟡 押さえると安定:理想と現実
①理想は5段で5倍くらい速くなる
②ハザードや分岐予測の外れで、いつも理想通りではない
よくある間違い
①「パイプラインは必ず単純に速くなる」→ ✗ ハザード(渋滞)が起きると流れが止まり、速さは落ちる。
②「分岐予測は必ず当たる」→ ✗ 外れることもあり、その場合は予想ぶんをやり直す手間がかかる。
③「データハザードの対策は部品を増やすこと」→ ✗ データハザードはフォワーディングで軽減。部品を増やすのは構造ハザード。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(パイプラインの考え方)
パイプライン処理に関する次の記述のうち、正しいものはどれか。
- パイプラインは1つの命令を最後まで終えてから次に取りかかる、順番待ちの方式だ
- パイプラインは命令をいっさい分けず、すべてを一度に処理してしまう方式とされる
- パイプラインは命令を工程ごとに分け、ベルトコンベアのように並行して流す方式だ
- パイプラインは命令の処理をわざと遅らせ、なるべく時間をかけるための方式である
解答は 3 である。
パイプラインは命令を工程ごとに分け、ベルトコンベアのように並行して流す方式なのだ。洗濯機を回しながら次の準備をするイメージなるぞ。
選択肢1は順番待ちで並行していない。選択肢2の「一度に処理」、選択肢4の「わざと遅らせる」も誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 並行して流すのがパイプライン |
| 2 | ✗ | 工程ごとに分ける |
| 3 | ✓ | 工程をずらして並行処理 |
| 4 | ✗ | 速くするための方式 |
オリジナル問題2(5段の順番)
5段パイプラインの順番に関する次の記述のうち、正しいものはどれか。
- WB(書き戻す)から始まり、最後にIF(読む)で命令を取り出して終わるものだ
- IF(読む)→ID(解読)→EX(計算)→MEM(メモリ)→WB(書戻)の順だ
- EX(計算)を最初に行い、IF(読む)はいっさい行わずに処理を進めるものとされる
- IDとIFはどちらも不要で、EXとWBの2段だけで命令を処理すると決められている
解答は 2 である。
5段はIF(読む)→ID(解読)→EX(計算)→MEM(メモリ)→WB(書き戻す)の順なのだ。まず読み、解読し、計算し、メモリを使い、書き戻す——この流れが頻出なるぞ。
選択肢1・3・4はどれも順番や段数が誤りである。最初はかならずIF(読む)なのだ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 最初はIF |
| 2 | ✓ | IF→ID→EX→MEM→WB |
| 3 | ✗ | 最初はIF |
| 4 | ✗ | 5段ある |
オリジナル問題3(ハザードと対策)
パイプラインのハザードに関する次の記述のうち、正しいものはどれか。
- データハザードはフォワーディング、制御ハザードは分岐予測で軽減するものだ
- データハザードは分岐予測、制御ハザードはフォワーディングで軽減するとされる
- ハザードはいっさい起きず、パイプラインはつねに理想どおり速くなるものである
- 分岐予測は必ず当たるので、制御ハザードはまったく起きないものとされている
解答は 1 である。
データハザードはフォワーディング(途中結果を直接渡す)、制御ハザードは分岐予測(進む側を予想)で軽減するのだ。対策の組み合わせを取り違えないことなるぞ。
選択肢2は対策が逆。選択肢3の「ハザードは起きない」、選択肢4の「分岐予測は必ず当たる」も誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | データ=フォワーディング・制御=分岐予測 |
| 2 | ✗ | 対策が逆 |
| 3 | ✗ | ハザードは起きる |
| 4 | ✗ | 分岐予測は外れることもある |
まとめ
押さえどころ
- 🔴 考え方 = 命令を工程ごとに分け、ベルトコンベアのように並行して流す。
- 🔴 5段 = IF(読む)→ID(解読)→EX(計算)→MEM(メモリ)→WB(書き戻す)。
- 🟡 3種のハザード = データ(フォワーディング)・制御(分岐予測)・構造(部品を増やす)。理想通りとは限らない。
次に学ぶ
- CPUアーキテクチャ ── パイプラインの土台になるCPUの部品と命令実行の流れ。あわせて押さえると理解が深まる。
- 論理回路 ── 計算を担うALUを支えるスイッチの組み合わせ。CPUの動きの根っこが分かる。
執筆: SikakuQuest編集部