公開

CPUの命令実行サイクルとは?レジスタ・クロック周波数・CPIを解説

文:野澤 嘉孝 (ソフトウェアエンジニア/プログラミングスクール Sandbox 代表)

CPUの命令実行サイクルとは?レジスタ・クロック周波数・CPIを解説

この記事の概要

「3GHzのCPU」は、1秒に30億個の命令を実行できるのでしょうか? 実は、30億は命令の数ではなく、処理のタイミングを刻むクロックの数です。 CPUが命令を処理する仕組みと、速さを考えるための数字を整理しましょう。 先に結論:クロックの数と命令の数は違う

「3GHzのCPU」は、1秒に30億個の命令を実行できるのでしょうか?

実は、30億は命令の数ではなく、処理のタイミングを刻むクロックの数です。

CPUが命令を処理する仕組みと、速さを考えるための数字を整理しましょう。

先に結論:クロックの数と命令の数は違う

  • 命令実行サイクル: CPUの基本動作は「取り出し→解読→実行」。この3段階が、必ず3クロックかかるという意味ではない。
  • レジスタ: CPU内部にある、小さく高速な記憶場所。プログラムカウンタもその一種。
  • クロック周波数: 1秒あたりのクロック数。3GHzなら毎秒30億クロック。
  • CPI: 処理全体のクロック数を、実行した命令数で割った平均値。

1秒あたりの実行命令数=クロック周波数÷平均CPI。この式を、仕組みと具体例から理解していきます。

「こんにちは」の一瞬に、何が起きた?

放課後の部室。ユウキは、テッパン先輩と組み直したパソコンで、初めての1行プログラムを動かしました。画面には「こんにちは」。表示は一瞬です。

テッパン先輩「この子の心臓は、1秒に30億回、打ってる」
ユウキ「さ、さんじゅうおく……?」
Sandy「待ちぃ。その30億、何の数かが大事なんや」

「心臓」は、クロックの一定のリズムを拍にたとえた表現です。

ここで、プログラムの1行と、CPUの1命令は別物だと押さえましょう。人間が書いたプログラムは、翻訳・実行する仕組みを通じて、CPUが実行できる機械語の命令で処理されます。「こんにちは」を表示するだけでも複数の命令が関わり、命令数は使う言語や実行環境などによって変わります。

命令実行サイクルは「取り出し・解読・実行」

CPUの動きを理解するため、まず一つの命令に注目します。

段階

呼び方

すること

取り出し

フェッチ

記憶装置から命令を読み出す

解読

デコード

命令が何を指示しているか調べる

実行

実行

計算、データの転送、分岐などを行う

この流れを繰り返す基本的な仕組みが、命令実行サイクルです。説明によっては、結果の格納などを分け、段階をさらに細かく数えることもあります。

命令実行サイクルは、一つの命令の処理を段階に分けて理解するための基本モデルです。

命令を取り出し、解読し、実行して次の命令へ進む基本サイクル

三つの段階は基本モデルであり、各段階が必ず1クロックとは限らない。

Sandy「伝票を取る、内容を読む、作業する。まずはこの順番や」
ユウキ「じゃあ、取り出しが1拍、解読が1拍、実行が1拍で、必ず3拍?」
Sandy「段階の数と、拍の数は別やで」

命令の種類やCPUの仕組みによって、必要なクロック数は変わります。また、現代のCPUでは、複数の命令の異なる段階を重ねて進めるパイプラインなども使います。「一つが完全に終わるまで、次には絶対に手を付けない」とは限りません。

たとえば伝票の処理なら、1枚目の作業中に2枚目の内容を読むような工夫です。命令の処理に段階があることと、複数の命令を重ねて処理できることは両立します。

レジスタはCPUの手元、キャッシュは近くの置き場

CPUが計算するとき、必要な値を毎回遠くから取ってくるのでは効率が下がります。そこで使うのが、CPU内部にある高速で容量の小さい記憶場所、レジスタです。計算に使う値や処理に必要な情報などを保持します。

前回の「ストレージは本棚、メモリは机」に、今回は「レジスタは手元」を加えます。ただしレジスタはCPUの外にある別の箱ではなく、CPU内部の仕組みです。

記憶の種類

主な役割

比喩

レジスタ

演算に使う値や命令の場所などを保持

