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

上級の解説は準備中のため、上級の内容を表示しています。

概要 — まず全体をつかむ

中級では命令サイクルとキャッシュ階層を見ました。上級では、現代CPUが「見かけの順序」を保ちながら、いかに並べ替え・先読みしているかへ。

詳細 — 1段階ずつ追う

マイクロアーキテクチャという裏側

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

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

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

パイプラインの中で起きていること

  1. フロントエンド — 命令をフェッチ・デコードし、レジスタリネームで偽の依存を消す
  2. スケジューラ — オペランドが揃った命令を、空いている実行ユニットへ
  3. 投機実行 — 分岐の結果を予測して先へ進む。外れたら巻き戻す
  4. メモリ順序 — ロード/ストアを並べ替えつつ、規則(メモリモデル)に従って辻褄を合わせる
  5. リタイア — 結果を元のプログラム順で確定する

さらに深いレイヤ

  • 分岐予測 — 履歴からパターンを学習。的中率が性能を大きく左右する
  • キャッシュコヒーレンシ(MESIなど) — 複数コアが同じデータを持つとき、一貫性を保つプロトコル
  • メモリオーダリング — 並列プログラムで「他コアから見える順序」を規定。緩いほど速いが、バリアが必要になる
  • SIMD/ベクトル — 1命令で複数データを一括処理(画像・AIで効く)
  • SMT — 1コアで複数スレッドを走らせ、待ち時間を別スレッドで埋める
  • 電力とターボ — 発熱と電力の枠内でクロックを動的に上げ下げ

⚠️ 深いところの落とし穴

  • 投機実行のサイドチャネル — Spectre/Meltdown。速くするための先読みが、秘密漏洩の穴になった
  • false sharing — 別々の変数が同じキャッシュ行に乗り、無用な同期で遅くなる
  • メモリオーダリングのバグ — バリア不足で、別コアから見た順序が壊れる
  • 分岐予測ミスのコスト — 外れるとパイプラインを捨ててやり直し(数十サイクルの損)

理解度チェック

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

1. Spectre/Meltdown のようなCPU脆弱性の根っこにあるのは?

2. 1サイクルで複数の命令を同時に発行・実行できる仕組みは?

3. 分岐予測が外れたときに起きることとして正しいのは?

4. レジスタリネームの主な目的として正しいのは?

5. false sharing(フォルスシェアリング)の説明として正しいのは?

6. 複数のコアが同じデータを持つとき、その一貫性を保つMESIなどのプロトコルの総称を、カタカナで答えてください。

7. 1つのコアで複数スレッドを走らせ、待ち時間を別スレッドで埋める技術を、英字3文字で答えてください。

8. 命令を「プログラムの順番どおりでなく、準備できたものから実行する」方式は?