コンピュータの設計 / 03.1
コンピュータ アーキテクチャ入門
CPU・メモリ・I/O はどうつながり、プログラムを「動かす」のか。基本設計から命令実行、パイプラインまでを体系的に読む。
所要:30–40分
難易度:★★☆
前提:論理ゲートの基礎
01
フォン・ノイマン型アーキテクチャ
現代のほぼすべてのコンピュータが採用する基本設計である。CPU・主記憶・I/O の3つがバスでつながり、
命令もデータも同じメモリに置く ——たったこれだけの構造で、あらゆるプログラムが動く。
構成要素をクリック → 右に詳細
← システムバス(アドレス / データ / 制御) →
プログラム内蔵方式(stored-program concept, 1945):
命令(プログラム)もデータも同じメモリに格納し、CPU が順に読み出して実行する。
この設計以前は、プログラムを変えるたびに配線を物理的に組み替える必要があった。
スマートフォンからスパコンまで、いまも同じ基本設計である。
02
命令実行サイクル
CPU は1つの命令を5段階で処理し、それを電源が切れるまで延々と繰り返す。ボタンを押して1周してみましょう。
この5段階は、05 節のパイプラインで重ねられるのと同じ5段階 である。パイプラインが段を増やすわけではない。
「次のステップ」を押して命令サイクルを追いかけてみましょう
次のステップ
リセット
03
メモリ階層
「速くて・大容量で・安い」メモリは作れない。だから速度と容量の違う記憶装置を積み重ね、
よく使うデータほど上に置く。各層をクリックすると実際の数字が出る。
階層をクリック → 右に詳細
レジスタ
L1 キャッシュ
L2 キャッシュ
L3 キャッシュ
主記憶(RAM)
ストレージ(SSD / HDD)
上ほど 速い・小さい・高価 / 下ほど 遅い・大きい・安価
局所性の原理(locality):
プログラムは、最近アクセスした場所をまたアクセスしやすく(時間的局所性 )、
アクセスしたアドレスの近くもアクセスしやすい(空間的局所性 )。
キャッシュはこの性質を利用して、CPU と RAM のおよそ100倍の速度差を埋めている。
04
RISC と CISC
命令セットアーキテクチャ(ISA)には2つの設計思想がある。
命令を単純にして数を絞る のか、1命令で複雑なことをやらせる のか。
RISC
Reduced Instruction Set Computer
命令数が少なく、すべて固定長
メモリにアクセスできるのはロード/ストア命令だけ
パイプライン設計が容易
低消費電力に有利
例: ARM(スマートフォン)、RISC-V、Apple Silicon(M1〜M4)
CISC
Complex Instruction Set Computer
命令数が多く、長さも可変
1命令で複雑な操作ができる
メモリを直接操作する命令がある
コード密度が高い(プログラムのサイズが小さい)
例: Intel x86 / x86-64(PC・サーバ)、AMD Ryzen
同じ処理をするとき、内部で何が違うのか。命令メモリからデータメモリまでの流れを並べてみる。
RISC
ARM / RISC-V / Apple M シリーズ
命令メモリ
固定長 32-bit 命令
シンプル デコーダ
固定フォーマット・1クロックで完了
レジスタファイル(多い)
R0–R31 汎用 32 本
ALU(演算専用)
メモリ直接演算なし
LOAD / STORE のみ
データメモリ
専用命令(LDR / STR)だけ
パイプラインが組みやすい・低消費電力
CISC
Intel x86-64 / AMD Ryzen
命令メモリ
可変長(x86 は 1〜15 バイト)
複合デコーダ
マイクロコード ROM で µop 列に変換
µops
レジスタファイル(少ない)
AX / BX / CX… 汎用 8〜16 本
ALU(メモリ直接可)
ADD [mem], reg のような直接演算
任意の命令から直接参照可
データメモリ
多くの命令が直接アクセスできる
コード密度が高い・互換性を保ちやすい
現代では境界が曖昧である:
Intel の x86 CPU も、内部ではマイクロ命令(µop)に変換して RISC 的に実行している。
ARM も高性能化にともなって命令数が増えた。いまは「RISC か CISC か」より、
ISA(外から見える命令)とマイクロアーキテクチャ(内部の実装)を分けて考えることが重要である。
05
パイプライン
02 節で見た5段階を、1命令が終わるのを待たずに次の命令へ重ねていく。コインランドリーと同じ発想である。
パイプラインなし(逐次)
洗濯 → 乾燥 → たたむ を1回分すべて終えてから、次の洗濯物を始める。全工程が終わるまで次に進めない。
命令1: [IF][ID][EX][ME][WB]
命令2: [IF][ID][EX]…
パイプラインあり(並行)
1回目を乾燥機に入れたら、すぐ2回目の洗濯を始める。5段階が同時に走り、単位時間あたりの処理量が増える。
命令1: [IF][ID][EX][ME][WB]
命令2: [IF][ID][EX][ME][WB]
5段パイプライン タイミング図(6命令)
命令
Clk 1 Clk 2 Clk 3 Clk 4 Clk 5
Clk 6 Clk 7 Clk 8 Clk 9 Clk10
IF = 命令フェッチ
ID = デコード
EX = 実行
ME = メモリ
WB = 書き戻し
理想スループット
1命令 / クロック
パイプラインが満杯のとき
ハザードの種類
構造・データ・制御
パイプラインを止める要因
現代の段数
14〜20段
Intel / AMD の実装例
表を見ると、6命令が終わるのに逐次なら30クロック必要なところ、パイプラインなら10クロックで済んでいる。
ただし
1命令あたりの所要時間(レイテンシ)は5クロックのまま ——速くなったのは「量」であって「1個の速さ」ではない。
この違いは次の
CPU 性能評価 の中心テーマである。