Windowsのデュアルコアと負荷の分散について

このQ&Aのポイント
  • Windowsのデュアルコア環境では、一方のコアがビジー状態で他方のコアがアイドル状態になることがあります。
  • プログラムの負荷が一方のコアに集中している場合、コア間の負荷の分散が行われることはありません。
  • 同じプログラムでも異なるコアで実行することができますが、起動方法によってコアの割り当てが変わることがあります。
回答を見る
  • ベストアンサー

Windowsのデュアルコアと負荷の分散について

Windowsの問題です。 デュアルコアの一方のコアをコア1として、他方をコア2とします。 コア1でプログラムA,Bが動いていて、コア2でプログラムC,Dが動いていているとします。 プログラムC,Dが終了したときに、プログラムA,Bが動いているとします。 コア1のみビジーでコア2はアイドル状態になります。 このときプログラムBがコア1からコア2に移動して実行するのでしょうか。 それともコア1の上で動き続けるのでしょうか。コア1のみビジーでコア2はアイドル状態ままでいるのでしょうか。 もう1つの質問です。同じプログラムでも別のコアで動作するのでしょうか。 即ち、プログラムAをパラメタ1で起動し、プログラムAをパラメタ2で起動します。 パラメタ1で起動したプログラムAはコア1で、パラメタ2で起動したプログラムAは別のコアで実行するのでしょうか。 パラメタ1で起動したプログラムAとパラメタ2で起動したプログラムAは同じコアで実行するのでしょうか。 わかっている方がおりましたら、教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.2

コンパイラ、リンカでプログラムの実行可能イメージ:*.exe,*.dll等が作られます。 プログラムの実行スケジュールはOS:スケジューラの役割です。 実行を要求するプログラムは一つのリストに優先度順に繋がれ、空き状態となったCPUはそのリストから先頭のプログラムをリストから外し、実行スケジュールします。(複数のCPUがあっても、このリストは共通に1個です) 従ってどちらのCPUで実行されるかはその時にならないと分かりません。 (特殊な例として、起動時に実行CPU.Noを指定する機能があるのはありますが、普通は使われていません)

その他の回答 (1)

  • nemoax006
  • ベストアンサー率14% (343/2433)
回答No.1

動作はコンパイラ次第でしょう。意図的に動作を指示できる場合もありますが、ほとんどの動作はコンパイラが自動に割り振ります。

uranasu02
質問者

お礼

回答がおそくなって申し訳ありません。 説明不足だったかも知れないが、あなたは誤解されてるかも知れないが、 私の知りたいことは、OSの機能であって、プログラムのコンパイル環境ではないのです。あなたの「コンパイラ次第でしょう」との回答に、そうだとしたら、OSを作成するときにコンパイラ環境はどうなんでしょうか。 わかったら教えて下さい。

関連するQ&A

  • デュアルコアなのに

    Android4でデュアルコアのスマホとタブレットを使っています。 CPU Statsを見ると、ビジー状態でも1コアしか動かず、2コア動くのは希なのですが、なぜですか? 表示がおかしいのでしょうか?

  • 負荷分散について教えてください

    お疲れ様です。 いつもお世話になっております。 負荷分散といっても、かなり基本的な話になりますが、よろしくお願いします。 今顧客管理システムAが稼動しており、1000万件のデータがDB_Aに入っています。 このシステムAの基幹部分を使い、類似した別のシステムBを作るのですが、 DB_Aの検索だけで結構負荷が掛かっているので、DB_Bを作って、システムBのデータを入れるつもりです。 システムA,Bと平行稼動し、DB_Aに負荷が掛かっている場合は、DB_Bのレスポンスも自然と悪くなるのでしょうか? そもそもそれはDBの問題よりサーバースペックの問題になるのでしょうか。 システムAのプログラム的な無駄は考えないものとします。 質問が抽象的で申し訳ないですが、自分が説明できるのはこんな具合です。

    • ベストアンサー
    • MySQL
  • N88互換BASIC for Windowsについて

    現在愛知県内の水産高校の情報通信科1年で パソコンの授業でN88互換BASICで プログラミングの授業を受けているのですが 今やっている問題で READ文を用いて、Aの変数に10、Bの変数に30 Cの変数に20を入れて、A×(B+C)を求めるプログラムを 作りなさい。ただし実行結果が下記のように なるようにプログラムを作りなさい。 実行結果 A= 10     B=30     C=20 A*(B+C)= 500 という問題をやっているのですがこの問題の答えは 10 READ A,B,C 20 D=A*(B+C) 30 PRINT "A=";A,"B=";B,"C=";C 40 PRINT A;"*";B;"+";C;"=";D; 50 DATA 10,30,20 60 END という感じで作ってみたのですが これで実行すると A= 10    B= 30   C=20 10*30+20= 500 となるのですがこれであっていますでしょうか?

  • 初めてのWindowsプログラム

    初めてのWindowsプログラム #include <windows.h> #include <stdio.h> char* Title ="加算プログラム"; int AddNum(int a,int b) { return a +b; } int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hDummy,LPSTR lpszArgs, int iMode) { int i; char s[80]; i = AAddNum(123, 456); sprintf(s, "123+456=%d",i); MessageBox(NULL,s,Title,MB_OK); return 0; } このプログラムなんですが、実行すると次のようなエラーが出ます。 ■C: C> bcc32 test.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland test.c: 警告 W8065 test.c 16: プロトタイプ宣言のない関数 'AAddNum' の呼び出し(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'hInst' は一度も使用されない(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'hDummy' は一度も使用されない(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'lpszArgs' は一度も使用されない(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'iMode' は一度も使用されない(関数 WinMain ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) コンパイラはBorland C++ 5.5.を使っていて、printfなどのコンソールプログラムは実行できます。 サンプルプログラムそのままなのですが、なぜ上のプログラムは実行できないのでしょうか。

  • 複数の処理の終了を待ちたい

    お世話になります。以下、教えていただけますでしょうか? バッチファイル(A.bat)を作成しています。 そのなかで、a,b,c,dの複数のプログラムを、前処理の終了を待たずに起動させ、a,b,c,d全てが終了するのを待って、eというプログラムを実行させたいのです。 --------------- start a start b start c start d --------------- この記述で、a,b,c,dが一度に起動することは確認できました。 しかし、この後の、「a,b,c,d全ての終了を待ってeを起動させる方法」というのが分かりません。 教えていただけますでしょうか? それとも、そもそも、バッチでは実現不可能なのでしょうか?

  • ウィンドウを出したくない

    OS: Windows 2000 C: Borland C++ Compiler コマンドラインアプリケーション(Hello world!的なもの)を作成しています。 別の方の質問で出来上がったexeファイル実行時ウィンドウを出したくない場合は、main()をWinMain()にすればよいとのことだったのですが、これだとコマンドラインパラメータを渡せなくなってしまいます。 コマンドラインパラメータを渡せて、かつexeファイル実行時にウィンドウを出したくない場合は、どうすればよいでしょうか? 目的はあるウィンドウアプリケーションから外部プログラムとして実行したいのですが、実行中ウィンドウがでてしまっていて、それを避けたいのです。 よろしくお願い致します。

  • (1)デュアルコアCPUの温度について / (2)ファンが異常?

    CPUをシングルコアからデュアルコアへ交換致しました。 (1)EVERESTでCPUの温度を測るとアイドル時26度前後なのですが、 Core Tempで2つのコアを個別に図ると35度前後で表示されます。 これはどちらの数値が実際の温度に近いのでしょうか? (2)デュアルコアのCPUに変えてから、ゲームなどを起動させると 今まで聞いたこともないような大きな音でファンが回っているようなのです。 数秒おきに途切れ途切れで「ゴー」と回るのですが、異常でしょうか? ファンはシングルコア時に使っていたものをそのまま使っています。 シルバーグリスも塗りなおしました。 CPUの処理能力が上がったので、その分熱くなりこのような状態になるのでしょうか? それともCPU交換時に、ついでにグラボにネジでつけられているアルミ板に 大きなヒートシンクを貼りつけ、またHDDにファンを取り付けたのですが、 それで空気の流れが悪くなったのが原因なのでしょうか? ゲーム起動時の温度はEVEREST測定で、CPU30度前後、GPU50度前後です。 グラボにもファンが取り付いている状態です。 よろしくお願い致します。

  • MFCアプリのコマンドラインでパラメータを使用した起動方法

    VisualC++6.0を用いて、ダイアログの2つあるプログラムを 作ったのですが、 2つのダイアログを例えばAさん用、Bさん用として使い分けようと思ったときに メニューでダイアログをそれぞれ指定して、実行しようと思ったのですが、 Aさん用を親ダイアログにしてしまうと、Bさんは起動時ごとにメニューで 切り替えなければいけなくなりますよね。 それで、切り替えをしなくても良いようにと思って、 コマンドラインからパラメータで「/A」「/B」などとしたときに、Aさん用 Bさん用として、起動させたいのですが、 コマンドラインのパラメータをどこで受け取って処理しているのか 分らないのですが、教えては頂けないでしょうか? よろしくお願い致します。

  • _access関数が EACCES エラーとなる

    _access関数が EACCES エラーとなる問題があり、識者の方、どうか ご教授願います。 <環境> ・Windows2000 Pro ・VC++ 6.0 事象の説明を以下にします。 A、B、Cの3つのプログラムがあります。 A:サービスから起動されるプログラム B:Aから CreateProcess関数により起動される。 Cを CreateProcess関数により起動する。 C:Bから CreateProcess関数により起動される。 _access関数で、ネットワーク上の別のマシンの共有されている フォルダをアクセスする。 上記の環境で、A→B→Cと起動し、Cがネットワーク上の別のマシンを アクセスしようとすると EACCES のエラーになります。 (EACCES は errno.h で定義されています。) しかし、サービスのAからではなく、Bから起動した場合は正常に アクセスできます。 C単体でもOKでした。 A、B共に、CreateProcess関数の第3、4パラメータのセキュリティ関連の パラメータには NULL を指定しています。 サービスの何らかの情報を継承しているのでしょうか。 回避策、アドバイスなど、よろしくお願いします。

  • 【SPSS】等分散性の検定

    SPSS(バージョン14.0)を使って勉強しています。 わからないことだらけです。 そこで誰かに教えていただきたいのですが…。 4水準(グループA、B、C、D)で一元配置の分散分析を実行したところ、 「等分散性の検定」で ・Levene 統計量 3.205 ・有意確率 0.023 と結果が出ました。 有意確率が0.05より小さいので等分散とはみなせないと参考書に書いてあるのですが、それでは、グループA、B、C、Dのどのグループ間で分布が違っているのかは、どうやって確かめればよいのでしょうか? 初心者ですので質問自体が的外れなのかもしれませんが、よろしくお願いします。