【初心者向け】CPU の基本概念（コンセプト）【５分で読める】

# CPU の基本概念（コンセプト）

理解のために小咄形式でまとめました。

:::note info
システムパフォーマンス関連記事の目次
- [【初心者向け】システムパフォーマンス関連まとめ【それぞれ５分で読める】](https://qiita.com/nouernet/items/d3efe67e0f52a92e061d)
:::

**登場人物**
- **太郎（後輩）**：入社1年目の若手エンジニア。
- **花子（先輩）**：システムエンジニア歴3年の先輩。

**場面：オフィスの開発ルーム**
*太郎が `CPU の基本概念（コンセプト）` に関する資料を見ながら、花子に質問する。*

**太郎**：「花子先輩、`CPU のコンセプト` って色々あって混乱してしまいます…。 `何が重要な概念なのか整理` したいです！」

**花子**：「いい質問ね！ `CPU のパフォーマンスを理解するための 7 つのコンセプト` を説明するわ。」

---

### **CPU のコンセプト**
**花子**：「CPU の `パフォーマンスを決める基本的な要素` は、以下の `7 つ` よ。」

1. **クロックスピード**
2. **命令**
3. **命令パイプライン**
4. **命令幅**
5. **命令サイズ**
6. **SMT（Simultaneous Multi-Threading）**
7. **IPC（Instructions Per Cycle） & CPI（Cycles Per Instruction）**

---

### **1. クロックスピード**
**花子**：「`クロックスピード` は、 `CPU の動作速度を決める基本的な指標` よ。」

- **クロックとは？** → `CPU の動作を同期するためのデジタル信号`。
- **クロックスピードの単位** → `GHz（ギガヘルツ）`。例えば `4GHz` なら `1秒間に40億回のクロックサイクル` がある。
- **影響** → `クロックスピードが高いほど、基本的に処理速度が速くなるが、発熱や消費電力も増加する。`

「これは `工場のベルトコンベアのスピード` みたいなもので、 `速く回るほど生産性が上がるけど、熱も発生する` のよ。」

**太郎**：「なるほど！ `クロックが高いほど速い` けど `発熱と電力消費が増える` んですね。」

---

### **2. 命令**
**花子**：「`CPU の命令` は、 `プログラムが実行される最小単位` よ。」

- **基本命令** → `足し算、引き算、メモリの読み書き、条件分岐など`。
- **RISC vs CISC**
  - **RISC（Reduced Instruction Set Computer）** → `少ない種類の命令を高速に処理（例: ARM, RISC-V）`
  - **CISC（Complex Instruction Set Computer）** → `多くの種類の命令をサポート（例: x86）`

「これは `簡単な作業を素早く終わらせる職人（RISC）` と `多機能で何でもできる職人（CISC）` の違いね。」

**太郎**：「ってことは、 `ARM（RISC）はシンプルで省電力`、 `x86（CISC）は高機能で複雑` なんですね！」

---

### **3. 命令パイプライン**
**花子**：「`命令パイプライン` は、 `複数の命令を同時に処理する仕組み` よ。」

- **パイプラインのステージ**
  - `フェッチ（Fetch）`: `命令を取得`
  - `デコード（Decode）`: `命令の解釈`
  - `実行（Execute）`: `演算処理`
  - `メモリアクセス（Memory Access）`: `必要ならメモリを読み書き`
  - `ライトバック（Write Back）`: `結果をレジスタに格納`

「これは `流れ作業の製造ライン` みたいなもので、 `一度に複数の命令を処理することで全体のスループットを向上させる` のよ。」

**太郎**：「つまり、 `パイプラインが深いほど処理効率が上がる` んですね！」

---

##### **例1: ファストフード店の注文処理**
**花子**：「ファストフード店のキッチンを想像してみて。注文を1つずつ処理すると、注文Aが完成してから次の注文Bを始めるため、時間がかかるわ。しかし、以下のように `流れ作業` にすると、 `複数の注文を同時並行で処理できる` ため、全体のスピードが向上するのよ。」

- **フェッチ（Fetch）**: お客様が注文をする
- **デコード（Decode）**: 注文をキッチンに伝え、調理内容を確認
- **実行（Execute）**: 料理を調理する
- **メモリアクセス（Memory Access）**: 必要なら材料を取り出す
- **ライトバック（Write Back）**: 完成した料理をお客様に渡す

「この方法なら、注文Aが完成するのを待たずに、並行して注文Bの調理を開始できるの。 `お店の回転率が上がる` のと同じように、CPUの `スループット` も向上するのよ。」

---

##### **例2: 自動車工場の生産ライン**
**花子**：「車を1台ずつ作ると時間がかかるけど、工場では `パイプライン生産方式` を採用しているの。これにより、 `複数の車の製造工程が同時進行できる` のよ。」

- **フェッチ（Fetch）**: 設計図をもとに部品を準備
- **デコード（Decode）**: 組み立て工程を確認
- **実行（Execute）**: 実際に組み立て作業を行う
- **メモリアクセス（Memory Access）**: 必要なら部品を倉庫から取り出し
- **ライトバック（Write Back）**: 完成車を出荷

「このように、 `異なる作業ステージを並行して動かすことで、工場全体の生産効率を上げる` のと同じ考え方が `CPUの命令パイプライン` なのよ。」

---

##### **例3: コンベアを使った皿洗い**
**花子**：「もし1人で洗い物をしていたら、「すすぐ→洗う→拭く→しまう」の順で1枚ずつ処理するため、とても時間がかかるわよね。でも、以下のように `複数の人で役割分担` すると、 `1枚の皿が完成する前に次の皿の処理を開始できる` の。」

- **フェッチ（Fetch）**: 皿を流し台に持ってくる
- **デコード（Decode）**: 皿の種類（コップ、皿、鍋）を分類
- **実行（Execute）**: 実際に洗う
- **メモリアクセス（Memory Access）**: 必要ならスポンジや洗剤を補充
- **ライトバック（Write Back）**: 乾燥機や食器棚に収納

「こうすれば `作業の並列化` ができて、 `洗い物のスピードが劇的に向上` するわね。これが `命令パイプライン` の仕組みとそっくりなのよ。」

---

**太郎**：「なるほど！ `パイプライン処理` って、 `効率のいい流れ作業` のことなんですね！ `パイプラインが深いほど、同時に処理できる数が増えて、効率が良くなる` というわけですね！」

---

### **4. 命令幅**
**花子**：「`命令幅` は、 `一度に処理できる命令の数` を決める指標よ。」

- **シングルイシュー** → `1 つの命令を1回に処理`
- **マルチイシュー** → `複数の命令を同時に処理（スーパースカラープロセッサ）`

「これは `一度に何個の荷物を運べるか` みたいなもので、 `命令幅が広いほど並列処理が可能になる` のよ。」

**太郎**：「なるほど！ `マルチイシューCPUは、一度に複数の命令を処理できるから高速` なんですね！」

---

### **5. 命令サイズ**
**花子**：「`命令サイズ` は、 `CPU が処理する命令のビット数` を指すわ。」

- **32ビット命令** → `ARMやx86の旧世代CPUで主流だった。`
- **64ビット命令** → `現在の主流。より多くのメモリを扱える。`

「これは `手紙のサイズ` みたいなもので、 `64ビットなら一度に大きな情報を処理できる` のよ。」

**太郎**：「ってことは、 `64ビットCPU はメモリを効率的に使える` んですね！」

---

### **6. SMT（Simultaneous Multi-Threading）**
**花子**：「`SMT（同時マルチスレッディング）` は、 `1 つのコアが複数のスレッドを並行処理する技術` よ。」

- **Intel のハイパースレッディング（HT）** → `1 コアで 2 つのスレッドを実行可能。`
- **AMD の SMT** → `同じく 1 コアで 2 つのスレッドを処理できる。`

「これは `1 人のシェフが左右の手で別々の料理を作る` のと同じね。」

**太郎**：「なるほど！ `SMT を使うとコアのリソースを効率的に使える` んですね！」

---

### **7. IPC（Instructions Per Cycle） & CPI（Cycles Per Instruction）**
**花子**：「`IPC（サイクルあたりの命令数）` は、 `CPU の効率を測る指標` よ。」

- **IPC が高い** → `CPU が 1 サイクルで多くの命令を実行できる。`
- **CPI（1 命令あたりのサイクル数）** → `CPI が低いほど効率が良い。`

「これは `工場の生産効率` みたいなもので、 `IPC が高いと処理速度が上がる` のよ。」

---

#### **例1: ハンバーガーショップの生産効率**
**花子**：「ファストフード店を考えてみましょう。お店の生産能力（＝CPUの処理能力）を向上させるには、 **1分間に作れるハンバーガーの数（＝IPC）** を増やすのが大切よ。」

- **IPC が高い場合（理想的な環境）**  
  - 1回の作業（サイクル）で、 **同時に3つのハンバーガーを作れる**  
  - → 生産性が高く、 **注文がすぐさばける**
  
- **IPC が低い場合（非効率な環境）**  
  - 1回の作業（サイクル）で **1つしか作れない**
  - → 注文が溜まってしまい、 **待ち時間が増える**

「また、 **CPI（Cycles Per Instruction）** は、「1つのハンバーガーを作るのにかかる作業ステップ数（＝サイクル数）」を表しているの。」

- **CPI が低い（理想的な環境）**  
  - **3ステップ（バンズ用意 → 一気に具材を乗せる → 包装）で完成**
  - → **短時間で商品が完成する**
  
- **CPI が高い（非効率な環境）**  
  - **6ステップ（具材を1つずつ丁寧に配置、個別包装など）で完成**
  - → **時間がかかりすぎて、回転率が悪い**

「結局、お店の効率を上げるには **IPC を上げ、CPI を下げる** ことが重要なのね。」

---

#### **例2: 自動車工場の生産ライン**
**花子**：「車を作る工場では、多くの工程が並列で動いているわよね。ここでの **IPC** は `1時間に何台の車を作れるか` に相当するの。」

- **IPC が高い工場（高効率）**  
  - 1時間に **10台の車を生産できる**
  - → **多くのロボットアームが並列に動作** し、無駄がない
  - → **最新の設備で部品の取り付けが高速**
  
- **IPC が低い工場（低効率）**  
  - 1時間に **3台しか生産できない**
  - → 作業員が1つずつ手作業で組み立てている
  - → 一部の工程で **ボトルネック（CPI が高い工程）が発生している**

**CPI の考え方** で言えば、「1台の車を作るのにかかる工程数」がCPIになるの。

- **CPI が低い（効率的な工場）**  
  - 1台の車を **20工程** で完成
  - → ロボットアームが **一度に複数の作業** をしている

- **CPI が高い（非効率な工場）**  
  - 1台の車を **40工程** で完成
  - → **部品が順番待ちで遅れている**

---

#### **例3: 学校のテスト採点**
**花子**：「先生が **100人分のテストを採点する** ときの作業効率も、IPC と CPI に似ているわ。」

- **IPC が高い（高速採点）**  
  - **複数の先生が並列で採点**
  - **マークシートを使って機械で自動採点**
  - → **1時間で100枚採点できる**
  
- **IPC が低い（遅い採点）**  
  - **1人の先生が手作業で1枚ずつ採点**
  - **論述問題が多く、1枚に時間がかかる**
  - → **1時間で20枚しか採点できない**

**花子**：「CPI を考えると、`1枚のテストを採点するのにかかる手順数`がCPIよ。」

- **CPI が低い（効率的な採点）**  
  - **マークシートで1工程で採点完了**
  - → **1枚あたり5秒で済む**
  
- **CPI が高い（時間がかかる採点）**  
  - **論述問題の採点で1枚に10工程かかる**
  - → **1枚あたり5分かかる**

---

### **まとめ**
**太郎**：「つまり、 **CPU の効率を最大化するには、IPC を上げ、CPI を下げることが大事** なんですね！」

**花子**：「その通りよ！これは `工場の生産効率` や `飲食店の回転率` に似ていて、 **ボトルネックをなくして並列処理を増やすのがポイント** なの。」

**花子**：「CPU の `コンセプト` を理解すると、 `どの CPU がどの用途に適しているかを判断できる` わ。」

**太郎**：「ありがとうございます！ `htop で CPU 使用率と SMT の影響` を確認してみます！」 

# 参考リンク

システムパフォーマンス関連記事の目次

- [【初心者向け】システムパフォーマンス関連まとめ【それぞれ５分で読める】](https://qiita.com/nouernet/items/d3efe67e0f52a92e061d)

システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。

- [［改訂新版］プロのためのLinuxシステム構築・運用技術](https://www.amazon.co.jp/dp/B01LZURAPK)
- [改訂2版 ネットワークエンジニアの教科書](https://www.amazon.co.jp/dp/B07NXQ4TDV)
- [絵で見てわかるシステムパフォーマンスの仕組み](https://www.amazon.co.jp/dp/B00LHFOTF4)
- [詳解 システム・パフォーマンス 第2版](https://www.oreilly.co.jp/books/9784814400072/)
- [入門 モダンLinux](https://www.oreilly.co.jp/books/9784814400218/)
- [Linuxシステム管理](https://www.oreilly.co.jp/books/9784873113463/)