CPU高速化


ここでは、CPUの高速化として、パイプライン、スーパースカラ(スパースケーラ)、VLIW、マルチプロセッサ、マルチコアについて解説します。

CPUの高速化で最も単純な方法は動作周波数を早くすることであるが、一定以上の動作周波数になると、メモリアクセスがボトルネック(フォンノイマン ボトルネック)になり周波数を早くしても高速化につながらない。(動作周波数を早くすると、消費電力や熱などの問題もある。)
このための対策として開発された技術がCPUと主記憶の間で高速に動作するキャッシュメモリである。
また、CPUの動作は命令毎に「F(命令呼出し)」→「D(命令解読)」→「A(アドレス計算)」→「R(オペランド呼出し)」→「E(実行)」といったステージが順に行われる。

時間 1 2 3 4 5 6 7 8 9 10
命令1 F D A R E




命令2




F D A R E

パイプライン

上の図を見ての通り、1つの命令を処理するのに5サイクルかかっているが、各ステージの処理は独立しているため効率的でないので、これを処理を行う部分を複数個用意し並列に処理に処理することで、見かけ上1サイクル毎に実行するようにしたものがパイプラインである。
時間 1 2 3 4 5 6 7 8 9 10
命令1 F D A R E




命令2
F D A R E



命令3

F D A R E


命令4


F D A R E

命令5



F D A R E
命令6




F D A R E
パイプラインは、次に処理する命令を先行して処理を解しているため、処理している命令が分岐(ジャンプ)命令だった場合、パイプラインの命令は使用することができなくなってしまう。(パイプラインハザード)
そのため、分岐命令を処理する場合、次の命令を処理してから実際の分岐を行うことでパイプラインの有効利用する方法(遅延分岐)や、命令解析時に分岐命令だった場合、分岐すると予測して分岐先の命令をパイプラインにセットする方法(分岐予測、投機実行)が採用されている。
※以前は、遅延分岐を採用したCPUが多かったが、最近は分岐予測を採用したCPUも増えてきている。(Pentium系では第6世代のPentiumProから分岐予測を採用している。)

スーパースカラ(スーパスケーラ)

CPU内で命令を処理する演算論理装置(Arithmetic Logic Unit、ALU)を複数個にし、並列処理できるようにしたものがスーパースカラ(スーパスケーラ)である。
時間 1 2 3 4 5 6 7 8 9 10
命令1 F D A R E




命令2 F D A R E




命令3
F D A R E



命令4
F D A R E



命令5

F D A R E


命令6

F D A R E


命令7


F D A R E

命令8


F D A R E

命令9



F D A R E
命令10



F D A R E
命令11




F D A R E
命令12




F D A R E
スーパースカラはプログラムの連続した命令が並列処理可能であることを条件としているので、並列処理できない命令が連続していた場合は、上の図のような動作にはならない。
ちなみに、スパースからでは連続した命令が並列処理可能かどうかは実行時にCPUが行っている。

VLIW(Very Long Instruction Word、超長命令語)

CPUが命令を読み込むときに、複数の命令(群)を読み処理し、1回の実行で複数命令を並列処理するのが、VLIWである。
時間 1 2 3 4 5 6 7 8 9 10
命令1群 F D A R E




E
E
E
命令2群
F D A R E



E
E
E
命令3群

F D A R E


E
E
E
命令4群


F D A R E

E
E
E
命令5群



F D A R E
E
E
E
命令6群




F D A R E
E
E
E
VLIWでもスーパースカラと同じようにプログラムの連続した命令(命令群)が並列処理可能であることを条件としている。
そのため、VLIWではプログラムの実行モジュールを作成するときにコンパイルが並列処理可能な命令を集め命令群を作り出すことを行っている。
VLIWを採用したCPUには、Itanium(Intel)などがある。

マルチプロセッサ、マルチコア

スーパースカラ技術などで高速化が実現されたが、さらなる高速化への要求と消費電力、発熱(放熱のためのファンの騒音)などの問題から、1つのボード(基板)上に複数のCPUを実装したマルチプロセッサや、1つのCPU内に複数のコアを封入したマルチコアの技術が考え出された。
複数のジョブを同時に実行するマルチスレッドでは、命令の並列性などを考慮することなく、マルチプロセッサ(マルチコア)を容易に使用できるので、高速化や消費電力、熱などの問題を高レベルで解決できる技術として、普及が進んでいる。(シングルスレッドの処理をマルチプロセッサで実行させるにはスーパースカラやVLIWのように命令の並列性が問題になる。)

戻る 一覧へ