スーパースケーラ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
スーパースケーラまたはスーパースカラー(superscalar)とは、CPUのアーキテクチャの一種であり、並列コンピューティングの考え方をCPU内に実装したものであり、結果として与えられたクロック周波数以上の性能を発揮するシステムを構成する技術である。
単純なプロセッサは、一度にひとつのデータを処理する。 ベクタープロセッサは、それとは対照的にひとつの命令で並行して複数のデータを処理する。 この違いはスカラーとベクターの数学上の違いとよく似ている。 スーパースケーラプロセッサは、これらふたつの中間のような存在である。 各命令はひとつのデータを処理するが、内部に複数の実行ユニットを持っているため、複数の命令を(それぞれ異なるデータについて)同時に実行できる。
たいていの場合、スーパースケーラプロセッサは1マシンサイクル当たり1命令以上実行するレベルで処理効率を維持する。 しかし、ただ単に複数の命令を同時に実行できるというだけではスーパスケーラのアーキテクチャとは言えない。 単純なパイプライン構造のプロセッサでも、複数の命令の異なるステージを同時に実行している。 しかし、これはスーパースケーラではない。
スーパースケーラCPUでは、同じ種類の機能ユニットがいくつか存在し、それに付随して命令をそれらのユニットに分配する機構が必要である。 例えば、多くのスーパースケーラ設計では、複数の整数ユニット(一般にはALUと呼ぶ)を持っている。 分配機構は複数の命令をメモリから読んで、どれが並列に実行できるかを決め、複数のユニットにそれを分配する。
分配機構の性能がスーパースケーラ設計の全体性能を決定する。その仕事は単純ではない。
a = b + c; d = e + f;
というふたつの命令が並んでいた場合、これらの間には依存関係はないので並行して実行可能である。
a = b + c; d = a + f;
このような命令の並びに関しては並行して実行可能かどうかは判断し難い。 というのは、実行ユニットでこれらを実行させたときにどちらが速く完了するかによって答えが変わってくるからである。
多くの最近のCPUの設計は分配機構の精度をいかに上げるかに多くの労力を割いている。 それによって、全実行ユニットがなるべく稼動し続けるようにしようとしているのである。 これは、実行ユニットの数が増えるにつれて重要な観点となってくる。 初期のスーパースケーラCPUはふたつのALUとひとつのFPUを持っていた。 最近の設計のPowerPC 970では、4つのALUと2つのFPU、さらには2つのSIMDユニットまで持っている。 もし分配機構がそれらの実行ユニットを十分に稼動させられるほど洗練されていなければ、全体としての性能はそれほど向上しないだろう。
1965年のシーモア・クレイのCDC 6600が最初のスーパースケーラ設計のマシンと言われている。 その後、RISCマイクロプロセッサがスーパースケーラを取り入れた。 これは、RISCのコアが単純であったために複数の実行ユニットを組み込む余裕があったからである。 そのため、1980年代から1990年代にかけて、RISCはCISCよりも性能が良かった。 しかし半導体集積プロセスの進歩により、IA-32のような複雑な設計のものでもスーパースケーラを実現できるようになったのである。
基本的に1998年ごろから開発された汎用マイクロプロセッサは全てスーパースケーラである。
制御装置の劇的な進化がなされた今、スーパースケーラ設計だけではこれ以上の性能向上は望めない。 可能性のある解決策は、分配機構をCPUからコンパイラに移転させることである。 それによって最良の結果をえるには時間と労力がかかると予想される。 しかし、それがVLIW設計の前提であり、静的スーパースケーラとかコンパイル時スケジューリングと言われる所以である。
- 訳注:ここでのスーパースケーラの説明にはアウト・オブ・オーダー実行の説明が混じっている。
[編集] 関連項目
- アウト・オブ・オーダー実行
- 投機的実行/積極的実行
- EPICアーキテクチャ
- スーパーパイプライン
カテゴリ: コンピュータアーキテクチャ | CPU