• 締切済み

マルチコアとスーパースカラの違いはコア数だけ?

質問させてください。 CPUの高速化の技術として、マルチコアとスーパースカラというものがあります。 どちらも並列処理を実現するもので、 マルチコアはCPUのコアを複数配置する方法。 スーパースカラは1つのコアの中に処理系統を複数配置する方法。 というのはわかるのですが、それって結局同じことではないかと混乱しています。 CPUのコアの中には、演算装置、制御装置、レジスタなどがあると認識していますが、例えばスーパースカラの場合、その中のどれか一つが共有されているとか、そういうことでしょうか? ただその場合、共有するところは並列作業が実現できなくなると思うのですが・・・。 どなたかご存知でしたらお教えください。 以上よろしくお願いします。

  • ryu-e
  • お礼率72% (202/278)

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.5

スーパースカラは並列処理を実現する技術ではなく、内部的な並列実行によってシングルスレッドの処理速度を上げる技術である。命令列が潜在的に持つ並列性を越えることはできないので、幾ら演算装置を用意しても性能の向上には限界がある。 スーパースカラでは、(内部的には複数化される場合もあるが)アプリケーションから見えるレジスタセットはCPU一つ分だけ。内部的には並列実行しても最終的には直列実行したように振る舞うため、整合性を取るために制御装置が非常に複雑化する。 アウトオブオーダー実行はこの延長線上の技術になる。アウトオブオーダー実行ではメモリへの書き込み順序が変わってしまうような場合もあるが、基本的にはCPU外部からはCPU命令列をその順番に実行したように見えるように調整する。 なお、ハイパースレッディングはシングルコアの中にレジスタセットを複数配置することでスーパースカラで使いきれない演算装置を有効活用しようとする技術になる。 マルチコアは、一つのCPUチップの中にCPUを複数配置して並列性能を高める技術で、並行して実行したい処理が多数あれば性能が上がるが、シングルスレッド用プログラムしかないとマルチコアにしても性能は上がらない。多くの場合、それぞれのCPUコアの中ではスーパースカラ技術も使われている。

  • ahoo_ok
  • ベストアンサー率31% (30/95)
回答No.4

>単体のスーパースカラ以上の性能を出そうとして出てきたのがマルチコアです。 それインテルのハイパースレッティングに代表されるようなハードウェアマルチスレッディングの方。 マルチコアはマルチプロセッサの延長線の方の技術。

  • ybnormal
  • ベストアンサー率50% (220/437)
回答No.3

>スーパースカラは1つのコアの中に処理系統を複数配置する方法。 よくこういう解釈を見かけますが、これは正しくありません。スーパースカラの定義は、複数命令を同時発行できるというものです。ですから、スーパースカラでありながら処理系統が一つしかないというCPUも理屈の上ではあり得ますが、複数命令を同時発行しておいてその先の演算器やレジスタのポート数が一系統しかないというのでは、リザーベーションステーションに命令がどんどんたまっていくばかりで性能がでません。それでは複数命令発行にする意味がないため、結果的に複数の演算器をもちパイプラインも複数持たせて、並列処理をできるようにしているわけです。 > 例えばスーパースカラの場合、その中のどれか一つが共有されているとか、そういうことでしょうか? ふつうは、複数のパイプラインがそれぞれ異なるリソース(演算器、レジスタのポート、バスなど)を使うように制御しますから、それをできるだけの演算器の数やバスの本数が必要になります。場合によってはリソースを共有する必要があったりしますが、基本的にはできるだけ共有しないように制御します。 マルチコアとスーパースカラで同じくらいの並列性を持たせようとすると、理屈の上ではチップ上の演算器の全数は同じくらいになりますから、たしかにあなたのいうとおりマルチコアでもスーパースカラでも大局的には同じじゃないのというのは、その通りです。しかしスーパースカラでマルチコアと同じくらいの並列性を持たせようとするのは現実的には不可能でしょう。 たとえばコアが16個載っているチップがあって、それぞれのコアのパイプラインは一本だけとします。これと似たようなことをスーパースカラーでやろうとすると、16命令同時発行にすることになります。16命令同時発行となるとパイプラインも16本ということになりますが、スーパスカラでは命令間の依存はすべてハードウェアで解消することになりますから、これをやるにはとんでもない物量の論理が必要で(巨大なリザーベーションステーション、大量のレジスタポート、効率の良い命令ディスパッチのアルゴリズムなど)、また物量が増えれば制御も複雑になり、クロック周波数を上げることが難しくなります。スーパースカラでは、性能とトランジスタの物量を天秤にかけると、4命令から6命令同時発行くらいが落としどころでそれ以上になるとかける物量に対する性能向上の割があいません。そこで、単体のスーパースカラ以上の性能を出そうとして出てきたのがマルチコアです。

  • SPROCKETER
  • ベストアンサー率26% (2009/7491)
