web-dev-qa-db-ja.com

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

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

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

15
Doug T.

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

12
heavyd

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

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

3
JNK

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

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

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

3
William Hilsum

あなたの最初の感情は正しいです-そこにIS複数のコアに向かって負の傾斜があります、そしてそれは本当にそれに値するすべてではありません。

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

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

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

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

2
Rob