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

CPUの動作原理
パソコンにおいて、ほとんどの処理は演算装置である「CPU」によって行われます。CPUが命令を実行する手順は以下の4手順です。
- フェッチ:命令の読み込み
- デコード:命令の解読
- エグゼキュート:命令の実行
- ライトバック:結果の出力
各工程でCPUがどのように動作しているのか解説していきます。
プログラムの実行とは
CPUの動作原理の前に、プログラムの実行について考えていきます。パソコンでは、ワード・エクセル・動画編集など、様々なプログラムやアプリケーションが実行可能です。この「プログラムの実行」とは、実際ににどのようなことが起きているのでしょうか?

(出典:日経XTECHの記事を参考に筆者作成)
プログラムやアプリの動作は「CPUがメモリ(RAM)から命令やデータを読み込み、計算して、その結果を再びメモリに書き込む」という単純な作業の繰り返しで成り立っています。
エクセルや動画編集といった複雑に見える作業も、CPUが膨大な数の単純な命令を、順番に処理することで実現されているのです。
プログラムの命令は0と1
CPUが実際に理解して実行するプログラムは0と1のみのシンプルなものです。CPUが理解する0と1のプログラム言語を「機械語」と呼びます。
どんな複雑なプログラムも、CPUで処理されるのは0と1の命令や演算の積み重ねです。
機械語を人間が直接理解・記述するのは非常に困難です。そのため、人間が理解しやすい高級言語でプログラムを記述し、コンパイラやインタプリタによって機械語に変換してCPUで実行します。
CPUが命令処理する原理

(出典:日経XTECHの記事を参考に筆者作成)
CPUが命令を読み込み実行する手順は4工程から構成されます。
- フェッチ:命令の読み込み
- デコード:命令の解読
- エグゼキュート:命令の実行
- ライトバック:結果の出力
CPUはまず、外部バスインターフェースを通して命令を読み込みます(フェッチ)。外部バスインターフェースは、CPUとメモリ間でデータの送受信を行う回路で、データのやり取りを橋渡しする役割を担っています。
フェッチされた命令は、制御ユニット内のデコーダーで解読され、足し算や掛け算、データ転送などの具体的な処理内容に変換されます。このプロセスを「デコード」と呼びます。解読された命令は「制御情報」として演算ユニットに送られ、どのように演算を実行するかを指示します。この時、演算に使用するデータは、再度外部バスインターフェースを通じてメモリから演算ユニットに読み込まれます。
制御情報とデータを基に、演算ユニットで命令が実行されます(エグゼキュート)。最終的に得られた結果はメモリに書き込まれ(ライトバック)、命令の実行が完了します。
パイプライン処理
前述の通り、CPUは「フェッチ・デコード・実行・書き出し」を繰り返すことで命令を処理します。命令は1つずつ順番に処理されるため、1つの命令処理が終了するまで、次の命令を実行できず、処理能力に限界が生じてしまうという課題がありました(非パイプライン処理)。
そこで用いられた技術が「パイプライン処理」です。
パイプライン処理は「命令の実行を複数の段階(フェッチ、デコード、実行など)に分け、それらを並列に処理することで、CPU性能を向上させる仕組み」です。
パイプライン処理を行うと、CPU内で命令を分割し、複数の作業(ステージ)を並行して処理できるため、全体の処理速度が向上します。複数の処理が1つのCPU(コア)で実行できるのは不思議に感じますが、コア内部には各ステージ専用の回路が複数あり、それぞれが独立して動作できるため並行処理が可能なのです。
スーパースカラー
パイプライン処理を拡張し、CPUのさらなる処理能力を向上させた技術が「スーパースカラー」です。
スーパースケーラーは「パイプライン処理を活用しながら、命令の並列実行を行うことで、CPUの性能を向上させる技術」です。
コア内部に複数の実行ユニットや処理領域を設けることで、1サイクル内で複数の命令を同時に実行可能とし、処理能力が大幅に向上します。
ハイパースレッディング
スーパースケーラーは、複数の命令を並列に処理する能力を持っていますが、同じコア内で複数の命令を並列に実行できるかどうかは、実行ユニットの空き具合に依存します。例えば、1つのコアに2つの実行ユニットがあれば、2つの命令を並列に処理できますが、それ以上は処理できません。
そこで開発されたのが「ハイパースレッディング技術」です。
ハイパースレッディング(Hyper-Threading)は「1つの物理的なCPUコアを2つの論理的なコアとして動作させ、CPUの並列処理能力を向上させるための技術」です。Intelが開発した技術で、1つのコアが複数のスレッドを同時に処理できるようになります。
1つの物理コアを2つの論理コアとして活用することで、並列処理が可能になり、CPUのパフォーマンスが向上します。
シングルスレッドでは、CPUが1回の処理で1つの命令にリソースを使い切り、その間他の処理は待機します。このため、1つのスレッドを処理しているコアの利用率は100%にはならず、リソースが無駄に余ってしまいます。
スーパースレッディングでは、コアの空きリソースを効率的に活用することで、1コアながら2つのスレッドを処理することができるのです。
スーパースカラーとハイパースレッディングは、いずれも命令の並列実行を行いますが、