回答No.2

 検索でマルチコアとスーパースカラを調べれば詳しく書かれているはずです。以下のリンクを参照すればわかると思います。  マルチコア:http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B3%E3%82%A2  スーパースカラ:http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%82%B9%E3%82%AB%E3%83%A9%E3%83%BC  簡単に言いますと、マルチコアは複数のCPUを同時に並列実行して処理を高速化する技術です。複数のソフトウェアを同時に実行するなどで威力を発揮します。  それに対して、スーパースカラはCPUの実行プロセスを細分化して並列処理出来る部分を並列化した高速化手法です。複数のパイプラインを使用して、逐次プロセスで同時並列実行しても問題が生じないプロセスを並列化して実行します。  つまり、一つの命令を実行中に、次の命令の実行を並行しておこなうのがスーパースカラと考えて良いでしょう。複数の命令を細分化して並列実行して行けば、先の命令で演算している間に、次の命令のデータを読み込めるなど、時間の無駄が省けるからです。スーパースカラでは実行出来るCPUは1つだけで、実行出来るソフトも一つだけです。  マルチコアは複数の処理を複数のCPUを使用して処理する方法ですが、スーパースカラは1つのCPUでデータの読み込み、演算処理、データの書き込みなどの過程を分割化して、それぞれの処理を並行しておこなうことで、先の命令を実行中に、次の命令の一部を実行出来るというもので、命令実行時間の無駄を省くのが目的です。  つまり、データ読み込み装置、演算処理装置、データ書き込み装置があるとすれば、以下のように実行するのがスーパースカラです。  読み込み装置:命令3実行中、命令2休止中、命令1休止中  演算処理装置:命令3休止中、命令2実行中、命令1休止中  書き込み装置:命令3休止中、命令2休止中、命令1実行中  このようにすると、データ読み込み装置。演算処理装置、データ書き込み装置の3つが、どれも実行中になって遊んでいる装置が無くなります。何もしていない装置が無くなるようにしたのが、スーパースカラです。

ryu-e
質問者

補足

詳しい説明ありがとうございます。 ちなみにこれはパプラインにも当てはまると思うのですが、パイプラインと比べるとどう異なっているのでしょうか? 質問ばかりで申し訳ありません・・・。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どのくらい調べた?

