# Week 7：高速なCPU

## 今週のゴール

- レイテンシーとスループットを区別できる。
- パイプラインの利点とハザードを説明できる。
- 分岐予測、投機実行、アウト・オブ・オーダー実行の目的を説明できる。
- クロック、IPC、コア数の一つだけでは性能を決められないと理解する。

## 1. CPU時間の見方

単純化したCPU実行時間は次の関係で考えられます。

```text
実行時間 ≈ 命令数 × CPI × クロック周期
IPC = 1 / CPI  （単純な平均として）
```

- 命令数：プログラム、コンパイラ、ISAなどに依存。
- CPI：1命令あたりの平均クロック数。
- クロック周期：1サイクルの時間。周波数の逆数。

異なるCPUでは1クロックに進む仕事量が異なるため、GHzだけでは比較できません。

## 2. パイプライン

洗濯を「洗う・乾かす・畳む」に分け、別の洗濯物を重ねて処理するのと似ています。

```text
cycle: 1  2  3  4  5  6  7
I1:    IF ID EX MEM WB
I2:       IF ID EX MEM WB
I3:          IF ID EX MEM WB
```

一命令が5段すべてを通る時間は残りますが、満杯になった後は理想的には毎サイクル1命令を完了できます。つまり主にスループットを改善します。

## 3. ハザード

### データハザード

```text
I1: ADD R1, R2, R3
I2: SUB R4, R1, R5
```

I2はI1の結果R1を必要とします。結果がレジスタへ戻るまで待つ方法はstallです。途中の演算結果を後続段へ直接渡す方法はforwardingまたはbypassingです。

### 制御ハザード

分岐結果が出るまで、次に取得すべき命令が分かりません。待つと性能が落ちるため、CPUは分岐方向と分岐先を予測します。

### 構造ハザード

複数命令が同じハードウェア資源を同時に必要とする競合です。資源を複製するか、どちらかを待たせます。

## 4. 分岐予測と投機実行

CPUは過去の傾向などから分岐先を予測し、その経路の命令を先に実行します。正しければ待ち時間を隠せます。外れた場合は誤った経路の結果を破棄し、正しい場所からやり直します。

投機実行はアーキテクチャ上の結果を勝手に変更してよいという意味ではありません。命令の完了は、プログラムから正しい順序に見えるよう管理されます。

## 5. アウト・オブ・オーダー実行

次の命令を考えます。

```text
I1: LOAD R1, [slow_address]
I2: ADD  R4, R2, R3      ; I1に依存しない
I3: MUL  R5, R1, R6      ; I1に依存
```

I1のメモリ待ち中にI2を実行できます。CPUはデータ依存を追跡し、準備できた命令を先に実行します。最終的な確定はプログラム順に見えるよう管理します。

## 6. マルチコアとSMT

- マルチコア：物理的なCPUコアを複数搭載する。
- SMT：一つのコアで複数のハードウェアスレッド状態を持ち、実行資源の空きを利用する。

8コア16スレッドは、16個の完全な物理コアと同じではありません。またプログラム側が並列化できなければ、コアを増やしても速くなりません。

## 7. Amdahlの法則の直感

プログラムの20%が逐次処理として残るなら、並列部分を無限に高速化しても全体は最大5倍です。

```text
最大高速化 = 1 / 逐次割合 = 1 / 0.2 = 5
```

GPUを使ってもCPU側の準備、データ転送、逐次部分が全体性能を制限することにつながります。

## 実習

[CPU/GPU対話型ラボ](../labs/cpu_gpu_lab.html)のCPUタブを開きます。

1. 5個の独立命令を流し、理想パイプライン表を作る。
2. 直前結果に依存する命令を追加し、stallを1サイクル挿入する。
3. 3命令目を分岐にし、予測失敗で後続2命令を破棄する図を作る。
4. 「命令数」「完了までのサイクル」「理想IPC」を記録する。

## 説明課題

「5段パイプラインにすると、一命令が必ず5倍速くなる」という主張を訂正してください。

## 小テスト

1. パイプラインが主に改善するのはレイテンシーかスループットか。
2. 後続命令が直前命令の結果を待つ問題を何というか。
3. 分岐予測失敗時、投機実行した誤経路の結果はどうなるか。
4. アウト・オブ・オーダー実行は何を利用して待ち時間を隠すか。
5. 20%が高速化不能なら、残りを無限に高速化した最大高速化率はいくつか。

[解答](../answers.md#week-7)

