株式会社ジオデータ開発 ロゴ
株式会社ジオデータ開発GEO DATA DEVELOPMENT Inc.
CPU論理回路半加算器全加算器ALUCISCRISCパイプライン命令実行ハザードフォワーディングストール分岐予測

COMPUTER ARCHITECTURE / CPU PIPELINE

CPUの仕組みを基礎から図解|論理回路・加算器・RISC/CISC・5段パイプライン

公開日:2026-10-14

CPUがたくさんの命令をすばやく処理できるのは、複数の命令を流れ作業のように重ねて進められるためです。洗濯や工場の工程を例にして、パイプラインの順序・性能・つまずきやすい場面を図と操作ラボで学びます。

この記事の学習ルート

用途と例え → 命令の5段階 → 同時進行の時間図 → 性能 → データ・制御・構造ハザード → 回避策 → RISCとCISC → 操作ラボ

01|CPUは何のために命令を実行しますか

アプリのボタンを押す、写真を表示する、動画を再生するなど、コンピューターの動作は膨大な命令の処理によって成り立っています。CPUは、プログラムを構成する機械語命令を読み取り、演算したりメモリを読み書きしたりします。

命令ごとに「取り出す・解釈する・実行する」などの工程があります。これを各命令がすべて終わるまで順番待ちさせるのではなく、異なる命令の工程を重ねるのがパイプライン処理です。

02|まず0と1を扱う論理回路から考えます

CPUは、最初から「足し算」や「文字列」を理解しているわけではありません。回路の中では電圧などの物理的な信号を0と1として扱い、それらを組み合わせて判断や計算を行います。例えば「2つの条件がどちらも成立しているか」はAND、「どちらか成立しているか」はORで表現できます。

0と1の信号を論理ゲートへ通すイメージ
A=1B=0A=1B=0ANDOR結果 0結果 1
AND(論理積)

両方が1のときだけ1です。

OR(論理和)

どちらかが1なら1です。

NOT(否定)

0と1を反転します。

ビットを扱うAND、OR、NOTなどの基本回路を組み合わせることで、より複雑な演算回路や制御回路を作れます。XOR(排他的論理和)は入力が異なるときに1になる回路で、足し算にも使います。

03|論理回路を組み合わせると加算器になります

電卓で「1 + 1 = 2」と表示されるとき、2進数では 1 + 1 = 10 です。下の半加算器は、2つの1ビットを足すための最小限の回路です。和のビットと次の桁へ渡す桁上がりを別々に作ります。

半加算器:同じ入力から『和』と『桁上がり』を作ります
ABXORAND和 S桁上がり C

半加算器は S = A XOR B、C = A AND B で表せます。例えば1+1は2進数で10なので、S=0、C=1です。

AB和 S桁上がり C
0000
0110
1010
1101

ただし半加算器は、前の桁から来た桁上がりを入力できません。そこで、A・B・桁上がり入力Cinの3つを足せる全加算器を使います。全加算器を複数段つなぐと、8ビットや32ビットなどの加算に発展します。

半加算器:A + B → 和S と 桁上がりC
全加算器:A + B + Cin → 和S と 桁上がりCout
複数ビット加算器:各桁のCoutを次の桁のCinへ渡します。

04|計算回路はALUへ、保存場所はレジスタへつながります

論理ゲートからCPUの命令処理へつながる全体像

論理ゲート

AND・OR・XORなど

加算器

2進数の計算を行います

ALU

加算・論理演算・比較など

CPU

制御装置と組み合わせ命令を実行します

ALUはArithmetic Logic Unit(算術論理演算装置)です。すべての命令がALUだけで実行されるわけではありません。

CPUには計算回路のほかにも、命令を読み取る回路、データを一時保存するレジスタ、次の命令の位置を示すプログラムカウンタ(PC)などがあります。レジスタはCPUのすぐ近くにある小さく高速な保存場所です。

CPUが命令を取り出し、計算し、結果を保存するまで
CPU主記憶命令とデータPC命令デコーダレジスタALUロード/ストア次の命令の位置命令の種類取出し/読書き整数演算やアドレス計算

理解のために主要部品だけを描いた概念図です。実際のCPUにはキャッシュ、制御回路、複数の演算器などもあります。矢印は厳密な配線図ではありません。

例えば「レジスタの値に5を足す」場合、レジスタから値を読み、ALUで計算し、結果をレジスタへ戻します。一方「メモリの値を読む」命令なら、計算したアドレスを使ってメモリからデータを取得します。こうした違いを理解すると、後で出てくるEX・MEM・WBの役割が明確になります。

05|命令セットとはCPUに指示できる『言葉』です

CPUには、足す、比較する、メモリから読む、メモリへ書く、条件によって次の命令を変える、といった命令があります。これらの命令の種類、形式、振る舞いを定めるのが命令セットアーキテクチャ(ISA)です。

ソフトウェアの処理がCPUへ届くまで

プログラム

例:合計を計算します

機械語命令

加算、ロード、分岐など

デコーダ

命令を読み取ります

実行回路

