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 の影響
を確認してみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。