CPUは単に動作周波数を上げるだけでなく、処理速度向上のためにさまざまな工夫が施されている。基本的なものが「パイプライン」と「キャッシュ」。Part3では、パイプラインとキャッシュについて詳しく見ていく。

 ここからは、CPUをより高速に動作させるための技術について解説していく。

 CPUは単に動作周波数を上げるだけでなく、処理速度向上のためにさまざまな工夫が施されている。その一つが図1にある「パイプライン」だ。

図1●パイプラインで処理を効率化する<br>1クロック目で命令1を読み込み,次の1クロックで命令1を解読するのと同時に命令2を読み込む。3クロック目で命令1を実行し,命令2を解読,命令3を読み込むなど,流れ作業のように次々と命令を読み込んで処理していく。これをパイプラインという。
図1●パイプラインで処理を効率化する
1クロック目で命令1を読み込み,次の1クロックで命令1を解読するのと同時に命令2を読み込む。3クロック目で命令1を実行し,命令2を解読,命令3を読み込むなど,流れ作業のように次々と命令を読み込んで処理していく。これをパイプラインという。
[画像のクリックで拡大表示]

 前述したように1クロックで1つの処理を行っていると、1つの命令を実行するのに4クロックかかる。スーパーのレジに例えるなら、(1)買い物かごから商品を取り出し、(2)バーコードを読み込み、(3)お金を受け取ってお釣りを返し、(4)商品を袋に詰める、という作業を1人で行っていることになる。レジには1人しかいないので、1人の客が終わるまで次の客は待つことになってしまう。この「待つ」ということが、図1のCPU処理内容では空白の部分に当たる。

 パイプラインは、この無駄をなくして処理を高速化しようとする技術だ。図1の下では、2クロック目で既に2つ目の命令がフェッチされている。先ほどのレジで例えるなら、(1)(2)(3)(4)の担当者を別々に4人配置して、それぞれの処理を同時並行で行う。これだと、時間の無駄となる空白の部分がほとんどなくなっているのが分かるだろう。

 さらに、CPUの内部処理を4ステップではなく8ステップ、10ステップなどと細分化したのが「スーパーパイプライン」だ。実は動作周波数を上げるといっても、トランジスター回路の応答速度が追い付かないなどの理由で限界がある。そこで、各ステップをより細分化して、一つひとつのステップの処理時間が短くなるようにし、動作周波数を上げやすくする。1命令を実行するためのクロック数は増えるが、それを補う以上に動作周波数を上げればよいという戦略だ。例えば,インテルはPentium 4で20ステップまでに細分化し、「ハイパー・パイプライン」と名付けた。

 CPUにはこうしたパイプライン/スーパーパイプライン技術と同時に、「スーパースケーラ」と呼ばれる技術も盛り込まれている。フェッチやデコードを複数同時に行い、演算器の数を増やすことで一度に複数の命令を処理できるようにする。スーパーのレジに例えると、各持ち場の担当者を1人ずつではなく複数配置するようなものだ。

キャッシュで遅延を解消

 このほか、CPUの処理を高速化する技術としては「キャッシュ」がある。CPUの動作周波数はFSBの数倍だが、メモリーの動作周波数はそれよりもずっと遅い。このため、実際にCPUがメモリーから命令やデータを読み込む際には「待ち時間」が発生してしまう(図2)。このようなことを「ウエイトがかかる」ともいう。

図2●遅いメモリーアクセスをキャッシュでカバー<br>CPUの動作周波数はメモリーよりも速い。さらに,メモリーから命令を読み込むときは,メモリーの動作周波数で数クロック分の時間がかかってしまう。このため読み込みが終わるまで待ち時間が発生する。
図2●遅いメモリーアクセスをキャッシュでカバー
CPUの動作周波数はメモリーよりも速い。さらに,メモリーから命令を読み込むときは,メモリーの動作周波数で数クロック分の時間がかかってしまう。このため読み込みが終わるまで待ち時間が発生する。
[画像のクリックで拡大表示]

 これをできる限り防ぐため、CPUの内部にはキャッシュと呼ばれるメモリーが装備されている。CPUが外部メモリーから命令やデータを読み込むときは、それをキャッシュにコピーしておく。次回、同じものを読み込む際は、まずキャッシュから探し、そこにコピーされていれば外部メモリーにはアクセスしない。CPU内部にあるキャッシュはCPUと同じ動作周波数でアクセスできるため、無駄な時間がなくなる。

 最近のCPUは、「1次キャッシュ」と「2次キャッシュ」の2段階構成だ。キャッシュは外部メモリーに比べて容量が少ないため、必ずしも目的の命令やデータが見つかる(「ヒットする」という)わけではない。通常は1次キャッシュを探し、そこでヒットしなければ2次キャッシュを探す。そこにもなければ外部メモリーにアクセスすることになる。キャッシュの容量を多くすれば、ヒット率が上がって処理の高速化が期待できるが、現実にはCPUの設計コストなどの問題で数百KB程度となっている。

 以上を踏まえ、現在のCPUを簡単に図式化すると図3のようになる。ここにはキャッシュのほかに、小数の計算を専門に行う浮動小数点演算ユニットや拡張命令演算ユニットも記載した。

図3●最近のCPUはキャッシュや拡張命令搭載が当たり前
図3●最近のCPUはキャッシュや拡張命令搭載が当たり前
最近のCPUは複数の演算ユニットや,1次/2次キャッシュ,拡張命令演算ユニットを搭載しているのが当たり前になっている。

 実は先に述べた演算器は整数用で、これで小数を計算しようとすると時間がかかってしまう。最近のCPUは、浮動小数点演算ユニットを複数搭載しているのが普通だ。拡張命令も、整数演算や浮動小数点演算の実行ユニットとは別に実装されている。