スーパースカラーのソースを表示
←
スーパースカラー
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[画像:Superscalarpipeline.png|thumb|300px|スーパースカラーの[[命令パイプライン|パイプライン]]概念図]] [[画像:Processor_board_cray-2_hg.jpg|thumb|CRAY T3e 並列コンピュータのプロセッサ基板。4個のスーパースカラー [[DEC Alpha|Alpha]] プロセッサを搭載]] '''スーパースカラー'''(''superscalar'',スーパースケーラ)とは、[[プロセッサ]]の[[マイクロアーキテクチャ]]における用語で、複数の命令を同時にフェッチし、複数の同種のあるいは異種の[[実行ユニット]]を[[並列計算|並列に動作]]させ<ref>"super-scalar organization in which multiple execution units operate essentially independently." AMD. (2020). ''Software Optimization Guide for AMD EPYC™ 7003 Processors''. rev. 3.00.</ref>、プログラムの持つ[[命令レベルの並列性]]を利用して性能の向上を図るアーキテクチャである。 ==概要== スーパースカラプロセッサは、単一のプロセッサ内で命令レベルの並列性と呼ばれる、ある一種の並列処理の形式を実装するCPUである。クロックサイクル毎に最大で1つの命令しか実行できないスカラプロセッサとは対照的に、スーパースカラプロセッサは、プロセッサ上の複数の異なる実行ユニットに複数の命令を同時にディスパッチすることにより、1クロックサイクル中に複数の命令を実行できる。したがって、既定のクロックレートで(普通)可能なスループットよりも多くのスループット(単位時間のうちに実行できる命令の数)が可能になる。各実行ユニットは、個別のプロセッサ(あるいはマルチコアプロセッサの場合個別のコア)ではなく、単一CPU内の算術論理演算ユニットなどのような実行リソースである。 == 歴史 == [[1965年]]の[[シーモア・クレイ]]が設計した[[CDC 6600]]が、最初のスーパースカラー設計のマシンと言われている。 商用のシングルチップのスーパースカラー[[マイクロプロセッサ]]は、[[Intel i960]]CA(1988年)と [[AMD 29000]]シリーズの 29050 (1990年)が最初である。[[RISC]]型CPUの設計ではコアが単純であったため、当時の設計ルールの細かさでもワンチップに複数の実行ユニット([[演算論理装置|ALU]]など)を搭載でき、スーパースカラーを実現できたのである。このため、1980年代から1990年代にかけての時期に RISC が [[CISC]] に対して性能的に優位に立った。一部の低消費電力の[[組み込みシステム|組み込み]]向けプロセッサを除いて、1998年以降に開発された汎用プロセッサは基本的に全てスーパースカラーである。 現在[[パーソナルコンピュータ]]で[[デファクトスタンダード]]となっている[[x86]]アーキテクチャでは、1993年の[[Pentium]]で2実行ユニットのインオーダ実行型のスーパースカラーを実現し、その後の"[[P6マイクロアーキテクチャ|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つによって制限される。 # 命令列の本質的な並列性の度合い。つまり、[[命令レベルの並列性]]の制約。 # 命令間の依存関係チェックロジックと分配機構が命令選択にかけられる時間の制約と機構自体の複雑さ。 既存のバイナリの実行プログラムの持つ並列性にはばらつきがある。ものによっては命令間の依存が全く無く、常に並列に実行可能なこともある。逆に依存関係が多く、並列性がほとんどない場合もある。例えば、<code>a = b + c; d = e + f</code> という命令列は依存関係がないため、並列に実行可能である。しかし、<code>a = b + c; b = e + f</code> という命令列は依存関係があるため、並列に実行することはできない。 同時に実行可能な命令数が増えると、依存関係をチェックするコストも急激に増大する。また、そのチェックをCPUのクロックに合わせて実行時に行わなければならないという事実が事態をさらに悪化させる。研究によれば、命令の種類を ''n''、同時実行可能な命令数を ''k'' としたとき、依存関係チェックの回路規模は <math>n^k</math>、時間は <math>k^2 \log n</math> かかるとされている。数学的には、この問題は[[順列]]における[[組合せ数学]]の問題である。 たとえ命令列に依存関係がないとしても、スーパースカラー型CPUは常に依存関係のチェックを行う。さもなくば、依存関係の検出に失敗し、不正な結果を得ることになる。 半導体プロセス技術がどれだけ進化して、スイッチ速度が高速化しても、以上のような問題によって同時に実行可能な実際の命令数には限界が生じる。プロセス技術の進化によって実行ユニット(ALUなど)の数が増えても、依存関係チェックのための論理回路の規模の増大が急激であるため、実現可能な規模は制限される。また、たとえ依存関係チェックを無限に素早く実行できたとしても、命令列の本質的な並列性によって性能向上に限界が生じる。 == 類似技法 == このような限界があることから、他の性能向上技法の探求が行われた。例えば、[[VLIW]]、[[EPICアーキテクチャ]]、[[同時マルチスレッディング]] (SMT)、[[マルチコア]]などである。 VLIW では、依存関係チェックを実行時にハードウェアで行うのではなく、[[コンパイラ]]で行う。スーパースカラー設計では数ナノ秒で行わなければならないが、コンパイラではその制限はない。また、マルチコアと[[スレッド (コンピュータ)|マルチスレッド・コンパイラ]]の組合せでも同様である。[[EPICアーキテクチャ]]も VLIW に似ている。 [[同時マルチスレッディング]] (SMT) はスーパースカラー型CPUの全体効率を向上させる技法である。SMT では複数の独立したスレッドを同時に実行することで、実行ユニットの稼働効率を向上させる。 マルチコアCPUは、個々のコアが1つのスレッドを実行する独立したプロセッサとなっている(通常、キャッシュを共有している)。 これらの技法は排他的なものではない。従って、マルチコアCPUの各コアがスーパースカラーであっても構わない。 == 脚注 == {{reflist}} == 関連項目 == *[[アウト・オブ・オーダー実行]] *[[投機的実行]]/[[積極的実行]] *[[EPICアーキテクチャ]] *[[スーパーパイプライン]] *[[同時マルチスレッディング]] *[[パイプライン処理]] == 参考文献 == {{参照方法|date=2023年1月7日 (土) 13:22 (UTC)|section=1}} * マイク・ジョンソン著、村上和彰監訳、『スーパスカラ・プロセッサ- マイクロプロセッサ設計における定量的アプローチ -』、日経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 == 外部リンク == * [http://www.cs.clemson.edu/~mark/eager.html Eager Execution / Dual Path / Multiple Path] by Mark Smotherman {{CPU technologies}} {{並列コンピューティング}} {{DEFAULTSORT:すうはあすけえら}} [[Category:スーパースカラー・マイクロプロセッサ|*]] [[Category:コンピュータアーキテクチャ]] [[Category:CPU]] [[Category:並列コンピューティング]]
このページで使用されているテンプレート:
テンプレート:CPU technologies
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:並列コンピューティング
(
ソースを閲覧
)
テンプレート:参照方法
(
ソースを閲覧
)
スーパースカラー
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報