ALU・メモリアクセスなど

実際にはコンパイラやOS、キャッシュなど多くの仕組みが関わります。ここでは命令実行の流れに注目しています。

CPUが何を命令として認識するか(ISA)と、命令をどんな回路や段階で処理するか(マイクロアーキテクチャ)は別の概念です。同じISAでも、製品によってCPU内部の設計が異なることがあります。

06|RISCとCISCは命令セットの設計思想が異なります

RISCは、比較的単純で規則的な命令を中心に設計する考え方です。CISCは、メモリ操作を含む複雑な処理を1命令で表せる場合がある設計です。どちらもCPUを速くするためのアプローチですが、単に命令数が少ない・多いという意味ではありません。

観点RISCの典型例CISCの典型例
命令の形式比較的規則的です。さまざまな長さや形式があります。
メモリへのアクセスロード・ストア命令に分ける方式が代表的です。演算命令がメモリオペランドを扱える場合があります。
代表的なISARISC-V、Armなどがあります。x86系が代表例です。
CPU内部の実装パイプラインや複数命令の同時処理を利用できます。複雑な命令を内部で小さな操作に分ける実装もあります。

07|ここまでの部品をまとめると5段パイプラインです

論理回路からパイプラインまでの学習地図

0と1

論理ゲート

計算する

加算器・ALU

命令を動かす

PC・レジスタ・制御

重ねて処理する

IF→ID→EX→MEM→WB

各要素が直列につながっているという意味ではなく、概念を順番に理解するための地図です。

命令が流れる順序を、部品の役割から考えてみましょう。PCをもとに命令を取るIF、命令を解読しレジスタを読むID、ALUを利用するEX、ロードやストアを扱うMEM、計算結果をレジスタに戻すWBです。この順序は、処理の意味を追えば自然に導けます。

08|典型的なRISCの5段パイプライン

教育用の典型的な5段パイプラインでは、命令をIF・ID・EX・MEM・WBの5段階に分けます。前段の結果を受け取りながら、次のクロックで次段へ進みます。

1命令が進む5つのステージ
1IF

命令フェッチ

命令を取り出します

2ID

命令デコード

読み取り、レジスタを調べます

3EX

実行

演算し、アドレスを計算します

4MEM

メモリアクセス

必要ならデータメモリを読み書きします

5WB

書込み

結果をレジスタへ書き戻します

IF → ID → EX → MEM → WB と進みます。MEMは毎命令で段階として通過しますが、実際にデータメモリへアクセスするのはロード/ストア命令などです。

段階何をしますか身近なたとえ
IF (Instruction Fetch)PCが示す位置から命令を取り出します。作業指示書を受け取ります。
ID (Instruction Decode)命令を解読し、必要なレジスタ値を読みます。指示内容と材料を確認します。
EX (Execute)ALUで計算したり、実効アドレスを求めたりします。作業や場所の計算を行います。
MEM (Memory Access)ロード・ストアではデータメモリにアクセスします。必要な部品を出し入れします。
WB (Write Back)計算・ロードの結果をレジスタへ書き戻します。完成した結果を記録します。

09|1命令を処理する順序を覚える理由

基本的な順番はIF → ID → EX → MEM → WBです。命令を取り出してから内容を解読し、計算によって必要な結果やメモリアドレスを求め、そのあと必要ならデータメモリへアクセスし、最後にレジスタへ結果を書き込みます。

5段の順番と略語
IF   Instruction Fetch        命令フェッチ
ID   Instruction Decode       命令デコード・レジスタ読出し
EX   Execute                  演算・アドレス生成
MEM  Memory Access            データメモリアクセス
WB   Write Back               レジスタ書戻し

IFで命令そのものを取り出すことと、MEMでロード/ストアのデータを扱うことを区別するのがポイントです。IFで参照する命令メモリとMEMで参照するデータメモリは、概念上異なる用途を持っています。

10|重ねて実行すると何が速くなるのでしょうか

1段階に1クロックずつ必要で、命令同士に依存関係がないと仮定します。パイプラインなしでは4命令に20クロック必要です。5段パイプラインを重ねれば、最初の結果が出るまで5クロックかかりますが、その後は理想的には毎クロック1命令を完了できます。

重ねない場合:4命令で20クロック
命令1234567891011121314151617181920
命令1IFIDEXMEMWB···············
命令2·····IFIDEXMEMWB··········
命令3··········IFIDEXMEMWB·····
命令4···············IFIDEXMEMWB

1命令の5段階を終えるまで、次の命令を始めない場合の模式図です。

重ねた場合:4命令が8クロックで完了
命令12345678
命令1IFIDEXMEMWB···
命令2·IFIDEXMEMWB··
命令3··IFIDEXMEMWB·
命令4···IFIDEXMEMWB

同じクロックに複数の命令が異なるステージを担当していることに注目してください。依存関係や分岐による停止がない理想例です。

ここで短くなるのは、主に一定時間に完了できる命令数(スループット)です。1命令が5段階を通るというレイテンシ自体が5分の1になるわけではありません。

