パイプライン化は、ユニプロセッサシステムとマルチプロセッサシステムとは何の関係もありません。それは、ハードウェアで、マシン上で単一の命令を実行する際に取られるステップについて真剣に考えることと関係があります。
MIPSの「add-immediate」命令を実装するとします。この命令は、によって指定されたレジスタに格納された整数を、命令に直接エンコードされaddi $d, $s, $t
た整数に追加し、その結果をによって指定されたレジスタに格納します。そのために必要な手順を考えてください。これを分解する1つの方法があります(たとえば、これは必ずしも実際のハードウェアに対応しているわけではありません)。$s
$t
$t
- (バイナリエンコードされた)命令を解析して、それがどの命令であるかを調べます。
- それが命令であることを認識したら
addi
、ソースレジスタとデスティネーションレジスタ、および追加するリテラル整数を解析します。
- 適切なレジスタを読み取り、その値と整数の合計を計算します。
- 名前付き結果レジスタに結果を書き込みます。
ここで、これらすべてをハードウェアに組み込む必要があることを思い出してください。つまり、これらのそれぞれに関連する物理回路があります。また、一度に1つの命令を実行すると、これらの回路の4分の3がアイドル状態になり、常に何も実行されなくなります。パイプライン処理は、この観察結果を利用します。プロセッサが2つのaddi
命令を連続して実行する必要がある場合、次のことができます。
- 最初のものを特定する
- 最初のものを解析し、そうでなければアイドル状態になる回路で2番目のものを識別します
- 最初のものを追加し、2番目のものを解析します
- 最初のものを書き、2番目のものを追加します
- 2番目のものを書き出す
したがって、各命令は4回の処理ラウンドを必要としますが、プロセッサは合計5回のラウンドで2つの命令を完了しました。
これは、次の命令で何をすべきか(または次の命令が何であるか)を知る前に、ある命令が終了するのを待たなければならないことがあるという事実のために複雑になりますが、それが基本的な考え方です。