例えばDual OpteronのPCで、NUMAによりメモリ帯域を稼ぐために各コアに分散されるのならわかるのですが、シングルソケットのCore2DuoやCore2Quadでも分散される理由がわかりません。
コア間の通信によるオーバーヘッドが付くだけのような気がするのですが・・・何か私の勘違いなんでしょうか?
わかる方理由をお教えください。
パイプラインやスーパースカラといった処理効率向上の手段や
キャッシュ増大によるボトルネックの吸収などなど・・・
あとはひたすら動作周波数をあげるだけという状態になっていた。
動作周波数をあげるためには消費電力の増大と
それに伴う放熱量の増大などコストパフォーマンス的においしくない。
動作周波数をあげることよりもコアを増やして仕事を分散させることによって
結果として早い仕事をさせるほうが賢いのではないか?
コアが2つになったからと言っても処理速度が2倍になるわけではないが
(おっしゃるように分散させるための処理が必要になるために)
同じ時間で処理させるにあたっては動作周波数を落とす事が可能になる。
動作周波数をあげるのは苦しくても落とすのは・・・。
動作周波数を下げるということは消費電力も落とす事が出来て
放熱量も減るので冷却も楽・・・。
また、使っていない側のコアの電力制御なども加えれば
コストパフォーマンスはさらにあがる。
コアが4つになれば歩留まりの心配もでてくるけどAMDのように
4コアを作って、4コアとして出荷する分と
一部を殺して3コアとして出荷するといった商売上手(?)な方法も・・・。
アバウトに表現してしまうと大型1台よりも小型車数台でってところですね。
以下の用語を理解しているものとして回答します。
完全にシングルスレッドの処理を、完全にシングルタスクで処理するとしたら、デュアルコアの効果はあらわれません。同様に、デュアルプロセッサの効果も出ません。同時に1つのコアに対して1つのスレッドしか走らせることができないためです。
ただ実際には、WindowsやLinuxといったOSはマルチタスクで動いている(システム監視などのタスクをバックエンドで動かしている)ため、デュアルコア/デュアルプロセッサの効果が出てこないということは無いでしょう。
次にデュアルコアとデュアルプロセッサの違いですが、たしかに Dual Opteron であればメモリ帯域を稼ぐことはできます。一方、Intel系MPUは、デュアルコアでもデュアルプロセッサでも1つのメモリコントローラを共有するため、デュアルプロセッサだからといってメモリ帯域を稼ぐことはできません。
これは、デュアルコアとデュアルプロセッサの違いというより、MPUメーカーの設計思想の違いでしょう。
したがって、デュアルコアとデュアルプロセッサの機能的な違いというものは、意識できるほどのものではないと思います。
後半、主観的な記述になってしまいました。他の方のご意見も参考にしてください。
それぞれの用語は知っているつもりが調べてみると大して理解していないなぁということに改めて気付きました。
ありがとうございます。
うーん、それって今のCPUがメニイコアへ向かっているということの一般的な説明だと思うのですが、質問の趣旨が伝わらなかったかもしれません。
具体例を挙げてみます。
例えば、Core2DuoでSuperpiを一つ走らせると、片方のコアだけで処理するのではなく一部は別のコアで処理されています。(少なくとも当方の環境では。)
トータルのCPU占有率は、デュアルコアなので50%となります。
なぜこのような処理になっているのか? ということが疑問で質問した次第です。