Renesas Synergy™

FAQ 1009074 : パイプライン(Pipeline)

CPUが命令の実行を複数のステージに分けて、各ステージを処理するユニットごとに、順次処理を進める機構です。これにより、命令の実行終了を待たずに次の命令を実行できるので、プログラム実行を高速化できます。インストラクション・サイクルが次のような5ステージに分かれている場合、5段パイプラインと呼びます。

IF :命令フェッチ
ID :命令デコード
EX :ALUなどでの演算
MEM :メモリ・アクセス
WB :実行結果をレジスタに書き込み




各ステージでは処理手順が進むだけで、データそのものを受け渡すとはかぎりません。IDではIFのデータを受けて、それを解析しますが、EX以降はIDでの解析結果そのものを受けるのではなく、それに対応する処理を行います。
命令フェッチは1度に1命令で、実行クロックごとに各ステージの処理が進みますので、各命令のパイプライン処理は、1クロックずつずれることになります。



クロック・サイクルごとのパイプライン処理は、上図でそのクロック・サイクルを縦に見た内容となります。たとえば3番目のクロック・サイクルでは、破線で囲んだように、IFで命令3のフェッチ、IDで命令2の解析、EXで命令1の実行を行います。
なお、命令間の依存性やハードウエア資源の競合、分岐命令などがあると、停止(ストール)や再実行などが必要となり、かえって処理速度が低下することになり、これを「パイプライン・ハザード」と呼びます。命令間の問題については、コンパイラがあるていど命令の順序を操作して対応しています。分岐については、分岐予測機能によって、分岐先の命令を先に実行しておくことによって、あるていど回避されます。

より高速化を図るために、複数のパイプラインを並列に組み合わせて、並列処理をさせる構成をスーパスカラ方式と呼びます。たとえば、2ウエイのスーパスカラ方式では、同時に2命令をフェッチします。

他にご質問がございましたら、リクエストを送信してください