プロセッサ命令には、その操作に複数の段階があります。 これらの各ステージは、完了するまでに 1 つの CPU サイクルを要します。 これらのステージは、命令フェッチ、命令デコード、実行、メモリ アクセス、およびライトバックです。 これらはそれぞれ、完了する必要がある命令を取得し、操作を操作中の値から分離します on、プロセスを実行し、結果が書き込まれるレジスタを開き、開いたレジスタに結果を書き込みます 登録。
ヒストリカル イン オーダー プロセッサ
初期のコンピューターでは、CPU は命令パイプラインを使用していませんでした。 これらの CPU では、すべての命令に対して各シングル サイクル操作を実行する必要がありました。 これは、平均的な命令が完全に処理されてから次の命令が開始されるまでに 5 クロック サイクルかかることを意味していました。 一部の操作では、結果をレジスタに書き込む必要がない場合があります。つまり、メモリ アクセスとライトバックの段階をスキップできます。
![](/f/406367ad6ad60c219d99c9811628915a.png)
ただし、次の命令に進む前に完全な命令を順番に実行すると、問題が潜んでいます。 問題はキャッシュミスです。 CPU は、アクティブに処理しているデータをレジスタに格納します。 これは、1 サイクルのレイテンシでアクセスできます。 問題は、レジスタがプロセッサ コアに組み込まれているため小さいことです。 データがまだロードされていない場合、CPU はより大きく低速な L1 キャッシュに移動する必要があります。 そこにない場合は、より大きくて低速な L2 キャッシュに再度移動する必要があります。 次のステップは L3 キャッシュです。 最後のオプションはシステム RAM です。 これらの各オプションのチェックには、ますます多くの CPU サイクルが必要になります。
現在、この余分に追加されたレイテンシは、次の命令を開始する前に各命令を順番に完全に完了する必要があるシステムでは大きな問題になる可能性があります。 命令プロセッサごとに 5 サイクルだったものは、1 つの命令で数十または数百のクロック サイクルにわたって突然ハングアップする可能性があります。 その間ずっと、コンピュータ上で他に何もできません。 技術的には、これは 2 つの独立したコアを持つことで多少軽減できます。 ただし、両者が同じことを、場合によっては同時に行うことを妨げるものは何もありません。 そのため、マルチコア ルートをたどっても、これは解決しません。
従来の RISC パイプライン
RISCはReduced Instruction Set Computerの略です. これは、各命令のデコードを容易にすることでパフォーマンスを最適化するプロセッサ設計のスタイルです。 これは、より複雑な命令セットを設計して同じタスクを実行するために必要な命令を少なくする CISC または複合命令セット コンピューターと比較したものです。
従来の RISC 設計には、命令パイプラインが含まれています。 任意のサイクルで 5 つの命令ステージのいずれかを実行する代わりに、パイプラインでは 5 つのステージすべてを実行できます。 もちろん、1 つの命令の 5 つのステージすべてを 1 サイクルで実行することはできません。 ただし、それぞれ 1 ステージのオフセットで 5 つの連続する命令をキューに入れることができます。 このようにして、新しい命令を各クロック サイクルで完了することができます。 コアの複雑さの増加が比較的少ないため、パフォーマンスが 5 倍向上する可能性があります。
![](/f/9aeb727a1c00f27c56abdd7a1366c80d.png)
パイプラインを持たないプロセッサは、サイクルごとに 1 つの完全な命令を実行できないため、サブスカラーにしかできません。 この主要な 5 ステージ パイプラインを使用すると、すべてのプロセスの命令を完了することができるスカラー CPU を作成できます。 さらに広範囲に及ぶパイプラインを作成することで、クロック サイクルごとに複数の命令を実行できるスーパースカラー CPU を作成できます。 もちろん、潜在的な問題はまだあります。
まだシーケンシャル
これは、さまざまなレベルのキャッシュと RAM を照会する必要がある場合に、応答を何サイクルも待機するという問題を解決するものではありません。 また、新たな問題が発生します。 ある命令が前の命令の出力に依存している場合はどうなるでしょうか? これらの問題は、高度なディスパッチャーによって個別に解決されます。 別の命令の出力に依存する命令が近づきすぎないように、実行順序を慎重に計画します。 また、命令を保留し、パイプラインで他の命令に置き換えることで、キャッシュ ミスを処理します。 実行する準備ができていて、その結果を必要としない命令。 準備。
これらのソリューションは、パイプライン化されていないプロセッサでも機能しますが、クロックごとに複数の命令を実行するスーパースカラー プロセッサに必要です。 分岐予測子は、複数の潜在的な結果を持つ命令の結果を予測しようとし、別の方法で証明されない限り、それが正しいと仮定し続けることができるため、非常に便利です。
結論
パイプラインにより、プロセッサのすべての個別の機能をすべてのサイクルで使用できます。 これは、異なる命令の異なるステージを同時に実行することによって行われます。 これにより、CPU 設計が複雑になることさえありません。 また、複数の命令がサイクルごとに 1 つのステージを実行できるようにします。