Core2DuoのようなシングルソケットのCPUでシングルスレッドの処理をwindows XPで動かすと、処理が各コアに分散されるのはなぜでしょうか?

例えばDual OpteronのPCで、NUMAによりメモリ帯域を稼ぐために各コアに分散されるのならわかるのですが、シングルソケットのCore2DuoやCore2Quadでも分散される理由がわかりません。
コア間の通信によるオーバーヘッドが付くだけのような気がするのですが・・・何か私の勘違いなんでしょうか?
わかる方理由をお教えください。

回答の条件
  • 1人2回まで
  • 登録:2008/07/21 23:55:13
  • 終了:2008/07/27 13:22:05

回答(2件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012008/07/22 09:23:36

ポイント35pt

パイプラインやスーパースカラといった処理効率向上の手段や

キャッシュ増大によるボトルネックの吸収などなど・・・

あとはひたすら動作周波数をあげるだけという状態になっていた。


動作周波数をあげるためには消費電力の増大と

それに伴う放熱量の増大などコストパフォーマンス的においしくない。


動作周波数をあげることよりもコアを増やして仕事を分散させることによって

結果として早い仕事をさせるほうが賢いのではないか?


コアが2つになったからと言っても処理速度が2倍になるわけではないが

(おっしゃるように分散させるための処理が必要になるために)

同じ時間で処理させるにあたっては動作周波数を落とす事が可能になる。


動作周波数をあげるのは苦しくても落とすのは・・・。

動作周波数を下げるということは消費電力も落とす事が出来て

放熱量も減るので冷却も楽・・・。

また、使っていない側のコアの電力制御なども加えれば

コストパフォーマンスはさらにあがる。


コアが4つになれば歩留まりの心配もでてくるけどAMDのように

4コアを作って、4コアとして出荷する分と

一部を殺して3コアとして出荷するといった商売上手(?)な方法も・・・。


アバウトに表現してしまうと大型1台よりも小型車数台でってところですね。

id:myamanari

うーん、それって今のCPUがメニイコアへ向かっているということの一般的な説明だと思うのですが、質問の趣旨が伝わらなかったかもしれません。

具体例を挙げてみます。

例えば、Core2DuoでSuperpiを一つ走らせると、片方のコアだけで処理するのではなく一部は別のコアで処理されています。(少なくとも当方の環境では。)

トータルのCPU占有率は、デュアルコアなので50%となります。

なぜこのような処理になっているのか? ということが疑問で質問した次第です。

2008/07/23 00:06:42
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/07/22 10:04:26

ポイント35pt

以下の用語を理解しているものとして回答します。

  • スレッド(シングルスレッド/マルチスレッド)
  • タスク(シングルタスク/マルチタスク)
  • デュアルコア(マルチコア)/デュアルプロセッサ(マルチプロセッサ)

完全にシングルスレッドの処理を、完全にシングルタスクで処理するとしたら、デュアルコアの効果はあらわれません。同様に、デュアルプロセッサの効果も出ません。同時に1つのコアに対して1つのスレッドしか走らせることができないためです。

ただ実際には、WindowsやLinuxといったOSはマルチタスクで動いている(システム監視などのタスクをバックエンドで動かしている)ため、デュアルコア/デュアルプロセッサの効果が出てこないということは無いでしょう。


次にデュアルコアとデュアルプロセッサの違いですが、たしかに Dual Opteron であればメモリ帯域を稼ぐことはできます。一方、Intel系MPUは、デュアルコアでもデュアルプロセッサでも1つのメモリコントローラを共有するため、デュアルプロセッサだからといってメモリ帯域を稼ぐことはできません。

これは、デュアルコアとデュアルプロセッサの違いというより、MPUメーカーの設計思想の違いでしょう。

したがって、デュアルコアとデュアルプロセッサの機能的な違いというものは、意識できるほどのものではないと思います。


後半、主観的な記述になってしまいました。他の方のご意見も参考にしてください。

id:myamanari

それぞれの用語は知っているつもりが調べてみると大して理解していないなぁということに改めて気付きました。

ありがとうございます。

2008/07/24 01:11:54
  • id:kn1967
    本回答のほうは取り違えていた様で申し訳ないです。

    http://support.microsoft.com//kb/896256
    直接の説明ではありませんが上記ページには
    >>
    デュアルコア構成を含むマルチプロセッサ システムでシングルスレッドのワークロードを実行すると、
    利用可能な複数の CPU コア間でワークロードが実行されることがあります。
    この動作は、利用可能な複数の CPU リソースに対して処理をスケジュールするために Windows で採用されている方式によるものです。
    <<
    というような記述があります。
    WindowsXPでは動かせる限りのコア全てが同時に働き出すという仕組みにしてあるがゆえに
    初期段階では並列動作するというような無駄が起きている模様。
    処理が進めば徐々にパワーバランスが調整されて1コアでの動作になるが
    それまでに終わるような処理ならば・・・なんともまぁ、無駄な設計な事・・・。

    結論としては設計思想が・・・という事しか判らなくて重ね重ね申し訳無いです。
  • id:myamanari
    いえいえ、大変参考になります。
    もっと理解するためには、やはりOSの理解が不可欠ですね。
    ありがとうございます。
  • id:matsu-boolean
     自分も何で1つのコアで処理が実行されないんだろうと、常々疑問に思っていたのですが…。

     ひょっとしたら、複数のコアが同等の性能を持っていない(同等の性能を発揮できない)ケースを想定しているのかなあとか夢想していました。一つのコアのみでシングルスレッドを動作させると、たまたまそのコアが他のコアより「遅い」場合、ちょっと損してしまいますよね。IntelのHTとかだと場合によってはそういうことも起こったり?とか。

     ちなみに実験ですが、Intel Core2Quad Q9300 で、Super PIのプロセス(スレッド)を1コアのみに関連付けた場合と4つのコアに関連付けた場合で測定してみました。(Windows Vista SP1 64bit版)

    結果は4回ずつの実行で、
     1コアのみに関連付け:1分50秒が2回、1分51秒が2回
     4コアに関連付け  :1分51秒が4回

    気にするほどではないということかなと、この程度なら誤差かもしれませんし。ただ不思議だったのが、4コアに関連付けて実行したとき、各コアの負荷に明らかな偏りがあったことです。実行ごとにも偏りは異なったのですが…なぞです。
  • id:myamanari
    Pen4にHT機能が付いたとき、Win2kではHTをHTとして(遅いコアとして)認識できないが、WinXPならできる、とMSが宣伝していた気がします。一つのスレッドを複数のコアに分けられるというのは、そういう目的もあるんでしょうね。ただ、OSが実際どういう仕組みでそれを実装し制御しているのかを理解しないと、やはり謎な挙動ですね。私はOSの仕組みとか基礎からまともに勉強したことがなく、いい機会なのでまずはWindows Internalsを読んで勉強してみようかと思っております。

    1コアでも4コアでもほとんど変わらないんですね・・・興味深い結果をどうもありがとうございます。

この質問への反応(ブックマークコメント)

トラックバック

  • マルチコアCPUとWindows M. Yamanari's Blog 2008-07-26 02:37:06
    結局、コメントのリンク先の記述にあるように、windowsの仕様ってことだそうですが・・・。これがパフォーマンス低下にはそれほど繋がらないということなのか、単にWindows XPではマル
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません