スーパースカラーとは
スーパースカラーとは、プロセッサのマイクロアーキテクチャにおける用語で、複数の命令を同時に実行することで処理能力を高める技術です。このアーキテクチャは、プログラムが持つ命令レベルの並列性を活用し、複数の
実行ユニットを並列に動作させることで、効率的な処理を実現します。
スーパースカラープロセッサの概要
スーパースカラープロセッサは、単一のプロセッサ内で命令レベルの並列処理を行う
CPUです。従来のスカラプロセッサが1クロックサイクルに1つの命令しか実行できないのに対し、スーパースカラープロセッサは、複数の
実行ユニットに命令を同時に割り当てることで、1クロックサイクル中に複数の命令を実行できます。これにより、クロック周波数が同じでも、より多くの命令を単位時間内に処理できるようになり、スループットが向上します。
各
実行ユニットは、算術論理演算ユニット(ALU)などの実行リソースであり、個別のプロセッサやコアではありません。スーパースカラープロセッサは、これらの
実行ユニットを効率的に活用することで、高い処理能力を実現します。
スーパースカラーの歴史
スーパースカラー設計の最初の例は、
1965年にシーモア・クレイが設計したCDC 6600であるとされています。商用シングルチップのスーパースカラー
マイクロプロセッサとしては、1988年のIntel i960CAと1990年のAMD 29000シリーズの29050が挙げられます。
RISC型
CPUは構造が単純であったため、当時の技術でも複数の
実行ユニットを1つのチップに搭載することが可能でした。これにより、1980年代から1990年代にかけて、
RISCがCISCに対して性能面で優位に立つことができました。
1998年以降、低消費電力の組み込み向けプロセッサを除き、ほとんどの汎用プロセッサはスーパースカラーアーキテクチャを採用しています。x86アーキテクチャでは、1993年のPentiumで2つの
実行ユニットを持つインオーダ実行型のスーパースカラーが導入され、その後、Pentium Proや
Pentium IIなどのP6世代で3つの
実行ユニットを持つアウトオブオーダ実行型へと進化しました。
現在では、IA-32アーキテクチャの単一コアあたり5つの
実行ユニットを持つアウトオブオーダ実行型スーパースカラーが一般的であり、平均IPC(Instructions Per Cycle)は3以上を達成しています。
スカラーからスーパースカラーへ
最も単純なプロセッサアーキテクチャはスカラープロセッサと呼ばれ、各命令で1つまたは2つのデータを処理します。一方、ベクタープロセッサは多数のデータを同時に処理できます。スーパースカラープロセッサは、これらの中間に位置づけられます。各命令は1つのデータを処理しますが、
CPU内に複数の
実行ユニットがあるため、複数の命令を並行して実行できます。
スーパースカラー
CPUの設計において、複数の
実行ユニットを効率的に使用するための命令分配機構は非常に重要です。
実行ユニットの数が増えるにつれて、この機構の重要性はさらに高まります。初期のスーパースカラー
CPUには2つのALUと1つの
FPUが搭載されていましたが、最近のPowerPC 970では4つのALU、2つの
FPU、2つの
SIMDユニットが搭載されています。分配機構が効率的でない場合、
実行ユニットに命令を供給できなくなり、システム全体の性能が低下します。
スーパースカラープロセッサの実行効率は、サイクル当たりの実行命令数で表されます。ただし、サイクル当たりの実行命令数が大きいからといって、必ずしもスーパースカラーであるとは限りません。パイプライン型
CPUや
マルチコアCPUも同様の性能を示すことがありますが、その実現方法は異なります。
スーパースカラー
CPUでは、分配機構がメモリから命令を読み込み、並列実行可能な命令を選択して
実行ユニットに供給します。したがって、スーパースカラープロセッサは、複数のパイプラインを持ち、各パイプラインが1つの命令スレッドを実行すると見なすこともできます。
スーパースカラーの限界
スーパースカラー技術による性能向上は、以下の2つの要因によって制限されます。
1.
命令列の本質的な並列性の度合い:プログラムの命令には、依存関係があるものとないものがあります。依存関係のない命令は並列実行できますが、依存関係のある命令は順番に実行する必要があります。命令間の依存関係が大きければ、並列実行できる命令の数が減少し、性能向上が制限されます。
2.
命令間の依存関係チェックと分配機構の複雑さ:同時に実行できる命令数が増えるにつれて、命令間の依存関係をチェックするコストが急激に増大します。また、このチェックを
CPUのクロックに合わせて実行時に行う必要があり、その複雑さが問題となります。研究によれば、命令の種類をn、同時実行可能な命令数をkとしたとき、依存関係チェックの回路規模はnのk乗、時間はkの二乗にlog nを掛けた値に比例するとされています。
たとえ命令列に依存関係がない場合でも、スーパースカラー
CPUは常に依存関係のチェックを行います。チェックを怠ると、不正な結果を招く可能性があるからです。半導体
プロセス技術の進化によってスイッチ速度が向上しても、上記の要因によって同時実行可能な命令数には限界が生じます。
プロセス技術の進化によって
実行ユニットの数を増やしても、依存関係チェックのための論理回路の増大が急激であるため、実現可能な規模は制限されます。
スーパースカラーの代替技術
スーパースカラーの限界から、他の性能向上技術が研究されてきました。例えば、VLIW(Very Long Instruction Word)、EPIC(Explicitly Parallel Instruction Computing)アーキテクチャ、同時マルチスレッディング(SMT)、
マルチコアなどが挙げられます。
VLIWでは、依存関係チェックをハードウェアではなく
コンパイラで行います。これにより、スーパースカラー設計では数ナノ秒で実行する必要があったチェックを、時間的な制約なく行うことができます。EPICアーキテクチャもVLIWに似たアプローチを取ります。
同時マルチスレッディング(SMT)は、複数の独立したスレッドを同時に実行することで、
実行ユニットの稼働効率を向上させる技術です。
マルチコアCPUは、各コアが独立したプロセッサとして機能し、1つのスレッドを実行します。これらの技術は排他的なものではなく、
マルチコアCPUの各コアがスーパースカラーであっても構いません。
結論
スーパースカラーは、プロセッサの性能を向上させるための重要な技術です。命令レベルの並列性を活用し、複数の命令を同時に実行することで、処理速度を大幅に向上させます。しかし、命令間の依存関係やハードウェアの複雑さにより、性能向上には限界があります。そのため、VLIW、SMT、
マルチコアなどの他の技術と組み合わせることで、さらなる性能向上が追求されています。
関連項目
アウト・オブ・オーダー実行
投機的実行 / 積極的実行
EPICアーキテクチャ
スーパーパイプライン
同時マルチスレッディング
パイプライン処理