11|理想的なサイクル数とCPIを計算します

k段のパイプラインでn命令を処理すると、各段階が1クロックで停止がない理想モデルでは、最初の命令にkクロック、その後のn−1命令に各1クロック必要です。

理想的なパイプラインのサイクル数
パイプラインなし: n × k
パイプラインあり: k + (n - 1)

例:k = 5、n = 8
パイプラインなし:8 × 5 = 40 クロック
パイプラインあり:5 + 7 = 12 クロック

CPI(Cycles Per Instruction)は1命令当たりの平均クロック数です。理想的な単一発行パイプラインでは、命令数が十分多いとCPIは1に近づきます。ただしストールが発生すると大きくなります。

12|実際には同時進行できない場合があります

流水作業で前の工程の材料を待つことがあるように、CPUでも次へ進めない場面があります。これをパイプラインハザードと呼びます。大きく分けて3種類あります。

データハザード

前の命令の結果が必要です

例:計算した直後の値を次の命令で使います。フォワーディングやストールで対応します。

制御ハザード

次に実行する命令が確定しません

例:if文に対応する分岐の結果を待ちます。予測、投機実行、フラッシュで対応します。

構造ハザード

同じ装置を同時に使おうとします

例:命令とデータで1つのメモリ回路を奪い合います。資源の分離や待機で対応します。

13|データハザード:結果がまだ届いていません

例えば1つ目の命令がレジスタx1に計算結果を書き、2つ目の命令がすぐx1を使うとします。後続の命令がID段階でx1を読みたい時点では、先行命令のWBが終わっていない場合があります。

RAW(Read After Write)依存の例
命令A: ADD x1, x2, x3   // x1へ結果を書きます
命令B: SUB x4, x1, x5   // 直後にx1を読みます

このような関係をRAW依存と呼びます。結果を待つために命令を停止させるストール、演算結果をWBまで待たずに次の演算回路へ送るフォワーディング(バイパス)などで対応します。

14|制御ハザード:次に実行する命令が分かりません

条件分岐命令は、判定が終わるまで次に実行すべき命令の位置が確定しない場合があります。CPUは先にどちらかを予測して命令を取り込み、予測が間違っていたら取り消して正しい経路からやり直します。

これを分岐予測といい、予測に基づいた処理は投機実行と呼ばれます。誤った経路の命令を破棄する動作がパイプラインフラッシュです。予測精度とペナルティが性能に影響します。

15|構造ハザード:装置の取り合いが起こります

IFが命令を読みたい一方で、MEMがデータを読みたいとき、同じ物理メモリポートしか使えない構成なら競合が発生します。専用の命令・データキャッシュや複数ポートの利用、ストールによって対処します。

この例は、IFとMEMが単に『順番の前後』ではなく、同じクロックに異なる命令から使われ得ることを理解する助けになります。

16|RISCとCISC、パイプラインとの関係

RISCは比較的単純な命令形式とロード/ストアを中心とした設計を採用することが多く、典型的な5段パイプラインを学ぶ題材として分かりやすい体系です。一方、CISCは複雑な命令を持つことがあります。

ただし、現在のCPUを『RISCなら必ず5段』『CISCならパイプライン化できない』と区別することはできません。実製品には多数の段階、複数命令の同時発行、アウトオブオーダ実行などがあります。

17|さらに理解しておきたいCPUの関連技術

技術どんな仕組みですか
スーパースカラ複数の実行資源を使い、同じクロックで複数の命令を発行・処理します。
アウトオブオーダ実行依存関係を考慮しながら、実行可能な命令をプログラムの順番とは異なる順で処理します。
レジスタリネーミング名前上の依存(WAR・WAW)を減らし、並列性を引き出します。
キャッシュメモリ命令やデータの取得を高速化し、メモリ待ちの影響を抑えます。
分岐予測条件分岐の進行先を予想し、待ち時間を減らします。

18|操作ラボでクロックごとの動きを確認します

ラボでは命令数・パイプラインの有無・ストールの有無を変更し、各命令が何クロック目にどの段階へ進むか確認できます。理想状態の流れ作業と、途中で待ちが入る状態を比較してください。

INTERACTIVE LAB

命令の流れを1クロックずつ進めてみましょう

下の時間図で列がクロック、行が命令を表します。同じ列に複数の色付きマスがあるとき、異なる命令が同時進行しています。

現在のクロック

1 / 9

完了した命令

0 / 5

理想モデルの総クロック数

9

命令/時刻123456789
命令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

クロック1で処理していること

命令1:IF — 命令を取り出します

前提:各段階を1クロックとする単一発行・インオーダの教育用モデルです。実機の分岐予測やフォワーディング、メモリ待ちは個別には再現していません。

19|まとめ

5段パイプラインはIF → ID → EX → MEM → WBの順番です。順序そのものは1命令の動きを表し、パイプライン化の効果は異なる命令の処理を重ねる点にあります。スループットとレイテンシを区別し、3つのハザードと回避策まで理解すると、CPUが速く動く理由がつながります。