3秒でわかる
CPU やメモリや装置をどうつなぎ、どう命令を処理するかという計算機の基本設計。性能の上限や制約の理由がここで決まります。
もう少し詳しく
どういうものか
コンピュータアーキテクチャは、CPU や主記憶や補助記憶や入出力装置をどのように配置し、どんな命令をどんな手順で処理するかを定めた設計のことです。現在のパソコンやスマートフォンのほぼすべては、プログラムをデータと同じメモリに置いて順に読み出すノイマン型と呼ばれる方式に基づいています。
CPU の側から見ると、命令の種類と形式の取り決めが命令セットアーキテクチャで、x86 と Arm はここが違います。同じ C のコードでも、コンパイル結果の機械語は別物になります。
なぜ必要か
書いたコードが速いか遅いかは、文法ではなくハードウェアの構造で決まります。配列を順に走査するループが、同じ回数のランダムアクセスより何倍も速いのは、キャッシュが連続した領域をまとめて読み込むからです。この理由を知らないと、計算量が同じなのに速度が違う現象を説明できません。基本情報技術者や IT パスポートで必ず問われるのも、ここが土台だからです。
具体例
主要な部品と、そのあいだの速度差を並べると次のようになります。
速い / 小さい
[ レジスタ ] 1 クロック 数百バイト
[ L1 キャッシュ ] 数クロック 数十 KB
[ L2/L3 キャッシュ ] 十数クロック 数 MB
[ 主記憶 (RAM) ] 百クロック前後 数 GB
[ SSD ] 数万クロック 数百 GB
遅い / 大きい段を1つ下りるたびに、容量は増え、待ち時間は桁で増えます。
つまずきやすいところ
クロック周波数が高いほど速い、と単純に考えてしまう点が代表的な誤解です。実際には、1クロックで何命令を処理できるか、パイプラインがどれだけ詰まらずに流れるか、キャッシュに当たるかで実効性能は大きく変わります。
もう1つは、メモリとストレージを同じ「容量」として並べてしまうことです。主記憶は電源を切ると消える作業台、補助記憶は消えない倉庫で、役割が違います。作業台が狭いと、倉庫との出し入れが増えて全体が遅くなります。
似た用語との違い
| 用語 | 指す範囲 |
|---|---|
| アーキテクチャ | 部品の配置と命令の処理方式という設計全体 |
| 命令セット | CPU が理解する命令の種類と形式。x86 や Arm |
| マイクロアーキテクチャ | 同じ命令セットを実装する内部の作り |
Intel と AMD の CPU で同じソフトが動くのは命令セットが共通だからで、性能が違うのは内部の作りが違うからです。ソフトウェアの世界で言うアーキテクチャは、この計算機の設計とは別に「システム全体の構成」を指すこともあるため、文脈で読み分けます。
覚え方
CPU を料理人、レジスタをまな板の上、キャッシュを手元の棚、主記憶を冷蔵庫、SSD を倉庫と見立てると、なぜ手元に置くものを工夫するのかが直感的につかめます。