CPU(頭脳)— 計算と指示を担う中心

概要 — まず全体をつかむ

初級ではCPUを「料理人」と捉えました。中級では、命令サイクルと、速さを支える仕組みを見ます。

詳細 — 1段階ずつ追う

これは何をする係?

CPUは、機械語の命令を命令サイクルで処理し続けます。

アニメーション『命令サイクル』を開く
命令サイクルぐるぐる繰り返す① フェッチ(取得)メモリから命令を取ってくる② デコード(解読)命令の意味を読み解く③ 実行演算・分岐・メモリ操作④ ライトバック結果をレジスタ/メモリへ書き戻すCPUはこの4段を高速に繰り返して命令を処理し続ける
CPUチップ
CPU — 計算と指示を担う中心
  • フェッチ — メモリ(実際は近いキャッシュ)から命令を取得
  • デコード — 命令の意味を解読
  • 実行 — 演算・分岐・メモリアクセスなどを行う
  • ライトバック — 結果をレジスタやメモリへ書き戻す(初級の4段目にあたる)

登場人物メモ:

  • ※1 レジスタ — CPU内の最小・最速の作業場所
  • ※2 パイプライン — 複数命令を工程ごとに重ねて流し、処理を詰める仕組み
この部分をもっと深く(上級

同じ命令セット(ISA)でも、その実装(マイクロアーキテクチャ) は世代・メーカーで大きく違います。現代CPUの要点は2つ。

  • スーパースカラ — 1サイクルで複数命令を同時に発行・実行する
  • アウトオブオーダー実行 — プログラム順でなく、依存が解けた命令から実行し、最後に順序を整えて確定(リタイア)する

「プログラムからは順番どおりに見えるが、中では並べ替えている」——これが性能の源です。

やさしく言うと(初級

CPUは、プログラムの命令を1つずつ読み取り、計算し、判断し、他の部品に指示します。「足す」「比べる」「ここへ書く」といった小さな命令を、とてつもない速さで次々にこなすのが得意です。

CPUチップ
CPU — 計算と指示を担う中心

登場人物メモ:

  • ※1 命令 — CPUへの小さな指示(足す・比べる・移動する など)
  • ※2 コア — 料理人の人数。複数あると同時並行に強い

速さを支える仕組み

  1. パイプライン — 「取得中に次を解読」のように工程を重ねてスループットを上げる
  2. キャッシュ階層(L1/L2/L3) — メモリの遅さを、近い高速メモリで隠す
  3. 分岐予測・投機実行 — 先回りして無駄待ちを減らす
  4. 複数コア/SMT — 並列に、また1コアで見かけ上2スレッドを走らせる
アニメーション『命令パイプライン』を開く
命令パイプライン自動車工場のラインのように、工程をずらして重ね、次々に流すフェッチデコード実行書き戻しサイクル →12345678命令1フェッチ取得デコード解読実行演算書き戻し保存命令2フェッチ取得デコード解読実行演算書き戻し保存命令3フェッチ取得デコード解読実行演算書き戻し保存命令4フェッチ取得デコード解読実行演算書き戻し保存命令5フェッチ取得デコード解読実行演算書き戻し保存↑ この1サイクルで4命令が別々の工程を並行処理1命令に4段かかっても、段をずらして重ねれば「毎サイクル1命令ずつ完成」する=スループット向上
この部分をもっと深く(上級
  1. フロントエンド — 命令をフェッチ・デコードし、レジスタリネームで偽の依存を消す
  2. スケジューラ — オペランドが揃った命令を、空いている実行ユニットへ
  3. 投機実行 — 分岐の結果を予測して先へ進む。外れたら巻き戻す
  4. メモリ順序 — ロード/ストアを並べ替えつつ、規則(メモリモデル)に従って辻褄を合わせる
  5. リタイア — 結果を元のプログラム順で確定する
やさしく言うと(初級
  1. メモリから命令を取ってくる(フェッチ)
  2. その命令の意味を読み解く(デコード)
  3. 計算・判断を実行する
  4. 結果をメモリなどに書き戻す
  5. これを1秒に何十億回も繰り返す

性能を左右する要素

  • クロック × IPC — 実性能はクロックだけでなく1サイクルあたりの命令数(IPC)にもよる
  • コア数とスケール — 並列化できる仕事は多コアが効く。できない仕事は単コア性能が効く
  • メモリとの距離 — キャッシュミスは大きな待ち。データ局所性が効く
  • 命令セット(ISA) — x86/Arm など。32/64ビットはレジスタ幅=一度に扱えるデータ幅。近年は電力効率も重要指標
この部分をもっと深く(上級
  • 分岐予測 — 履歴からパターンを学習。的中率が性能を大きく左右する
  • キャッシュコヒーレンシ(MESIなど) — 複数コアが同じデータを持つとき、一貫性を保つプロトコル
  • メモリオーダリング — 並列プログラムで「他コアから見える順序」を規定。緩いほど速いが、バリアが必要になる
  • SIMD/ベクトル — 1命令で複数データを一括処理(画像・AIで効く)
  • SMT — 1コアで複数スレッドを走らせ、待ち時間を別スレッドで埋める
  • 電力とターボ — 発熱と電力の枠内でクロックを動的に上げ下げ
やさしく言うと(初級
  • クロック — 動作のリズム(速さの目安)。ただし数字だけでは決まらない
  • コア数 — 同時に進められる作業の数(料理人の人数)
  • キャッシュ — よく使うデータをCPUのすぐ近くに置く小さな高速メモリ

「クロックが高い=必ず速い」ではありません。用途(1つを速く/たくさん同時に)で向き不向きがあります。

⚠️ うまくいかないとき

  • サーマルスロットリング — 発熱で自動的にクロックを落とす
  • キャッシュミス多発 — データの並びが悪く、メモリ待ちが増える
  • 分岐予測ミス — パイプラインをやり直して無駄が出る
  • 並列化の限界 — 直列部分が残ると、コアを増やしても頭打ち(アムダールの法則)
この部分をもっと深く(上級
  • 投機実行のサイドチャネル — Spectre/Meltdown。速くするための先読みが、秘密漏洩の穴になった
  • false sharing — 別々の変数が同じキャッシュ行に乗り、無用な同期で遅くなる
  • メモリオーダリングのバグ — バリア不足で、別コアから見た順序が壊れる
  • 分岐予測ミスのコスト — 外れるとパイプラインを捨ててやり直し(数十サイクルの損)
やさしく言うと(初級
  • 熱くなる — 高速に動くほど発熱。冷やせないと自動で性能を落とす
  • 待たされる — メモリやストレージが遅いと、CPUが暇になる(宝の持ち腐れ)

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. L1→L2→L3 とキャッシュを分ける理由に最も近いのは?

2. CPUの基本サイクル「フェッチ→デコード→実行」のフェッチにあたるのは?

3. 命令サイクルで「デコード」にあたるのはどれ?

4. パイプラインが処理を速くする仕組みに最も近いのは?

5. クロックが同じでもCPUの実性能が違うことがある、その主な理由は?

6. 直列(並列化できない)部分が残ると、コアを増やしても性能が頭打ちになる。これを説明する法則は?

7. x86やArmのように、CPUが解釈できる命令の種類・形式の取り決めを何と呼ぶ? 英字3文字で答えてください。

8. 発熱が上がると、CPUが自動でクロックを落として身を守る動作を何と呼ぶ? カタカナで答えてください。