中級では命令サイクルとキャッシュ階層を見ました。上級では、現代CPUが「見かけの順序」を保ちながら、いかに並べ替え・先読みしているかへ。
概要 — まず全体をつかむ
詳細 — 1段階ずつ追う
マイクロアーキテクチャという裏側
同じ命令セット(ISA)でも、その実装(マイクロアーキテクチャ) は世代・メーカーで大きく違います。現代CPUの要点は2つ。
- スーパースカラ — 1サイクルで複数命令を同時に発行・実行する
- アウトオブオーダー実行 — プログラム順でなく、依存が解けた命令から実行し、最後に順序を整えて確定(リタイア)する
「プログラムからは順番どおりに見えるが、中では並べ替えている」——これが性能の源です。
やさしく言うと(中級)
CPUは、機械語の命令を命令サイクルで処理し続けます。
アニメーション『命令サイクル』を開く

- フェッチ — メモリ(実際は近いキャッシュ)から命令を取得
- デコード — 命令の意味を解読
- 実行 — 演算・分岐・メモリアクセスなどを行う
- ライトバック — 結果をレジスタやメモリへ書き戻す(初級の4段目にあたる)
登場人物メモ:
- ※1 レジスタ — CPU内の最小・最速の作業場所
- ※2 パイプライン — 複数命令を工程ごとに重ねて流し、処理を詰める仕組み
パイプラインの中で起きていること
- フロントエンド — 命令をフェッチ・デコードし、レジスタリネームで偽の依存を消す
- スケジューラ — オペランドが揃った命令を、空いている実行ユニットへ
- 投機実行 — 分岐の結果を予測して先へ進む。外れたら巻き戻す
- メモリ順序 — ロード/ストアを並べ替えつつ、規則(メモリモデル)に従って辻褄を合わせる
- リタイア — 結果を元のプログラム順で確定する
やさしく言うと(中級)
- パイプライン — 「取得中に次を解読」のように工程を重ねてスループットを上げる
- キャッシュ階層(L1/L2/L3) — メモリの遅さを、近い高速メモリで隠す
- 分岐予測・投機実行 — 先回りして無駄待ちを減らす
- 複数コア/SMT — 並列に、また1コアで見かけ上2スレッドを走らせる
アニメーション『命令パイプライン』を開く
さらに深いレイヤ
- 分岐予測 — 履歴からパターンを学習。的中率が性能を大きく左右する
- キャッシュコヒーレンシ(MESIなど) — 複数コアが同じデータを持つとき、一貫性を保つプロトコル
- メモリオーダリング — 並列プログラムで「他コアから見える順序」を規定。緩いほど速いが、バリアが必要になる
- SIMD/ベクトル — 1命令で複数データを一括処理(画像・AIで効く)
- SMT — 1コアで複数スレッドを走らせ、待ち時間を別スレッドで埋める
- 電力とターボ — 発熱と電力の枠内でクロックを動的に上げ下げ
やさしく言うと(中級)
- クロック × IPC — 実性能はクロックだけでなく1サイクルあたりの命令数(IPC)にもよる
- コア数とスケール — 並列化できる仕事は多コアが効く。できない仕事は単コア性能が効く
- メモリとの距離 — キャッシュミスは大きな待ち。データ局所性が効く
- 命令セット(ISA) — x86/Arm など。32/64ビットはレジスタ幅=一度に扱えるデータ幅。近年は電力効率も重要指標
⚠️ 深いところの落とし穴
- 投機実行のサイドチャネル — Spectre/Meltdown。速くするための先読みが、秘密漏洩の穴になった
- false sharing — 別々の変数が同じキャッシュ行に乗り、無用な同期で遅くなる
- メモリオーダリングのバグ — バリア不足で、別コアから見た順序が壊れる
- 分岐予測ミスのコスト — 外れるとパイプラインを捨ててやり直し(数十サイクルの損)
やさしく言うと(中級)
- サーマルスロットリング — 発熱で自動的にクロックを落とす
- キャッシュミス多発 — データの並びが悪く、メモリ待ちが増える
- 分岐予測ミス — パイプラインをやり直して無駄が出る
- 並列化の限界 — 直列部分が残ると、コアを増やしても頭打ち(アムダールの法則)
理解度チェック
そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。
問1. Spectre/Meltdown のようなCPU脆弱性の根っこにあるのは?
問2. 1サイクルで複数の命令を同時に発行・実行できる仕組みは?
問3. 分岐予測が外れたときに起きることとして正しいのは?
問4. レジスタリネームの主な目的として正しいのは?
問5. false sharing(フォルスシェアリング)の説明として正しいのは?
問6. 複数のコアが同じデータを持つとき、その一貫性を保つMESIなどのプロトコルの総称を、カタカナで答えてください。
問7. 1つのコアで複数スレッドを走らせ、待ち時間を別スレッドで埋める技術を、英字3文字で答えてください。
問8. 命令を「プログラムの順番どおりでなく、準備できたものから実行する」方式は?