パイプライン

パイプラインの説明は文章にするとやや煩雑だが、発想は単純である。「命令を生真面目に一つずつ処理することで無駄が出来るのだから、もっと柔軟に回路を使いこなせば高速に作業を終えられるはず」、という考え方だ。
例えば、「命令Aの取り込み」が終わり「Aの解読」を行うとき、先の「〜の取り込み」を行う回路はもう何も処理していない。この部分に、後に続く「命令Bの取り込み」を押し込んでしまうのである。以下「Aの実行」の最中に「Bの解読」、「Aの出力」の最中に「Bの実行」、と処理していけば、本来「4+4」の8手順かかるところを、5手順分の時間で処理できる。さらに「Aの実行、Bの解読、Cの取り込み」などという具合に、同時に多くを処理できればそれだけ効率が上がる。この方法では、一つ一つの命令を処理する時間が短くなるわけではなく、また同時に二つ以上の命令を完了できるわけでもない。しかし全体で見れば劇的な処理能力の向上を実現しているのである。
ここでは手順を4つ(4段)に分けて示したが、実際はそれぞれの作業を更に細分化させている(これを「パイプラインを深くする」という。)。
細分化には高効率以外にもうひとつ利点がある。「命令の細分化」とはすなわち、「命令の処理回路を細分化(=単純化)」ということである。回路が単純になればそれぞれの回路の負担が減り、処理に要する時間が短くなる。結果、動作クロックを上げることができるのである。
ただし注意すべきは、処理できる命令が単純になると一度に処理できる情報量が減り、IPCが下がる、という点である。「IPC×クロック」の値は変化しないのだ。意味が無いように思えるが、ここで思い出していただきたいのが「キャッシュ」の存在である。「キャッシュの速さはコアと同じ」と述べたが、ここでいう“速さ”とはクロック数のことである。コアの性能が据え置きでもキャッシュの性能は上がるので、CPU全体で若干ではあるが性能の向上が見込めるのだ。
それにしてもこのデザインは長文読みにくい。