手元

キャッシュ

よく使う命令やデータを置き、主記憶へのアクセスを減らす

すぐ近くの置き場

主記憶(一般的なRAM)

使用中の命令やデータを保持

作業机

補助記憶(SSD・HDD)

プログラムやファイルを保存

本棚

レジスタ、キャッシュ、主記憶、補助記憶は、一般に速度や容量の違いを生かして使い分けられます。

レジスタ、キャッシュ、主記憶、補助記憶を速度と容量の傾向で並べた記憶階層

レジスタはCPU内部。キャッシュも記憶階層の一部を担う。

たとえば「2+3の結果に、さらに4を足す」なら、途中の結果である5をレジスタに置き、次の計算に使えます。計算するたびに、必ず主記憶へ書き戻すわけではありません。

「近いほど速くて容量が小さい」は記憶階層の傾向を表す比喩です。速さには、距離だけでなく記憶装置の方式や設計も関わります。

プログラムカウンタは「次の場所」を示すしおり

プログラムカウンタ(PC)は、命令のアドレス、つまり番地を保持して実行位置の管理に使うレジスタです。情報Ⅰの基本モデルでは、「次に取り出す命令の番地を保持する」と整理します。

ユウキ「PCって、パソコンのことですか?」
Sandy「ここではプログラムカウンタや。略し方が同じでも文脈で分けよな」

しおりが本のページを示すように、プログラムカウンタは命令の場所を示します。命令そのものや、実行済み命令の総数を入れておく場所、という意味ではありません。

通常は次の命令へ進み、分岐命令などでは別の命令の場所へ移ります。

架空の4バイト固定長命令の例。番地を必ず1増やすわけではない。

図では、説明用に「命令が4バイトずつ並ぶ」という架空の条件を置いています。100番地の次は104番地、さらに次は108番地ですが、104番地の命令が200番地へ分岐するなら、処理の流れは200番地へ移ります。

押さえるのは、**プログラムカウンタが覚えるのは「命令の内容」ではなく「命令の場所」**という点です。番地の進み方はCPUの方式や命令の長さによって変わり、分岐では飛び先に切り替わります。

クロック周波数とCPIは、別々の数字

クロックは、処理のタイミングをそろえる基準となる周期的な信号です。クロック周波数は、1秒あたりの周期の数を表します。

  • 1Hz:1秒に1周期
  • 1GHz:1秒に10億周期
  • 3GHz:1秒に30億周期

これが先輩の言う「1秒に30億の拍」の正体です。クロックはタイミングの基準であり、1拍ごとに必ず1命令が終わるわけではありません。なお、CPU内部には異なるクロックで動く部分もあります。

CPIはCycles Per Instructionの略で、1命令あたりの平均クロック数です。一定の処理について、次のように求めます。

平均CPI = 使った総クロック数 ÷ 実行した命令数

たとえば、ある処理に400クロックを使い、100命令を実行したなら、平均CPIは4です。各命令がすべて同じ4クロックだったと断定する数字ではありません。

平均CPIは、命令の組み合わせやメモリの待ち時間などで変わります。同じCPUでも、処理が違えば同じ値になるとは限りません。

補足:CPIは、一つの命令が完了するまでの時間そのものではありません。 命令の処理を重ね、1クロックあたり平均2命令を完了できたなら、CPIは1÷2=0.5です。一つ一つの命令には複数クロックかかっていても、全体の平均CPIが1未満になることがあります。

命令数の計算は「周波数÷CPI」

同じ処理条件で周波数と平均CPIが与えられたら、1秒あたりの平均実行命令数は次の式で考えられます。

実行命令数/秒 = クロック周波数(Hz)÷ 平均CPI

2GHz、平均CPIが4なら、20億÷4=5億命令/秒です。

クロックの数を、そのまま実行命令数と考えない。

なぜCPIで割るのでしょうか? 使えるクロックの総数を、1命令あたりの平均クロック数で分けるからです。

  1. 2GHzを、毎秒20億クロックに直す。
  2. CPIが4なので、命令数を20億÷4で求める。
  3. 答えは、毎秒5億命令。

単位でも確認できます。「クロック/秒」÷「クロック/命令」なので、答えの単位は「命令/秒」です。

一方、一定の命令数を処理するCPU時間は、次の式です。