関連するQ&A

  • linuxマルチコアCPU環境においてコアの使われ方について

    linuxマルチコアCPU環境においてコアの使われ方について マルチコアCPUがLinxu環境において(その他Linuxでないプラットフォームにおいても)、 実際に搭載されているCPUのコア数が正常にOSに認識されているというだけではなく、 各プロセスの処理に対して複数のコアが適宜効果的に利用されているのかどうか?? ということが知りたく、添付画像に私の疑問点をまとめてみました。 ■ポイント ++++++++++++++++++++++++++++++++++++++++++++++++ 投稿した画像の色がついている4つの矢印は1つ1つそれぞれがDB接続クライアントがmysqlに投げているSQL文(クエリ)をイメージしています。 Mysqlを起動させているlinux kernelは、このクエリを受け取り自身が管理しているCPUがマルチコアであった場合、どのようなロジックで複数のコアの中から4つのクエリを処理させるCPUコアを選択しているのでしょうか? 例)kernelが未使用のCPUコアを都度選んで1クエリの処理を担当するよう制御している ⇒コアによって処理する数は異なる 例)kernelが4つのクエリに対して4つのCPUコアをラウンドロビン分散させて処理させている。 ⇒コアが処理する数は均等になる ++++++++++++++++++++++++++++++++++++++++++++++++ どなたか、私の疑問についてご存知でしたらご教授いただけますでしょうか。 よろしくお願します。

  • マルチコアCPUはコア数が多ければ多い程有利なのではないのですか?

    最近マルチコアのCPUをよく見かけます、 それで、例えば、Core2DuoとCore2Quadを比べた質問、についてですが、 この手の質問では、Quadはマルチスレッド対応アプリを使わなければ Duoと大きな違い感じられないという回答がよく見られます。 又、むしろ消費電力が大きくなり2コアに比べクロック数も低いので 対応アプリを使わなければ逆に4コアは不利であるという意見もあります。 しかしどうも疑問を感じます。 上記の内容はあくまで一つのアプリを動作させた場合の事を想定した物なのでは? ごく日常での使用ではコア数が多い方が有利なのではないですか? 私の考えとしては、まずPCを扱う際一つのアプリのみを起動しPCを使用する人はまずいないという事から、 使用中に他のアプリや別のプログラムを実行するという場合も大いに考えられますし、 実際にタスクマネージャなどを見てもOSを起動起動するだけでかなりのプロセスが実行されいくらかCPUを食っています。 するとその様なマルチコア向けのアプリケーションを使用せずとも多数のシングルスレッドのプロセス実行と共に 複数のスレッドが発生し、結果例え速度的な変化は感じられずともマルチコアの恩恵を受ける事が出来るのではないか? と、私は思うのですがこれは間違いなのでしょうか。 それとも実際は上記の内容は間違いでそう都合良くは出来ていない物なのでしょうか? 長くなってしまいましたが回答いただけると幸いです、よろしくお願いします。

  • マルチコアCPUにおける周波数とは

    お世話になります。 マルチコアCPUのスペックに記載されている周波数はコア1つに対するものか、すべてのコアの合計値なのかどちらでしょうか? 例えば1つだけのタスクにCPUを100%した場合、 2コア1GHzのCPUと同等の処理速度を示すのは1コア2GHzか1コア1GHzどちらでしょうか? もしくはどちらも間違っているのでしょうか? どなたかご教示お願いします。

  • CPUのコアとは?

    デュアルコアCPUとかよく聞きますが、CPUのコアとは何を指すのでしょうか? CPUの構造でよく、 ・ALU ・レジスタ ・キャッシュ 等の言葉が出てきますが、コアとはALUのことですか? で、デュアルコアCPUはALUが2つで、それ以外のキャッシュ等が1つという構造、ということですか? それとも、上に挙げた単語等を合わせてコアというのでしょうか?(この場合、コア以外の部分とは何でしょうか?) (ちょっと話がずれますが) また、ALU等の言葉がありますが、これは本当にそのような物理的装置があるのでしょうか? それとも、それは概念的なもので、実際は何かべつのもので論理的に構築されてるだけ、ということなのでしょうか?

  • Windows7 タスクのコア分けは可能ですか?

    初心者です。 AMDの6コアCPUを使っているのですが、 ゲームをしているときにタスクマネージャーで確認すると 1つのコアだけ100%で他のコアは使用されてません 1つコアだけに付加が集中して遅いので、マルチコア対応ではない プログラムを複数のコアに分けることは可能ですか? 難しい質問ですが、よろしくお願いします。

  • マルチコアCPUをシングル化

    表題の通り、マルチコアCPUを仮想的にシングルコアに統合して扱える様にするソフトウェアを探しています。 有料ソフトでもご存知であれば情報を教えてください。 求める要件 1.統合した単一コアは、CPU本来の単一コア性能の1.5倍以上であること →例えば2.6GHz*4のCPUから2コアを統合した場合は、4GHz以上の性能を持つ単一コアになる。 2.統合した単一コアに向ける処理の順序が狂わないこと。 →例えばABCDという命令を順番に発行したとして、その結果がACBDの様にならないこと。 理屈的に難しい事は知っておりますが、もし存在していれば教えてください。

  • マルチコアを有効利用するプログラミングについて

    マルチコアを有効に利用するプログラムを作りたいと考えています。 マルチコア、マルチスレッドが、よく理解できていないところもありますが、ご容赦お願いいたします。 OSはWindows XP、開発環境はVisual C++ 6.0です。 1.マルチスレッド対応すれば、マルチコアを有効利用できるのでしょうか?(複数のコアの使用率を均等に上手く割り振ってくれるのでしょうか) 2.Windows APIにSetThreadAffinityMask()、SetThreadIdealProcessor()なるAPIがあるのですが、これらを使用しないと、割り振れないものなのでしょうか? 3.少し調べたのですが、OpenMP、MPIなる技術があるようなのですが、このような特殊な処理を加えないとダメなのでしょうか。 個人的には、マルチスレッド対応さえすれば、あとはOS(Windows)が上手くやってくれれば、、、と思っているのですが。

  • Illustratorとframemakerは、マルチコアやマルチCPUに対応している?

    Windows版のIllustratorとframemakerは、マルチコアやマルチCPUに対応しているのでしょうか。つまり、並列処理を行えるプログラミングになっているのでしょうか。 http://www.adobe.com/jp/support/kb/ts/234/ts_234613_ja-jp.html#anc_b1 の「B. ハードウェア構成の最適化」の項を見ると 「マルチプロセッサシステムの使用(中略)など(中略)によっても Illustrator のパフォーマンスは向上します。」 とありますが、並列処理を行えるとは書いてありません。 framemakerも同様です。 Illustratorとframemakerは、マルチコアやマルチCPUに対応しているのでしょうか。

  • クラスターマシンとは?

    近くクラスタマシンのスパコンを使う予定です。 クラスタマシンてなんですか? 複数のサーバからなるというのはいいです。 スパコンは、ベクトル機とスカラ機がありますが、最近の主流はスカラ機です。 多くのノードにわかれ、各ノードはCPUコアと専用キャッシュとノード内での 共有メモリ(と専用メモリ)からなります。各ノードはOSも持っています。 各ノードは他のノードと高速のネットワークでつながっています。特に高速のネットワークで つながっている範囲はスーパーノードなんていうようです。 クラスタマシンもおそらく、各サーバに複数のCPUコアと専用キャッシュ、共有メモリ からなっていて、各サーバは高速のネットワークでつながっていると思われます。 なのでスカラ機は、複数のノードからなるのでクラスタマシンのようにも 思うのですが、どうもスカラ機とクラスタマシンは違うもののようです。 スカラ機でもクラスタマシンでないものもあるのでしょうか。 それはどのようなシステムでしょうか。 複数のノードから構成される、と、複数のサーバから構成される、の違いが よくわかりません。 詳しい方教えてください。

  • マルチコアCPUでの複数ソフト同時使用について

    マルチコアCPUでの複数ソフト同時使用について質問させてください。 最近のCPUはマルチコアのものばかりなので買い替えを検討中なのですが。 マルチコアを使いにはマルチコア対応のソフトが無ければ、シングルコアとしてしか作動しないと聞きました。 corei7のPCでシングルコアのソフトを起動した場合8スレッド中の1スレッドが使用された状態になるわけですよね? するとそのシングルコアのソフトを8個同時に起動しても処理速度は変わらないということでいいんでしょうか? メモリーの消費率などもあると思いまずが、教えてください。