最終更新日:2026年9月23日
fe fe-technology computer-architecture cpu
まず結論
5段パイプラインでは、1つの命令を次の5段階に分けて処理します。
IF → ID → EX → MEM → WB
日本語では、次のように対応させると分かりやすいです。
命令を取る
→ 命令を解読する
→ 演算する・アドレスを求める
→ データメモリにアクセスする
→ 結果を書き戻す
基本情報技術者試験では、IF → ID → EX → MEM → WB の順番と、それぞれの役割を対応させられることが重要です。
直感的な説明
5段パイプラインは、仕事を5つの工程に分けて流れ作業にするイメージです。
例えば、工場で製品を作るときに、
材料を受け取る
→ 作業内容を確認する
→ 加工する
→ 必要な部品を出し入れする
→ 完成品を所定の場所へ戻す
という工程に分ければ、前の製品が次の工程へ進んだあと、次の製品を最初の工程に入れられます。
CPUのパイプラインも同じで、命令をいくつかの段階に分け、複数の命令の処理を少しずつ重ねて進めることで、処理効率を高めます。
ただし、FE試験の順序問題では、まず「複数命令を重ねる」という話よりも、1命令の中で各段階がどの順に並ぶかを押さえることを優先します。
定義・仕組み
代表的な5段パイプラインは、次の5ステージで構成されます。
| 略称 | 英語 | 主な役割 |
|---|---|---|
| IF | Instruction Fetch | 命令を取り出す |
| ID | Instruction Decode | 命令を解読し、レジスタを読み出す |
| EX | Execute | 演算やアドレス生成を行う |
| MEM | Memory Access | データメモリを読み書きする |
| WB | Write Back | 結果をレジスタへ書き戻す |
IF:命令フェッチ
次に実行する命令を取り出します。
プログラムカウンタ
↓
次の命令の場所を確認
↓
命令を読み出す
ここで取り出すのは、処理対象のデータではなく命令そのものです。
CPUの一般的な命令実行サイクルは、CPUの命令実行サイクルでも整理しています。
ID:命令デコードとレジスタ読出し
読み出した命令を解読し、どの演算をするのか、どのレジスタを使うのかを判断します。
命令を解読
+
必要なレジスタの値を読み出す
5段パイプラインでは、命令デコードとレジスタファイル読出しを同じステージで扱う形がよく使われます。
EX:実行とアドレス生成
演算を実行します。
例えば、加算命令なら足し算を行います。
また、ロード命令やストア命令では、メモリにアクセスするための実効アドレスを計算します。
ベースアドレス + オフセット
→ アクセス先アドレスを求める
ここで重要なのは、EXでアドレスを求め、MEMでそのアドレスへ実際にアクセスするという順番です。
MEM:メモリアクセス
ロード命令やストア命令などで、データメモリへアクセスします。
ロード
→ メモリからデータを読む
ストア
→ メモリへデータを書く
すべての命令が必ずデータメモリを読み書きするわけではありません。
例えば、レジスタ同士の単純な加算なら、MEMステージでは実質的にメモリ操作を行わない場合があります。
WB:書戻し
演算結果や、ロード命令で読み出した値をレジスタへ書き戻します。
演算結果
または
メモリから読み出した値
↓
レジスタへ書き戻す
ここまでで1命令の処理が完了します。
このテーマは、基本情報技術者試験の「コンピュータ構成要素」と関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、5つの処理を並べ替える問題や、各ステージの役割を問う問題に注意します。
まずは、次の順番を基準にします。
IF
命令フェッチ
↓
ID
命令デコード・レジスタ読出し
↓
EX
実行・アドレス生成
↓
MEM
メモリアクセス
↓
WB
書戻し
並べ替えは前後関係で切る
順番を忘れた場合は、処理の依存関係から復元できます。
命令を取っていない
→ 解読できない
命令を解読していない
→ 何を実行するか分からない
アドレスを求めていない
→ その場所へメモリアクセスできない
結果が出ていない
→ 書戻しできない
したがって、
フェッチ → デコード → 実行 → メモリアクセス → 書戻し
という流れになります。
EXとMEMを混同しない
特に引っかかりやすいのが、ロード・ストア命令です。
EX
→ アクセス先のアドレスを計算
MEM
→ そのアドレスのメモリを読み書き
アドレス生成が先、実際のメモリアクセスが後です。
IFとMEMを混同しない
どちらもメモリから何かを読むイメージがあるため、混同しやすいです。
IF
→ 命令を取り出す
MEM
→ 命令が扱うデータにアクセスする
「命令なのか、データなのか」で切り分けます。
パイプラインの処理サイクル数を求める
科目Aでは、ステージの順番だけでなく、複数の命令を何サイクルで処理できるかを問われることがあります。
例えば、次の条件を考えます。
命令数:6
ステージ数:5
各ステージ:1サイクル
途中停止:なし
まず図で考える
5段パイプラインを、1マス=1サイクルとして並べると次のようになります。
| 命令\サイクル | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 命令1 | IF | ID | EX | MEM | WB | |||||
| 命令2 | IF | ID | EX | MEM | WB | |||||
| 命令3 | IF | ID | EX | MEM | WB | |||||
| 命令4 | IF | ID | EX | MEM | WB | |||||
| 命令5 | IF | ID | EX | MEM | WB | |||||
| 命令6 | IF | ID | EX | MEM | WB |
この図で見ると、最初の命令が完成するのは5サイクル目です。
その後はパイプラインに命令が並んでいるので、1サイクルごとに次の命令が完成します。
5サイクル目 → 命令1 完了
6サイクル目 → 命令2 完了
7サイクル目 → 命令3 完了
8サイクル目 → 命令4 完了
9サイクル目 → 命令5 完了
10サイクル目 → 命令6 完了
したがって、
最初の命令
5サイクル
+
残り5命令
5サイクル
= 10サイクル
となります。
公式は図から導く
命令数を N、ステージ数を D とします。
最初の1命令を完成させるまでに D サイクル必要です。
その後、残りの N-1 命令は1サイクルごとに完成します。
D + (N - 1)
= N + D - 1
したがって、各ステージが1サイクルで、途中停止がない場合は、
必要サイクル数 = 命令数 + ステージ数 - 1
と求められます。
例えば20命令を5段パイプラインで処理するなら、
20 + 5 - 1
= 24サイクル
です。
なぜ「命令数 × ステージ数」ではない?
ここが典型的なひっかけです。
パイプラインを使わず、1命令を最後まで処理してから次の命令を始めるなら、
5段 × 20命令
= 100サイクル
と考えられます。
しかし、パイプラインでは複数命令の処理を重ねます。
パイプラインなし
命令1:IF → ID → EX → MEM → WB
↓
命令2: IF → ID → EX → MEM → WB
パイプラインあり
命令1:IF → ID → EX → MEM → WB
命令2: IF → ID → EX → MEM → WB
命令3: IF → ID → EX → MEM → WB
試験では、「最初だけステージ数ぶん待ち、その後は1サイクルごとに完成」と考えると、公式を忘れても復元できます。
注意:この式は、各ステージが1サイクルで、パイプラインの停止がないという条件で使います。
どんな場面で使う?
パイプラインは、CPUが命令処理の各段階を重ね合わせて実行し、単位時間当たりに処理できる命令数を増やすために使われます。
例えば、1命令ずつ5工程をすべて終えてから次の命令を始めるのではなく、各工程をずらして進めます。
時刻1:命令A IF
時刻2:命令A ID / 命令B IF
時刻3:命令A EX / 命令B ID / 命令C IF
このように、複数の命令が異なるステージに同時に存在できます。
ただし実際には、命令同士の依存関係や分岐などによって、理想どおりに流せないことがあります。
このような問題はパイプラインハザードと呼ばれます。
FE試験では、まず5段階の順番と役割を押さえ、その後に必要に応じてハザードや分岐による影響を学ぶと整理しやすいです。
よくある誤解・混同
命令フェッチとメモリアクセスは同じ?
同じではありません。
IF
→ 命令を取る
MEM
→ データを読み書きする
どちらも「メモリにアクセスする」と見えますが、何を扱っているかが違います。
EXでメモリを読み出す?
5段パイプラインの基本的な整理では、EXは演算やアドレス生成を行う段階です。
ロード命令なら、
EX
→ 読む場所を計算
MEM
→ その場所から読む
と切り分けます。
WBは主記憶への書込み?
基本的な5段パイプラインでWBは、レジスタへの書戻しを表します。
一方、ストア命令で主記憶へデータを書き込む処理はMEMで行います。
MEM
→ メモリへの書込み
WB
→ レジスタへの書戻し
「どこへ書くのか」を確認します。
5段パイプラインなら1命令が5倍速くなる?
そういう意味ではありません。
パイプラインの狙いは、1命令そのものの処理時間を単純に5分の1にすることではなく、複数命令を重ねて処理してスループットを高めることです。
1命令を極端に速くする
→ ではない
複数命令を流れ作業で処理する
→ パイプライン
CPUの命令実行サイクルと5段パイプラインは同じ?
関連は深いですが、学習上は分けて考えると整理しやすいです。
CPUの命令実行サイクルでは、命令を取り出して解読し、必要なデータを用意して実行するという基本の流れを扱います。
5段パイプラインでは、その流れをIF・ID・EX・MEM・WBという段階に分けて並列的に進める構成として捉えます。
公式技術資料で確認する
命令パイプラインの具体的な構成はCPUアーキテクチャによって異なります。実際のプロセッサの命令実行や最適化に関する公式資料として、IntelのOptimization Reference Manualがあります。
実際のCPUは、FEで扱う単純な5段構成より複雑です。そのため、この記事の IF → ID → EX → MEM → WB は、CPU一般に必ずこの5段階が実装されるという意味ではなく、命令処理を理解するための代表的なモデルとして扱います。
FE試験では、フェッチ → デコード → 実行 → メモリアクセス → 書戻しという役割と順序を優先します。
まとめ(試験直前用)
- 5段パイプラインの基本順序は IF → ID → EX → MEM → WB
- IFは命令フェッチ、IDは命令デコードとレジスタ読出し
- EXは演算・アドレス生成、MEMはデータメモリアクセス、WBはレジスタへの書戻し
- ロード・ストアでは EXでアドレス生成 → MEMで実際にアクセス
- IFは命令、MEMはデータを扱うと切り分ける
- パイプラインは1命令を5倍速くするのではなく、複数命令を重ねてスループットを高める仕組み
- 各ステージ1サイクル・停止なしなら、必要サイクル数は 命令数 + ステージ数 - 1