OSは各プロセスを個別のコアに割り当てますか?


15

わかりました、クアッドコアを避けるための古典的な議論を知っています。アプリケーションレベルでは、ほとんどのアプリケーションは複数のコア用に作成されていません。ほとんどのデスクトップソフトウェアは、並列化さえ必要としません。

ただし、OSレベルでは、OSがさまざまなコアにプロセスを分割することは明らかです。これ自体が、コアを増やすための議論ではないでしょうか?それは多くの状況で大いに役立ちませんか?CPUを集中的に使用するいくつかのタスクが発生します。これらのプロセスはそれぞれコアの100%を占有している可能性がありますが、最後のコアのWebを閲覧して、SuperUserで質問することができます。


この質問と答えへの基本的な流れは、単一のプロセスがシングルスレッドであるという仮定です。多くの場合、これは当てはまりません。また、プロセスがシングルスレッドであっても、いくつかのシステムライブラリ/ dllが独自のスレッドを追加します。
harrymc

回答:


12

OSは、個々のシングルスレッドプロセスを複数のコアに分割することはできません(アプリケーションが実行されているコアを変更する可能性がありますが、それは別の質問です)が、それぞれ独自のコアで複数のプロセスを実行できます。そのため、はい、複数のプロセッサを集中的に使用するアプリケーションをバックグラウンドで実行している場合、他のアプリケーションを実行するために使用できるほとんどまたは何もしないで、予備のコアがまだ残っている可能性があります。


ここでのキーワードは複数のプロセッサを集中的に使用するアプリケーションがある場合です。これは、ほとんどのユーザーにとって珍しい状況です。
ジル 'SO-悪であるのをやめる

回答ありがとうございます。はい、後者のケースは私が説明しようとしているものです。
ダグT.

3

@heavydの答えに追加すると、この理由はOSがプロセスのどの部分を並行して実行してもよいか、そうでないかを判断する能力を持たないからです。プログラムが並列コアで実行するように設計されていない場合、アプリケーション内で、同時に実行するように連続して実行するように設計されたルーチンを使用できます。これにより、あらゆる種類の問題が発生する可能性があります(2つのルーチンが同じメモリブロックを使用しているが、同時に実行することを意図していない場合など)。

OSはとにかくそれを行うため、複数のプロセスに複数のコアを使用できますが、シングルコアアプリケーションを複数のコアに分散させると、あらゆる種類の予期しない動作が発生します。


ありがとう。という事は承知しています。私の質問は言葉遣いが不十分だったかもしれません。プロセスを別々のコアに配置することについて、もっと質問するつもりでした。どういうわけか魔法のようにシングルスレッドプロセスがコアにまたがるわけではありません。
ダグT.

3

結局のところ、プロセッサの使用率が1%であるか95%であるかは問題ではありません(95%で安定しており、ピークに達していない限り)、プログラムは以下と同じ速度で実行されます。 100%に達していない。未使用のCPUサイクルは単純に無駄になります。

このため、Windows 7(互換性のあるプロセッサ上)には、「コアパーキング」と呼ばれる技術があります。これは基本的に、コンピューターの未使用のコアを無効にして電力を節約します。

シングルスレッドアプリケーションは自動的に別のコアに渡されます-この背後にあるテクノロジーについてはわかりませんが、うまく機能することはわかっています。


2

あなたの最初の感情は正しいです-複数のコアに対して否定的な傾向があり、それは実際にすべてに値するわけではありません。

かつては、ほとんどのユーザーがデスクトップPCを単純なワードプロセッサにしか使用していなかった頃、議論があったかもしれません。しかし最近では、それぞれが独自のプロセスにある複数のタブを持つブラウザー(クローム、つまりタブのプロセスレベル分離を行う)に加えて、Webページ内のビデオデコーダーや、オンザフライのように簡単にオフロードできる追加タスクなどがあります効果のレンダリング(別名css3)、ブラウザだけでも、RAMの数が多く、コアが少数である理由を正当化できます。

それに加えて、一部のユーザーがこのPCでゲームをプレイしている場合や、ガレージバンド、imovie、ハンドブレーキ、マルチコアなどのツールを使用していることも大きなメリットになります。

別のコアを使用するために、コアを最大化する必要がある(つまり、1つのコアでCPU使用率を100%にする)と仮定するのは正しくありません。ここで並列処理について話しているからです。CPU内のタスクの切り替えは、通常、スタックを別のプロセスにスワップする前に操作のバッチを実行します。これらのタスクのすべてがCPUバウンドではないため、コアがロックされていてもCPUスパイクが発生することはありません。

基本的には正しいですが、コアの最も効率的な数は何ですか?2?4?12?これはほとんどの場合、ユーザーの習慣に依存します。ほとんどのユーザーはこの2〜4の傾向がありますが、推測しているだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.