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

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

クアッドコアを避けるべきという典型的な議論は理解しています。アプリケーションレベルでは、ほとんどのアプリケーションは複数のコア用に作成されていません。ほとんどのデスクトップソフトウェアでは並列化すら必要ありません。

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

答え1

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

答え2

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

OS は複数のプロセスに複数のコアを使用できますが、単一コアのアプリケーションを複数のコアに分散すると、さまざまな予期しない動作が発生します。

答え3

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

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

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

答え4

あなたの最初の感想は正しいです。複数のコアに対して否定的な傾向があり、それはまったく当然のことではありません。

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

さらに、一部のユーザーはこの PC でゲームをしたり、GarageBand、iMovie、HandBrake などのツールを使用したりする可能性もあるため、複数のコアがあることは大きなメリットとなります。

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

基本的にはその通りですが、最も効率的なコアの数はいくつでしょうか? 2? 4? 12? これはおそらくユーザーの習慣によって決まります... ほとんどのユーザーの場合、私は 2 ~ 4 にしていますが、これは推測にすぎません。

関連情報