CPUの動作原理:フェッチ・デコード・実行・出力とは

CPU 動作原理 フェッチ デコード

CPUの動作原理

パソコンにおいて、ほとんどの処理は演算装置である「CPU」によって行われます。CPUが命令を実行する手順は以下の4手順です。

  1. フェッチ:命令の読み込み
  2. デコード:命令の解読
  3. エグゼキュート:命令の実行
  4. ライトバック:結果の出力

各工程でCPUがどのように動作しているのか解説していきます。

プログラムの実行とは

CPUの動作原理の前に、プログラムの実行について考えていきます。パソコンでは、ワード・エクセル・動画編集など、様々なプログラムやアプリケーションが実行可能です。この「プログラムの実行」とは、実際ににどのようなことが起きているのでしょうか?

pc プログラムとは

(出典:日経XTECHの記事を参考に筆者作成)

プログラムやアプリの動作は「CPUがメモリ(RAM)から命令やデータを読み込み、計算して、その結果を再びメモリに書き込む」という単純な作業の繰り返しで成り立っています。

エクセルや動画編集といった複雑に見える作業も、CPUが膨大な数の単純な命令を、順番に処理することで実現されているのです。

プログラムの命令は0と1

機械語 アセンブリ言語 プログラム

CPUが実際に理解して実行するプログラムは0と1のみのシンプルなものです。CPUが理解する0と1のプログラム言語を「機械語」と呼びます。

どんな複雑なプログラムも、CPUで処理されるのは0と1の命令や演算の積み重ねです。

機械語を人間が直接理解・記述するのは非常に困難です。そのため、人間が理解しやすい高級言語でプログラムを記述し、コンパイラやインタプリタによって機械語に変換してCPUで実行します。

CPUが命令処理する原理

CPU 動作原理 フェッチ デコード エグゼキュート ライトバック

(出典:日経XTECHの記事を参考に筆者作成)

CPUが命令を読み込み実行する手順は4工程から構成されます。

  1. フェッチ:命令の読み込み
  2. デコード:命令の解読
  3. エグゼキュート:命令の実行
  4. ライトバック:結果の出力

CPUはまず、外部バスインターフェースを通して命令を読み込みます(フェッチ)。外部バスインターフェースは、CPUとメモリ間でデータの送受信を行う回路で、データのやり取りを橋渡しする役割を担っています。

フェッチされた命令は、制御ユニット内のデコーダーで解読され、足し算や掛け算、データ転送などの具体的な処理内容に変換されます。このプロセスを「デコード」と呼びます。解読された命令は「制御情報」として演算ユニットに送られ、どのように演算を実行するかを指示します。この時、演算に使用するデータは、再度外部バスインターフェースを通じてメモリから演算ユニットに読み込まれます。

制御情報とデータを基に、演算ユニットで命令が実行されます(エグゼキュート)。最終的に得られた結果はメモリに書き込まれ(ライトバック)、命令の実行が完了します。

パイプライン処理

CPU ノンパイプライン処理

前述の通り、CPUは「フェッチ・デコード・実行・書き出し」を繰り返すことで命令を処理します。命令は1つずつ順番に処理されるため、1つの命令処理が終了するまで、次の命令を実行できず、処理能力に限界が生じてしまうという課題がありました(非パイプライン処理)。

そこで用いられた技術が「パイプライン処理」です。

CPU パイプライン処理

パイプライン処理は「命令の実行を複数の段階(フェッチ、デコード、実行など)に分け、それらを並列に処理することで、CPU性能を向上させる仕組み」です。

パイプライン処理を行うと、CPU内で命令を分割し、複数の作業(ステージ)を並行して処理できるため、全体の処理速度が向上します。複数の処理が1つのCPU(コア)で実行できるのは不思議に感じますが、コア内部には各ステージ専用の回路が複数あり、それぞれが独立して動作できるため並行処理が可能なのです。

スーパースカラー

パイプライン処理を拡張し、CPUのさらなる処理能力を向上させた技術が「スーパースカラー」です。

CPU スーパースカラー

スーパースケーラーは「パイプライン処理を活用しながら、命令の並列実行を行うことで、CPUの性能を向上させる技術」です。

コア内部に複数の実行ユニットや処理領域を設けることで、1サイクル内で複数の命令を同時に実行可能とし、処理能力が大幅に向上します。

ハイパースレッディング

スーパースケーラーは、複数の命令を並列に処理する能力を持っていますが、同じコア内で複数の命令を並列に実行できるかどうかは、実行ユニットの空き具合に依存します。例えば、1つのコアに2つの実行ユニットがあれば、2つの命令を並列に処理できますが、それ以上は処理できません。

そこで開発されたのが「ハイパースレッディング技術」です。

CPU ハイパースレッディング

ハイパースレッディング(Hyper-Threading)は「1つの物理的なCPUコアを2つの論理的なコアとして動作させ、CPUの並列処理能力を向上させるための技術」です。Intelが開発した技術で、1つのコアが複数のスレッドを同時に処理できるようになります。

1つの物理コアを2つの論理コアとして活用することで、並列処理が可能になり、CPUのパフォーマンスが向上します。

CPU ハイパースレッディング

シングルスレッドでは、CPUが1回の処理で1つの命令にリソースを使い切り、その間他の処理は待機します。このため、1つのスレッドを処理しているコアの利用率は100%にはならず、リソースが無駄に余ってしまいます。

スーパースレッディングでは、コアの空きリソースを効率的に活用することで、1コアながら2つのスレッドを処理することができるのです。

スーパースカラーとハイパースレッディングは、いずれも命令の並列実行を行いますが、アプローチが異なります。スーパースカラーは、複数の命令を同時に実行するために実行ユニットを物理的に増やしますが、実際にはコアの利用率が100%には達しません。その一方で、ハイパースレッディングは、スーパースカラーよりも効率よくリソースを活用できる技術です。

参考文献

  1. プログラムの実態は命令の集まり (日経XTECH)
  2. CPUの基本的な動作原理とは (日経XTECH)
  3. ハイパースレッディングとは? (INTEL)
  4. ハイパースレッディング・テクノロジー (Wikipedia)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です