CPU の基本概念(コンセプト)
理解のために小咄形式でまとめました。
システムパフォーマンス関連記事の目次
登場人物
- 太郎(後輩):入社1年目の若手エンジニア。
- 花子(先輩):システムエンジニア歴3年の先輩。
場面:オフィスの開発ルーム
太郎が CPU の基本概念(コンセプト) に関する資料を見ながら、花子に質問する。
太郎:「花子先輩、CPU のコンセプト って色々あって混乱してしまいます…。 何が重要な概念なのか整理 したいです!」
花子:「いい質問ね! CPU のパフォーマンスを理解するための 7 つのコンセプト を説明するわ。」
CPU のコンセプト
花子:「CPU の パフォーマンスを決める基本的な要素 は、以下の 7 つ よ。」
- クロックスピード
- 命令
- 命令パイプライン
- 命令幅
- 命令サイズ
- SMT(Simultaneous Multi-Threading)
- IPC(Instructions Per Cycle) & CPI(Cycles Per Instruction)
1. クロックスピード
花子:「クロックスピード は、 CPU の動作速度を決める基本的な指標 よ。」
-
クロックとは? →
CPU の動作を同期するためのデジタル信号。 -
クロックスピードの単位 →
GHz(ギガヘルツ)。例えば4GHzなら1秒間に40億回のクロックサイクルがある。 -
影響 →
クロックスピードが高いほど、基本的に処理速度が速くなるが、発熱や消費電力も増加する。
「これは 工場のベルトコンベアのスピード みたいなもので、 速く回るほど生産性が上がるけど、熱も発生する のよ。」
太郎:「なるほど! クロックが高いほど速い けど 発熱と電力消費が増える んですね。」
2. 命令
花子:「CPU の命令 は、 プログラムが実行される最小単位 よ。」
-
基本命令 →
足し算、引き算、メモリの読み書き、条件分岐など。 -
RISC vs CISC
-
RISC(Reduced Instruction Set Computer) →
少ない種類の命令を高速に処理(例: ARM, RISC-V) -
CISC(Complex Instruction Set Computer) →
多くの種類の命令をサポート(例: x86)
-
RISC(Reduced Instruction Set Computer) →
「これは 簡単な作業を素早く終わらせる職人(RISC) と 多機能で何でもできる職人(CISC) の違いね。」
太郎:「ってことは、 ARM(RISC)はシンプルで省電力、 x86(CISC)は高機能で複雑 なんですね!」
3. 命令パイプライン
花子:「命令パイプライン は、 複数の命令を同時に処理する仕組み よ。」
-
パイプラインのステージ
-
フェッチ(Fetch):命令を取得 -
デコード(Decode):命令の解釈 -
実行(Execute):演算処理 -
メモリアクセス(Memory Access):必要ならメモリを読み書き -
ライトバック(Write Back):結果をレジスタに格納
-
「これは 流れ作業の製造ライン みたいなもので、 一度に複数の命令を処理することで全体のスループットを向上させる のよ。」
太郎:「つまり、 パイプラインが深いほど処理効率が上がる んですね!」
例1: ファストフード店の注文処理
花子:「ファストフード店のキッチンを想像してみて。注文を1つずつ処理すると、注文Aが完成してから次の注文Bを始めるため、時間がかかるわ。しかし、以下のように 流れ作業 にすると、 複数の注文を同時並行で処理できる ため、全体のスピードが向上するのよ。」
- フェッチ(Fetch): お客様が注文をする
- デコード(Decode): 注文をキッチンに伝え、調理内容を確認
- 実行(Execute): 料理を調理する
- メモリアクセス(Memory Access): 必要なら材料を取り出す
- ライトバック(Write Back): 完成した料理をお客様に渡す
「この方法なら、注文Aが完成するのを待たずに、並行して注文Bの調理を開始できるの。 お店の回転率が上がる のと同じように、CPUの スループット も向上するのよ。」
例2: 自動車工場の生産ライン
花子:「車を1台ずつ作ると時間がかかるけど、工場では パイプライン生産方式 を採用しているの。これにより、 複数の車の製造工程が同時進行できる のよ。」
- フェッチ(Fetch): 設計図をもとに部品を準備
- デコード(Decode): 組み立て工程を確認
- 実行(Execute): 実際に組み立て作業を行う
- メモリアクセス(Memory Access): 必要なら部品を倉庫から取り出し
- ライトバック(Write Back): 完成車を出荷
「このように、 異なる作業ステージを並行して動かすことで、工場全体の生産効率を上げる のと同じ考え方が CPUの命令パイプライン なのよ。」
例3: コンベアを使った皿洗い
花子:「もし1人で洗い物をしていたら、「すすぐ→洗う→拭く→しまう」の順で1枚ずつ処理するため、とても時間がかかるわよね。でも、以下のように 複数の人で役割分担 すると、 1枚の皿が完成する前に次の皿の処理を開始できる の。」
- フェッチ(Fetch): 皿を流し台に持ってくる
- デコード(Decode): 皿の種類(コップ、皿、鍋)を分類
- 実行(Execute): 実際に洗う
- メモリアクセス(Memory Access): 必要ならスポンジや洗剤を補充
- ライトバック(Write Back): 乾燥機や食器棚に収納
「こうすれば 作業の並列化 ができて、 洗い物のスピードが劇的に向上 するわね。これが 命令パイプライン の仕組みとそっくりなのよ。」
太郎:「なるほど! パイプライン処理 って、 効率のいい流れ作業 のことなんですね! パイプラインが深いほど、同時に処理できる数が増えて、効率が良くなる というわけですね!」
4. 命令幅
花子:「命令幅 は、 一度に処理できる命令の数 を決める指標よ。」
-
シングルイシュー →
1 つの命令を1回に処理 -
マルチイシュー →
複数の命令を同時に処理(スーパースカラープロセッサ)
「これは 一度に何個の荷物を運べるか みたいなもので、 命令幅が広いほど並列処理が可能になる のよ。」
太郎:「なるほど! マルチイシューCPUは、一度に複数の命令を処理できるから高速 なんですね!」
5. 命令サイズ
花子:「命令サイズ は、 CPU が処理する命令のビット数 を指すわ。」
-
32ビット命令 →
ARMやx86の旧世代CPUで主流だった。 -
64ビット命令 →
現在の主流。より多くのメモリを扱える。
「これは 手紙のサイズ みたいなもので、 64ビットなら一度に大きな情報を処理できる のよ。」
太郎:「ってことは、 64ビットCPU はメモリを効率的に使える んですね!」
6. SMT(Simultaneous Multi-Threading)
花子:「SMT(同時マルチスレッディング) は、 1 つのコアが複数のスレッドを並行処理する技術 よ。」
-
Intel のハイパースレッディング(HT) →
1 コアで 2 つのスレッドを実行可能。 -
AMD の SMT →
同じく 1 コアで 2 つのスレッドを処理できる。
「これは 1 人のシェフが左右の手で別々の料理を作る のと同じね。」
太郎:「なるほど! SMT を使うとコアのリソースを効率的に使える んですね!」
7. IPC(Instructions Per Cycle) & CPI(Cycles Per Instruction)
花子:「IPC(サイクルあたりの命令数) は、 CPU の効率を測る指標 よ。」
-
IPC が高い →
CPU が 1 サイクルで多くの命令を実行できる。 -
CPI(1 命令あたりのサイクル数) →
CPI が低いほど効率が良い。
「これは 工場の生産効率 みたいなもので、 IPC が高いと処理速度が上がる のよ。」
例1: ハンバーガーショップの生産効率
花子:「ファストフード店を考えてみましょう。お店の生産能力(=CPUの処理能力)を向上させるには、 1分間に作れるハンバーガーの数(=IPC) を増やすのが大切よ。」
-
IPC が高い場合(理想的な環境)
- 1回の作業(サイクル)で、 同時に3つのハンバーガーを作れる
- → 生産性が高く、 注文がすぐさばける
-
IPC が低い場合(非効率な環境)
- 1回の作業(サイクル)で 1つしか作れない
- → 注文が溜まってしまい、 待ち時間が増える
「また、 CPI(Cycles Per Instruction) は、「1つのハンバーガーを作るのにかかる作業ステップ数(=サイクル数)」を表しているの。」
-
CPI が低い(理想的な環境)
- 3ステップ(バンズ用意 → 一気に具材を乗せる → 包装)で完成
- → 短時間で商品が完成する
-
CPI が高い(非効率な環境)
- 6ステップ(具材を1つずつ丁寧に配置、個別包装など)で完成
- → 時間がかかりすぎて、回転率が悪い
「結局、お店の効率を上げるには IPC を上げ、CPI を下げる ことが重要なのね。」
例2: 自動車工場の生産ライン
花子:「車を作る工場では、多くの工程が並列で動いているわよね。ここでの IPC は 1時間に何台の車を作れるか に相当するの。」
-
IPC が高い工場(高効率)
- 1時間に 10台の車を生産できる
- → 多くのロボットアームが並列に動作 し、無駄がない
- → 最新の設備で部品の取り付けが高速
-
IPC が低い工場(低効率)
- 1時間に 3台しか生産できない
- → 作業員が1つずつ手作業で組み立てている
- → 一部の工程で ボトルネック(CPI が高い工程)が発生している
CPI の考え方 で言えば、「1台の車を作るのにかかる工程数」がCPIになるの。
-
CPI が低い(効率的な工場)
- 1台の車を 20工程 で完成
- → ロボットアームが 一度に複数の作業 をしている
-
CPI が高い(非効率な工場)
- 1台の車を 40工程 で完成
- → 部品が順番待ちで遅れている
例3: 学校のテスト採点
花子:「先生が 100人分のテストを採点する ときの作業効率も、IPC と CPI に似ているわ。」
-
IPC が高い(高速採点)
- 複数の先生が並列で採点
- マークシートを使って機械で自動採点
- → 1時間で100枚採点できる
-
IPC が低い(遅い採点)
- 1人の先生が手作業で1枚ずつ採点
- 論述問題が多く、1枚に時間がかかる
- → 1時間で20枚しか採点できない
花子:「CPI を考えると、1枚のテストを採点するのにかかる手順数がCPIよ。」
-
CPI が低い(効率的な採点)
- マークシートで1工程で採点完了
- → 1枚あたり5秒で済む
-
CPI が高い(時間がかかる採点)
- 論述問題の採点で1枚に10工程かかる
- → 1枚あたり5分かかる
まとめ
太郎:「つまり、 CPU の効率を最大化するには、IPC を上げ、CPI を下げることが大事 なんですね!」
花子:「その通りよ!これは 工場の生産効率 や 飲食店の回転率 に似ていて、 ボトルネックをなくして並列処理を増やすのがポイント なの。」
花子:「CPU の コンセプト を理解すると、 どの CPU がどの用途に適しているかを判断できる わ。」
太郎:「ありがとうございます! htop で CPU 使用率と SMT の影響 を確認してみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。