• 締切済み

マルチコアCPUのコア割り当て

マルチコアCPUのコア割り当て 基本的な質問ですが教えてください。 マルチコアCPUで実行コアの割り当てはどのように 振り分けているのでしょうか? (ハードは正常に動作している条件で) 勝手な想定では、 1)OS(ドライバ)が効率よく、振り分けを行う。 2)APLのコーディングにより明示的に振り分ける。 3)OSもAPLも特に意識なく、CPUが自立的に振り分ける。 のいずれかと思っていますが、実際はどのような動作を しているのでしょうか?

みんなの回答

  • parts
  • ベストアンサー率62% (6364/10149)
回答No.1

SMP(対象型マルチプロセッシング)で検索されれば答えは出てくるでしょうが、CPUの基本優先度とリソース割振がアプリケーション側で設定されていない場合は、OSカーネルがアプリケーション管理の過程で全てのリソース(CPUに限らず)に関するロードバランスを制御します。 割り振りの効率は、OSのロードバランス制御機構の精度(能力)によって変わります。 尚、SMPを利用するにはBIOSなどのハードウェアプラットフォーム側にマイクロコード(ファームウェア)が、整備されている必要があります。(すでにここ15年の環境ではSMP準拠のハードウェアプラットフォームになっています) ちなみに、SMPとは反対の機構を持つのが、ASMP(非対称マルチプロセッシング)と呼ばれる物です。この機構では予めCPUに役割を与えその役割専用にプロセッサを利用します。

yama3939
質問者

補足

ご回答ありがとうございました。 内容は理解できました。 >CPUの基本優先度とリソース割振が >アプリケーション側で設定されて >いない場合は.... ということは、アプリケーション側から意図的に 割り振ることができるのですね? それは、マルチコアCPUの場合のみに 可能なのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • 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コアをラウンドロビン分散させて処理させている。 ⇒コアが処理する数は均等になる ++++++++++++++++++++++++++++++++++++++++++++++++ どなたか、私の疑問についてご存知でしたらご教授いただけますでしょうか。 よろしくお願します。

  • VMware CPUの割り当て

    いつも参考にさせていただいております。 VMwareを勉強中です。 1個で6コアのXeonCPUがあるとします。 これをVMware vSphere5で使うとき、いわゆるオーバーコミット(仮想リソース>実際のリソース)ならないようにゲストOSの設計をしたいのですが、以下の質問があります。 質問1 CPUがハイパースレッティング(HT)に対応しているのですが、このときゲストOSではCPUの稼動上限の周波数で合計12個のコアを割り当てられるという考え方で合っているのでしょうか。 質問2 3GHzの物理CPU"1コア"を、1個のゲストOSで仮想CPUソケット2個(@1.5GHz) の割り当てをしたとき、これはオーバーコミットではない、と考えてよいのでしょうか。 質問3 3GHzの物理CPU"1コア"を、1GHzの仮想CPUを3個を作って3ゲストOSに割り当てるとき、これはオーバーコミットではない、と考えてよいのでしょうか。 よろしくおねがいします。

  • マルチコアプロセッサと、ソフトウェアの関係

    最近、マルチコアプロセッサ搭載のパソコンが、よく売られていますよね、私が今度、購入するパソコンは、ワークステーション級の物で、 CPUにはOpteron(バルセロナCPU=1CPUに4コア)を2個搭載=8コア、搭載(稼働)する物を選びました。4コア以上のCPU全てが働くには、64ビットのOSが前提ですが、各ソフトウェアも、「マルチコアプロセッサ対応のソフトウェア」でなくてはならないですよね。 そこで、質問です。 1 マルチコアプロセッサ対応の、ソフトウェアは、今市場に出ているソフトウェアで、何がありますか?代表的なソフトウェア・私の知らないソフトウェア、なんでもよいので教えてください。 2 このソフトウェアは、マルチコアプロセッサ対応かどうかを見分けるマークのような物はないですか?ない場合は、どうやって見分ければよいのですか?やっぱり、取扱説明書を見るか、そのメーカーに問い合わせをするぐらいでないとダメですか? 私は、以前メーカーに問い合わせても、調べるから待っていてくれと言われました。 3 今後、家庭用のパソコンのCPUは、もっとコアの数が増えた物になるのでしょうか? 4 3の質問に関連してるのですが、もっとコアの数が増えたCPUになったとして、そのCPUがもっと増えたパソコンやマザーボードが出てくるのでしょうか? では、よろしく、お願いします。

  • Hyper-VでのCPU割り当て

    Hyper-VでのCPUの割り当てについて教えてください。 ホスト側のCPUが8コア、16スレッドだった場合、 仮想マシンの設定にて、   論理プロセッサの数:2 と設定したとします。 これは、ホスト側の2コアを意味するのでしょうか? それとも、2スレッドになるのでしょうか? また、使用するソフトの動作環境が2コア推奨となっていた場合は、 2コアと2スレッドのどちらを割り当てるべきなのでしょうか? (こちらは、そのソフトにより違ってくるのかもしれませんが) すみませんが、よろしくお願いします。

  • VMware PlayerでCPUの割り当てを少なくする方法

    VMware PlayerでCPUの割り当てを少なくする方法はありませんか? CPUはPhenom9500(2.2GH x4)を使用しており、VMwareには2.2GHz分の1コアが割り当てられているようです。たとえば、VMwareで使用する分を800MHzにしたりということです。ゲストOSで使用するのは800MHzでも、実際には、ゲストOSに2.2GHzが割り当てられてしまって、残り(2.2Ghz - 0.8GHz = 1.4GHz)の分をホストOSで使用できなくても構いません。(まだ3コア残っているので^^;) アドバイスお願いします!!

  • マルチコア上のLinux環境にて、スレッドを任意のコアに割り当てることは可能か?

    こんにちは。cstepと申します。 Intel Core 2 Quad(コア数x4)のマシン上の ReaHat Linux 9(Kernel 2.4.20-8)環境で、pthread(glibc-2.3.2-11.9, NPTL 0.29, gcc 3.2.2)を使用したマルチスレッド・プログラミングをしています。 各スレッドのコア割り当てを(OSの自動スケジューリングではなくて)手動で固定的に割り当てることは可能でしょうか? 可能な場合それを実現するAPIや実現方法をご教授いただけますでしょうか。 例えば、8つのスレッドからなるプログラムだとした場合、 ・スレッド1と5 → コア1に割り当て ・スレッド2と6 → コア2に割り当て ・スレッド3と7 → コア3に割り当て ・スレッド4と8 → コア4に割り当て というふうに、各スレッド(1~8)を任意のコア(1~4)に固定的に割り当てて動作させたいと考えております。 Windowsの場合は、SetThreadAffinityMask() または SetThreadIdealProcessor() といったAPIを使うことで上記の要求は可能かと思いますが、Linuxでの方法が分からず、質問させていただきました。 よろしくお願い致します。

  • Windows7によるCPUの使い方

    Windows7によるCPUの使い方 うちのPCには、Intel Core i7 950が入っています。 OSは、WindowsXP Pro SP3です。 このCPUをフル活動するような使い方をしているわけでもなく、単なる自己満足で、タスクマネージャのCPU使用率の履歴に8個分並んでいるのを見ながら悦に浸っている程度です。 当然といえば当然ですが、8個すべてが使われていることはありません。 勿体無いな~とは思っても、これをフル活用するような使い方を思いつかないものですから仕方ありません。 重いといわれるゲームをしても、せいぜい2、3個程度しか動いておらず、このCPUに変えてからCPU使用率100%になったところも見たことがありません。 でも、単純な作業やゲームでも常に8個(実際は4個ですが)で分担して仕事してくれれば、もう少し処理が早くなってくれるんじゃないかな~?とちょっと不満に思ってたりもします。 そこでふと思ったのが、OSを変えたらどうだろう?ということです。 XPなんてマルチコアの前からあるOSですから、マルチコアを操るのは苦手でアプリケーションまかせなのかも? 7ならマルチコアを全盛の時代に出たOSですから得意で、アプリケーションがマルチに対応してなくても、OS側で各コアに自動で割り振って効率よく仕事してくれるのでは? という妄想にふけっています。 実際のところはどうなんでしょうか? 要求される必要スペックは7の方が高いですが、XPよりも軽いという話も聞きますし、こういったところが影響してのかな?と思ってしまいます。 CPUの使い方はXPと変わりないですか?

  • 企業で選ぶCPU

    企業でコンピュータを使用する場合は 以前何かで読んだ記憶があるのですが ほとんどのコンピュータがPentiumで動作確認を行っており 最も安定する可能性が高いということと、Updateや新しいソフトウェアにも 対応(快適動作)させるために Pentiumを選ぶ、とのような記事を読んだことがあります。 このようなお話は現在も通用することなのでしょうか? 現在はマルチコアCPUに代わり、OSもマルチコアCPUで快適動作するよう 分散処理がうまく作られていると聞いているのですが 家庭よりも文書処理など単調で処理能力を要求しない作業が多い企業であるならば Celeronを選んでも差し支えがないのでは?と言う質問に答えられなかったのですが、この質問の通りCore2DuoなどマルチコアCPUを選ばなくても 動作が遅いことさえ我慢すれば 全く問題ないと言えるのでしょうか? 妙な質問で申し訳ありませんが ご意見を宜しくお願いいたします。

  • スレッド割り当てについて

    デュアルコアへのスレッド割り当てに関して、良い資料が見つからないので教えて下さい。 C#でwindowsアプリケーションを作成しています。 アプリの動作環境は、windows server 2008 で、CPUはデュアルコアです。 アプリを効率良く動作させたいので、 デュアルコアへのスレッドの割り当て方法がありましたら、教えていただけませんでしょうか。 また、参考になるサイトなどがありましたら紹介していただきたいです。 情報が足らなければ指摘をお願いします。