

スーパースカラプロセッサ(またはマルチイシュープロセッサ[ 1 ])は、単一のプロセッサ内で命令レベル並列と呼ばれる並列処理を実装するCPUです。 [ 2 ]クロックサイクルごとに最大1つの命令しか実行できないスカラプロセッサとは対照的に、スーパースカラプロセッサは、プロセッサ上の異なる実行ユニットに複数の命令を同時にディスパッチすることで、クロックサイクル中に複数の命令を実行または実行を開始できます。そのため、特定のクロックレートで通常可能なスループット(単位時間内に実行できる命令数。1未満になることもあります)よりも高いスループットを実現できます。各実行ユニットは、個別のプロセッサ(またはプロセッサがマルチコアプロセッサの場合はコア)ではなく、算術論理演算ユニットなどの単一のCPU内の実行リソースです。
スーパースカラCPUは通常パイプライン処理も行いますが、スーパースカラ実行とパイプライン実行は異なるパフォーマンス向上技術とみなされます。前者(スーパースカラ)は複数の実行ユニットを使用して複数の命令を並列実行するのに対し、後者(パイプライン)は実行ユニットを複数のフェーズに分割することで、同じ実行ユニット内で複数の命令を並列実行します。「シンプルなスーパースカラパイプライン」の図では、2つの命令を同時にフェッチするのがスーパースカラであり、最初の2つの命令が書き戻される前に次の2つの命令をフェッチするのがパイプラインです。
スーパースカラ技術は、従来、(特定のCPU内で)いくつかの特徴的な特性と関連付けられてきた。
1964 年のSeymour CrayのCDC 6600 は、1 サイクルで複数の命令を発行することはできませんでしたが、複数の機能ユニットを介して命令を同時に実行できることから、現代のスーパースカラ プロセッサに初期に影響を与えたものとしてよく挙げられます。1967 年のIBM System/360 Model 91 も初期に影響を与えたもので、アウトオブオーダー実行を導入し、Tomasulo のアルゴリズムを先駆的に使用しました。[ 3 ] Intel i960 CA (1989 年)、[ 4 ] AMD 29000シリーズ 29050 (1990 年)、および Motorola MC88110 (1991 年) [ 5 ]マイクロプロセッサは、最初の商用シングルチップ スーパースカラ マイクロプロセッサでした。このようなRISCマイクロプロセッサは、スーパースカラ実行を初めて実現したものでした。RISCアーキテクチャはトランジスタとダイ面積を解放し、複数の実行ユニットを組み込むことが可能であり、命令セットの伝統的な均一性はスーパースカラディスパッチに有利だからです(これが、1980年代から1990年代にかけてRISC設計がCISC設計よりも高速であった理由であり、命令のビット長が可変の場合、複数のディスパッチを行うのははるかに複雑になります)。
低消費電力アプリケーション、組み込みシステム、バッテリー駆動デバイスで使用されるCPUを除けば、1998年頃から開発された汎用CPUはほぼすべてスーパースカラ型である。
P5 Pentiumは最初のスーパースカラx86プロセッサでした。Nx586 、P6 Pentium Pro、AMD K5は、スーパースカラマイクロアーキテクチャ上での実際の実行前に、 x86命令を非同期的に動的なマイクロコードのようなマイクロオペレーションシーケンスにデコードする最初の設計の一部でした。これにより、バッファリングされた部分命令の動的なスケジューリングが可能になり、より単純なP5 Pentiumで使用されていたより厳格な方法と比較して、より多くの並列性を引き出すことができました。また、投機的実行が簡素化され、高度なCyrix 6x86などの設計と比較して、より高いクロック周波数が可能になりました。
最も単純なプロセッサはスカラープロセッサです。スカラープロセッサが実行する各命令は、通常、一度に1つまたは2つのデータ項目を操作します。対照的に、ベクトルプロセッサが実行する各命令は、多数のデータ項目を同時に処理します。これは、スカラー演算とベクトル演算の違いに例えることができます。スーパースカラープロセッサは、この2つの特徴を併せ持っています。各命令は1つのデータ項目を処理しますが、各CPU内には複数の実行ユニットがあるため、複数の命令が別々のデータ項目を同時に処理できます。
スーパースカラCPUの設計では、命令ディスパッチャの精度向上と、複数の実行ユニットを常に稼働させ続けることに重点を置いています。ユニット数の増加に伴い、この点はますます重要になってきています。初期のスーパースカラCPUは2つのALUと1つのFPUを備えていましたが、 PowerPC 970などの後期の設計では、4つのALU、2つのFPU、および2つのSIMDユニットが搭載されています。ディスパッチャがこれらのユニットすべてに命令を効率的に供給できない場合、システムのパフォーマンスは、よりシンプルで安価な設計と比べて向上することはありません。
スーパースカラプロセッサは通常、マシンサイクルあたり1命令を超える実行速度を維持します。しかし、複数の命令を同時に処理するだけでは、そのアーキテクチャはスーパースカラとは言えません。パイプライン処理、マルチプロセッサ、マルチコアといったアーキテクチャも同様の速度を実現していますが、その方法は異なります。
スーパースカラCPUでは、ディスパッチャがメモリから命令を読み込み、並列実行可能な命令を決定し、それぞれを単一のCPU内部にある複数の実行ユニットのいずれかにディスパッチします。したがって、スーパースカラプロセッサは、それぞれが単一の命令スレッドからの命令を同時に処理する複数の並列パイプラインを備えていると考えることができます。
最新のスーパースカラCPUのほとんどは、パイプラインの停止を回避し、並列実行を向上させるために、命令の順序を並べ替えるロジックも備えている。
スーパースカラ技術による性能向上は、主に以下の3つの領域によって制限される。
既存のバイナリ実行可能プログラムには、様々なレベルの並列処理能力が内在しています。命令同士が相互に依存しておらず、同時に実行できる場合もあれば、命令同士が相互依存し、一方の命令が他方の命令のリソースまたは結果に影響を与える場合もあります。a = b + c; d = e + f結果が他の計算に依存しないため、命令を並列実行できます。ただし、a = b + c; b = e + f命令がユニットを通過する際の完了順序によっては、並列実行できない場合もあります。
命令ストリームには命令間の依存関係が含まれていない場合でも、スーパースカラCPUはそれでもその可能性をチェックする必要がある。なぜなら、そうでないという保証はなく、依存関係を検出できなかった場合は誤った結果が生じるからである。
半導体プロセスがどれほど高度化しても、スイッチング速度がどれほど速くても、同時にディスパッチできる命令数には実際的な限界があります。プロセスの進歩により実行ユニット(ALUなど)の数はますます増加しますが、命令間の依存関係をチェックする負担は急速に増大し、一部の依存関係を軽減するためのレジスタリネーミング回路の複雑さも増します。これらの消費電力、複雑さ、ゲート遅延コストが総合的に、達成可能なスーパースカラの高速化を制限します。
しかし、従来型のスーパースカラCPU上で無限に高速な依存関係チェックロジックが実装されたとしても、命令ストリーム自体に多くの依存関係が存在する場合、速度向上は制限されることになる。したがって、コードストリームにおける本質的な並列性の度合いが、第二の制限要因となる。
これらの制約が総合的に、超長命令語(VLIW)、明示的並列命令コンピューティング(EPIC)、同時マルチスレッド(SMT)、マルチコアコンピューティングなどの代替アーキテクチャ変更の研究を促している。
VLIWでは、実行時にハードウェアロジックによる依存関係チェックという煩雑な作業が排除され、コンパイラに委任されます。明示的並列命令計算(EPIC)は、VLIWにキャッシュプリフェッチ命令を追加したようなものです。
同時マルチスレッド(SMT)は、スーパースカラプロセッサの全体的な効率を向上させるための技術です。SMTは、複数の独立した実行スレッドを可能にし、最新のプロセッサアーキテクチャが提供するリソースをより有効に活用します。スレッドが独立しているということは、あるスレッドの命令が別のスレッドの命令と順不同で、あるいは並列に実行される可能性があることを意味します。また、例えば分岐命令によって、ある独立したスレッドが別のスレッドのコードストリームにパイプラインバブルを発生させることもありません。
スーパースカラプロセッサは、複数の実行ユニットがプロセッサ全体ではないという点で、マルチコアプロセッサとは異なります。単一のプロセッサは、 ALU、整数乗算器、整数シフト器、FPUなどのより細分化された実行ユニットで構成されています。各実行ユニットには複数のバージョンが存在する場合があり、これにより多数の命令を並列に実行できます。これは、複数のスレッドからの命令を同時処理するマルチコアプロセッサとは異なります。マルチコアプロセッサでは、処理ユニット(「コア」と呼ばれる)ごとに1つのスレッドが実行されます。また、パイプラインプロセッサとも異なります。パイプラインプロセッサでは、複数の命令がアセンブリライン方式で同時にさまざまな実行段階にあることができます。
様々な代替技術は相互に排他的なものではなく、単一のプロセッサ内で組み合わせることが可能であり、実際によく組み合わせられている。したがって、各コアが複数の並列パイプラインを持つ独立したプロセッサであり、各パイプラインがスーパースカラであるマルチコアCPUが実現可能である。一部のプロセッサはベクトル処理機能も備えている。