プログラムの実行速度を上げると、結果として プロセッサ。 実行速度を上げるために、ハードウェア実装とソフトウェアアーキテクチャの両方で発明された多くの方法があります。命令を同時に実行することにより、実行に必要な時間を短縮できることが観察されました。の並列処理の概念 プログラミング 提案されました。これによると、クロックサイクルごとに複数の命令を実行できます。この概念は、プログラマーが次のようなさまざまな手法で実践できます。 パイプライン、複数の実行ユニット、および複数のコア 。これらすべての並列処理方法の中で、パイプライン処理が最も一般的に実行されます。では、パイプライン方式で命令を実行するにはどうすればよいでしょうか。実行速度をどのように向上させますか?
パイプラインとは何ですか?
パイプライン化の概念を理解するために、プログラムの実行方法のルートレベルを見てみましょう。命令は、プログラムの最小の実行パケットです。各命令には、1つ以上の操作が含まれています。単純なスカラープロセッサは、クロックサイクルごとに1つ以上の命令を実行し、各命令には1つの操作のみが含まれます。命令は一連のフェーズとして実行され、期待される結果を生成します。このシーケンスを以下に示します
命令実行シーケンス
- IF:命令を命令レジスタにフェッチします。
- ID:命令デコード、オペコードの命令をデコードします。
- AG:アドレスジェネレータ、アドレスを生成します。
- DF:データフェッチ。オペランドをデータレジスタにフェッチします。
- 例:実行、指定された操作を実行します。
- WB:書き戻し、結果を書き戻します 登録簿。
すべての手順で上記のすべての手順が必要なわけではありませんが、ほとんどの場合必要です。これらの手順では、さまざまなハードウェア機能を使用します。パイプライン処理では、これらの異なるフェーズが同時に実行されます。パイプライン処理では、これらのフェーズは異なる操作間で独立していると見なされ、重複する可能性があります。したがって、複数の操作を同時に実行でき、各操作は独自の独立したフェーズにあります。
命令パイプライン
パイプラインで命令が処理される方法を見てみましょう。これは、下の図から簡単に理解できます。
命令パイプライン
命令は独立していると仮定します。単純なパイプラインプロセッサでは、特定の時間に、各フェーズで1つの操作しかありません。初期フェーズはIFフェーズです。したがって、最初のクロックサイクルで、1つの操作がフェッチされます。次のクロックパルスが到着すると、最初の操作はIDフェーズに入り、IFフェーズは空のままになります。これで、この空のフェーズが次の操作に割り当てられます。したがって、2番目のクロックパルスの間、最初の操作はIDフェーズにあり、2番目の操作はIFフェーズにあります。
3番目のサイクルでは、最初の操作はAGフェーズになり、2番目の操作はIDフェーズになり、3番目の操作はIFフェーズになります。このようにして、命令は同時に実行され、6サイクル後、プロセッサはクロックサイクルごとに完全に実行された命令を出力します。
この命令は順番に実行されましたか?最初に最初の命令がすべてのフェーズを通過する必要があり、次に次の命令がフェッチされますか?したがって、各命令を実行するには、プロセッサは6クロックサイクルを必要とします。ただし、パイプラインプロセッサでは、命令の実行が同時に行われるため、最初の命令のみが6サイクルを必要とし、残りのすべての命令は各サイクルごとに1つずつ実行されるため、実行時間が短縮され、プロセッサの速度が向上します。
パイプラインアーキテクチャ
並列処理は、ハードウェア、コンパイラ、およびソフトウェアの手法で実現できます。パイプラインの概念を活用するには コンピュータアーキテクチャ 多くのプロセッサユニットは相互接続されており、同時に機能します。パイプラインプロセッサアーキテクチャでは、整数と浮動小数点命令用に別々の処理ユニットが用意されています。一方、シーケンシャルアーキテクチャでは、単一の機能ユニットが提供されます。
パイプラインプロセッサユニット
静的パイプラインでは、プロセッサは、命令の要件に関係なく、パイプラインのすべてのフェーズを介して命令を渡す必要があります。動的パイプラインプロセッサでは、命令はその要件に応じてフェーズをバイパスできますが、順番に移動する必要があります。複雑な動的パイプラインプロセッサでは、命令はフェーズをバイパスするだけでなく、フェーズを順不同で選択することもできます。
RISCプロセッサでのパイプライン化
最もポピュラーな RISCアーキテクチャ ARMプロセッサは、3ステージおよび5ステージのパイプラインに従います。 3ステージのパイプライン処理では、ステージはフェッチ、デコード、および実行です。個々の命令が完了するまでに3クロックサイクルかかるため、このパイプラインには3サイクルのレイテンシがあります。
ARM3ステージパイプライン
パイプラインを適切に実装するには、ハードウェアアーキテクチャもアップグレードする必要があります。 3ステージパイプラインのハードウェアには、レジスタバンク、ALU、バレルシフタ、アドレスジェネレータ、インクリメント、命令デコーダ、およびデータレジスタが含まれます。
ARM3ステージパイプラインデータパス
5つのステージでは、ステージのパイプライン化は、フェッチ、デコード、実行、バッファ/データ、およびライトバックです。
パイプラインの危険
単純な命令以外の典型的なコンピュータプログラムには、分岐命令、割り込み操作、読み取りおよび書き込み命令があります。パイプラインは、すべての種類の命令に適しているわけではありません。一部の命令がパイプラインで実行されると、パイプラインストールが停止したり、完全にフラッシュされたりする可能性があります。パイプライン処理中に発生するこのタイプの問題は、パイプライン処理ハザードと呼ばれます。
ほとんどのコンピュータプログラムでは、一方の命令の結果がもう一方の命令のオペランドとして使用されます。このような命令がパイプラインで実行されると、命令2がオペランドの収集を開始したときに最初の命令が使用できないため、ブレークダウンが発生します。したがって、命令2は、命令1が実行されて結果が生成されるまでストールする必要があります。このタイプのハザードは、読み取り後書き込みパイプラインハザードと呼ばれます。
パイプライン化の危険性を書き込んだ後に読む
分岐命令の実行もパイプラインの危険を引き起こします。実行中の分岐命令 パイプライン処理 次の命令のフェッチステージに影響します。
パイプライン化されたブランチの動作
パイプラインの利点
- 命令スループットが向上します。
- パイプラインステージの数が増えると、同時に実行される命令の数が増えます。
- パイプラインを使用すると、より高速なALUを設計できます。
- パイプライン化されたCPUは、RAMよりも高いクロック周波数で動作します。
- パイプライン処理により、CPUの全体的なパフォーマンスが向上します。
パイプライン化のデメリット
- パイプラインプロセッサの設計は複雑です。
- パイプラインプロセッサでは、命令レイテンシが増加します。
- パイプラインプロセッサのスループットを予測することは困難です。
- パイプラインが長いほど、分岐命令の危険性の問題が悪化します。
パイプライン処理は、同様の一連の実行手順に従うすべての命令に役立ちます。すべての命令が他の命令とは異なる動作をする複雑な命令を持つプロセッサは、パイプライン化が困難です。パイプラインの深さが増すにつれて、それに関連する危険性が高まるため、プロセッサには、パイプラインの3つまたは5つのステージを備えた合理的な実装があります。パイプライン化されたプロセッサのいくつかにパイプラインステージを挙げますか?