CPU時間(秒)= 実行命令数 × 平均CPI ÷ クロック周波数(Hz)

この計算は、与えられた条件でのCPUの処理時間を扱うモデルです。通信待ちや操作待ちを含めたアプリ全体の待ち時間と、そのまま一致するとは限りません。

クロックが高いCPUほど速い、とは限らない

二つのCPUが、同じ処理をどちらも10億命令で実行すると仮定します。

条件

CPU A

CPU B

クロック周波数

3GHz

2GHz

この処理での平均CPI

6

2

平均実行命令数/秒

5億

10億

10億命令のCPU時間

2秒

1秒

この条件では、周波数の低いCPU Bのほうが短いCPU時間で終わります。

同じ10億命令の処理で3GHz・CPI6は2秒、2GHz・CPI2は1秒になる比較

この比較は、必要な命令数が同じという条件を置いた例。

Sandy「拍が多くても、1命令に使う拍も多かったら、結果は変わるやろ」
ユウキ「数字を一個だけ見て、速いって決めたらだめなんですね」

さらに実際には、CPUの方式やプログラムの作りによって、同じ仕事に必要な命令数も変わります。命令数/秒だけが多ければ、どんな処理でも速いと結論づけるのも不適切です。同じ仕事に何秒かかるかを、条件をそろえて考えます。

オリジナル問題で確認しよう

以下はこの記事用の学習問題です。実際の共通テストの問題ではありません。

問1:2.4GHz、平均CPIが3のとき、1秒あたりの平均実行命令数は?

答えは8億命令/秒です。2.4GHz=24億クロック/秒なので、24億÷3=8億と求めます。24億をそのまま命令数にするのは、クロック数との混同です。

問2:問1の条件で、4億命令を実行するCPU時間は?

答えは0.5秒です。4億×3÷24億=0.5。あるいは、毎秒8億命令のペースで4億命令を実行するので、4億÷8億=0.5秒です。

問3:「プログラムカウンタは、命令を一つ実行するたび、番地を必ず1増やす」は正しい?

正しくありません。次の命令の番地への進み方は命令の長さなどによって変わり、分岐では飛び先へ移ります。「命令の場所を管理する」が役割であって、「必ず1を足す」が定義ではありません。

今回の要点

  • 命令実行サイクルの基本は、取り出し・解読・実行。
  • レジスタはCPU内部の高速・少容量の記憶場所。
  • プログラムカウンタは命令の番地を保持し、実行位置を管理する。
  • クロック周波数は毎秒のクロック数、平均CPIは1命令あたりの平均クロック数。
  • 1秒あたりの実行命令数=クロック周波数÷平均CPI。
  • CPU時間=実行命令数×平均CPI÷クロック周波数。
  • 周波数だけで性能を決めず、CPIや必要な命令数も考える。

帰り際、ユウキはもう一度「こんにちは」を表示しました。同じ一瞬でも、その裏には命令と記憶装置の連携があります。テッパン先輩の言う「書く側」へ進む準備が、少しできたところです。

Sandboxの情報Ⅰサバイバルでは、こうした身近な疑問からコンピュータの仕組みを整理しています。まずは「30億は何の数?」を、自分の言葉で説明してみましょう。

参考資料

あわせて読みたい記事

Sandboxのサポート内容 Sandboxの情報Ⅰ学習サポートを見る →
共通テスト情報Ⅰのまとめ 共通テスト「情報Ⅰ」対策シリーズの一覧を見る →
野澤 嘉孝

この記事を書いた人

野澤 嘉孝

ソフトウェアエンジニア/プログラミングスクール Sandbox 代表

ソフトウェアエンジニア。同志社大学理工学部を経て、京都大学大学院で核融合発電の基礎研究(プラズマ物理)に従事。高校生向け数学塾の講師、大学での物理実験の授業を通じて延べ500名以上の学生をサポート。現在は業界特化型SaaSの開発に携わりながら、小中高生向けプログラミングスクール Sandbox を運営。

プロフィールと執筆記事の一覧 →

「情報Ⅰ、うちの子はどう対策すればいい?」

情報Ⅰ対策について無料で相談する

志望校の配点を一緒に確認したい方は → 無料の学習相談へ

入会金無料・いつでも退会OK・退会後もいつでも再入会できます