スーパースカラー
スーパースケーラまたはスーパースカラー(superscalar)とは、CPUのアーキテクチャの一種であり、命令レベルの並列性という並列コンピューティングの考え方をCPU内に実装したもので、結果として与えられたクロック周波数以上の性能を発揮するシステムを構成する技術である。スーパースケーラアーキテクチャでは、複数の命令を命令パイプラインの1つのステージで実行する。このため、複数の命令が同時にプリフェッチされ、プロセッサ内の冗長な実行ユニットを使って並行して処理される。
歴史
1965年のシーモア・クレイが設計したCDC 6600が、最初のスーパースケーラ設計のマシンと言われている。
商用のシングルチップのスーパースケーラマイクロプロセッサは、Intel i960CA(1988年)と AMD 29000シリーズの 29050 (1990年)が最初である。RISC型CPUの設計ではコアが単純であったため、当時の設計ルールの細かさでもワンチップに複数の実行ユニット(ALUなど)を搭載でき、スーパースケーラを実現できたのである。このため、1980年代から1990年代にかけての時期に RISC が CISC に対して性能的に優位に立った。一部の低消費電力の組み込み向けプロセッサを除いて、1998年以降に開発された汎用プロセッサは基本的に全てスーパースケーラである。
現在パーソナルコンピュータでデファクトスタンダードとなっているx86アーキテクチャでは、1993年のPentiumで2実行ユニットのインオーダ実行型のスーパースケーラを実現し、その後の"P6"(Pentium Pro と Pentium II)以降で3実行ユニットのアウトオブオーダ実行型スーパースケーラに発展した。2008年現在のIA-32アーキテクチャは単一コア当り5実行ユニットのアウトオブオーダ実行型スーパースケーラで、平均IPCは3以上を達成している。
スカラーからスーパースケーラへ
最も単純なプロセッサアーキテクチャをスカラープロセッサと呼ぶ。スカラープロセッサでは、各命令で1つか2つのデータを一度に扱う。一方、ベクタープロセッサでは同時に多数のデータを扱う。これは数学におけるスカラーとベクトルの違いに似ている。スーパースケーラプロセッサはこれらの中間と言える。各命令は1つのデータを扱うが、CPU内に複数の実行ユニットがあるため、それぞれ別のデータを扱う複数の命令を同時並行的に実行可能となる。
スーパースケーラCPUの設計では、複数存在する実行ユニットを常に働かせておくために、命令の分配機構が重要である。実装される実行ユニット数が増えるにつれ、その重要性は増している。初期のスーパースケーラ型CPUには、2つのALUと1つのFPUが搭載されていたが、最近の PowerPC 970 では4つのALUと2つのFPUと2つのSIMDユニットが搭載されている。分配機構が効率的でない場合、これらの実行ユニットに連続して命令を供給することができず、システムの性能は全体として低くなる。
スーパースケーラプロセッサの実行効率はサイクル当たりの実行命令数で表される。ただし、サイクル当たりの実行命令数が大きいからといって、常にスーパースケーラだとは限らない。パイプライン型CPUやマルチコアCPUも同様の性能を示すが、方式は異なる。
スーパースケーラ型CPUでは、分配機構がメモリから命令群を読み込み、そこから並列に実行できる命令を選択し、実行ユニット群にそれらを供給する。従って、スーパースケーラプロセッサはパイプラインが複数あって、各パイプラインが1つの命令スレッドを実行していると見なすこともできる。
限界
スーパースケーラ技法による性能向上は、以下の2つによって制限される。
- 命令列の本質的な並列性の度合い。つまり、命令レベルの並列性の制約。
- 命令間の依存関係チェックロジックと分配機構が命令選択にかけられる時間の制約と機構自体の複雑さ。
既存のバイナリの実行プログラムの持つ並列性にはばらつきがある。ものによっては命令間の依存が全く無く、常に並列に実行可能なこともある。逆に依存関係が多く、並列性がほとんどない場合もある。例えば、a = b + c; d = e + f
という命令列は依存関係がないため、並列に実行可能である。しかし、a = b + c; b = e + f
という命令列は依存関係があるため、並列に実行することはできない。
同時に実行可能な命令数が増えると、依存関係をチェックするコストも急激に増大する。また、そのチェックをCPUのクロックに合わせて実行時に行わなければならないという事実が事態をさらに悪化させる。研究によれば、命令の種類を n、同時実行可能な命令数を k としたとき、依存関係チェックの回路規模は 、時間は かかるとされている。数学的には、この問題は順列における組合せ数学の問題である。
たとえ命令列に依存関係がないとしても、スーパースケーラ型CPUは常に依存関係のチェックを行う。さもなくば、依存関係の検出に失敗し、不正な結果を得ることになる。
半導体プロセス技術がどれだけ進化して、スイッチ速度が高速化しても、以上のような問題によって同時に実行可能な実際の命令数には限界が生じる。プロセス技術の進化によって実行ユニット(ALUなど)の数が増えても、依存関係チェックのための論理回路の規模の増大が急激であるため、実現可能な規模は制限される。また、たとえ依存関係チェックを無限に素早く実行できたとしても、命令列の本質的な並列性によって性能向上に限界が生じる。
類似技法
このような限界があることから、他の性能向上技法の探求が行われた。例えば、VLIW、EPICアーキテクチャ、同時マルチスレッディング (SMT)、マルチコアなどである。
VLIW では、依存関係チェックを実行時にハードウェアで行うのではなく、コンパイラで行う。スーパースケーラ設計では数ナノ秒で行わなければならないが、コンパイラではその制限はない。また、マルチコアとマルチスレッド・コンパイラの組合せでも同様である。EPICアーキテクチャも VLIW に似ている。
同時マルチスレッディング (SMT) はスーパースケーラ型CPUの全体効率を向上させる技法である。SMT では複数の独立したスレッドを同時に実行することで、実行ユニットの稼動効率を向上させる。
マルチコアCPUは、個々のコアが1つのスレッドを実行する独立したプロセッサとなっている(通常、キャッシュを共有している)。
これらの技法は排他的なものではない。従って、マルチコアCPUの各コアがスーパースケーラであっても構わない。
関連項目
参考文献
- マイク・ジョンソン著、村上和彰監訳、『スーパスカラ・プロセッサ- マイクロプロセッサ設計における定量的アプローチ -』、日経BP社、ISBN 4-8227-1002-5 (原著 Mike Johnson, Superscalar Microprocessor Design, Prentice-Hall, 1991, ISBN 0-13-875634-1)
- Sorin Cotofana, Stamatis Vassiliadis, "On the Design Complexity of the Issue Logic of Superscalar Machines", EUROMICRO 1998: 10277-10284
- Steven McGeady, "The 1960CA SuperScalar Implementation of the 80960 Architecture", IEEE 1990, pp. 232-240
- Steven McGeady, et al., "Performance Enhancements in the Superscalar i960MM Embedded Microprocessor," ACM Proceedings of the 1991 Conference on Computer Architecture (Compcon), 1991, pp. 4-7
外部リンク
- Eager Execution / Dual Path / Multiple Path by Mark Smotherman