用語

CPUのパイプライン処理(命令パイプライン)

現代的なパソコンのものも含むCPUには、処理の高速化のためのありとあらゆる技術的な工夫が盛り込まれています。より高い性能を高い電力効率で実現するためのさまざまな最新技術の集大成と言っていいデバイスです。

今回はそういったCPU高速化のための技術の一つ、「パイプライン処理」を説明します。

今のすべてのCPUにはこのパイプライン処理はなくてはならない要素になっていて、これを基礎の基礎としてすべての要素が積み上げられているような形です。

パイプライン処理の基本的な考え方

CPUで処理できる機能の単位を「命令」と呼びます。これをいかに効率よく高速に実行するかの工夫の積み上げが最新のCPUの姿です。

パイプライン処理が導入される前はこんなイメージで1つ1つ順番に命令を処理していました。

1つの命令の処理が終わるまで次の命令は実行できません。

実際にはCPUの命令を処理する段階はいくつかのステージに分割することが出来ます。

具体的にはメインメモリに書き込まれたプログラムから次に実行する命令を読み出す「フェッチ」、読み出した命令のデータをCPUが実行できる形に解釈する「デコード」、そのほかにも実際に処理を行なうステージや、命令の実行で必要になるメインメモリからのデータの「ロード」、処理結果をメモリに書き込む「ストア」といったステージがあります。

命令パイプラインの処理ではこれらのステージに命令の処理を分割します。一例として1つの命令の処理を5つのステージに分割したCPUの動きで考えてみます。

命令単位で順番に実行するCPUだとこんな感じです。

中身をよく見ていくと、命令1の5つめのステージ:ST5を処理しているとき、ST1~ST4を実行するための回路は遊んでいる形になります。

これを無駄と考えて処理を効率化しようとするのがパイプラインの基本的な考えです。

それぞれ実行ステージの処理時間が同じなら、以下の図のように処理をオーバーラップさせてトータルの処理性能を大幅に改善することが出来ます。

パイプライン処理の考え方を取り入れても1つ1つの命令それぞれの処理にかかる時間は短縮されません。ですがたくさんの命令を連続して処理する時には、パイプライン処理を採用すると全部の命令を処理しきる時間が大幅に短縮できるわけです。

今回想定してみた5ステージのパイプラインを持つCPUならば、5つの命令をオーバーラップさせて同時並行で処理できる、ということになります。

そしてすべてのプログラムは膨大な数のCPU命令の塊です。

パイプライン処理の弱点

基本的な原理だけ見ると性能向上には万能に見えるパイプライン処理ですが、人間の考えるものにやっぱりオールマイティはなくて弱点も抱えています。

弱点の一つ目は、パイプラインのステージの一つの処理時間が遅延すると、他の命令の処理も全部影響を受けて処理が止まってしまうことです。

イメージとしてはこんな感じ。

2番目の命令の4つめのステージで遅延が生じると、その処理が終わるまで次の命令のステージ4が実行できません。さらに後ろの命令の処理も玉突きのように連鎖して遅延してしまいます。

今のコンピュータの世界ではCPUの処理速度が圧倒的に高性能になっていて、メインメモリのアクセスやSSD・ハードディスクの速度はCPUに全く追いつけなくなっています。

遅延している処理がメインメモリアクセスだったりすると、CPUから見ると場合によっては「永遠」に近いぐらいに処理が待たされてしまうことになります。

他にもCPUが「ストール(失速)」する原因はいくつかあります。

命令1の処理結果を命令2で使う、といった場合には、命令1の処理が完了しないと命令2が実行できません。こちらもせっかくのパイプライン処理の意味がなくなってしまいます。

極端な場合にはこうなります。

プログラムの要素として絶対に必要なものの一つ、「条件分岐」でもやはりパイプラインが上手く流れなくなります。

パイプライン処理はある意味、次に処理する命令を「先読み」しているのですが、条件分岐では次に処理する命令がどれか処理を進めてみるまで分らないからです。

こういった状況にぶつかると、最新のCPUでも処理速度が大幅に低下します。

パイプラインを「詰まらなくする」工夫

パイプライン処理がCPUの基礎技術として「当たり前」の存在になってからは、CPUの実行性能を高く保つ条件として一番大切なのは「命令パイプラインをいかに詰まらせないか」、ということになりました。

これを実現するためのさまざまな工夫が今のCPUには盛り込まれています。

  • 分岐予測
  • 投機実行
  • アウトオブオーダー実行

などなど。

高速で大容量、ヒット率が高いキャッシュメモリもその一つと言えると思います。

半導体製造技術の驚異的な進歩とこういったCPU設計上の技術の進化によって、今のCPUはしばらく前のスーパーコンピュータも超えるような性能を持つに至りました。

上にも書いた技術の内容などはこのあと別記事で順番に解説していきますね。