web-dev-qa-db-ja.com

Windowsで永続的なプロセスCPUコアアフィニティを設定する

私は新しいCPUを入手することを計画しており、クアッドコアi5を検討しています。

クアッドコアの理由は、たとえばVisual Studio、Eclipse Aptana、Photoshop、Lightroom、および多数のChromeブラウザーを一度に実行するなど、通常、多くのマルチタスクを実行するためです。

  1. Visual Studioなどの特定のプロセスを永続的に割り当てて特定のコアを使用することは可能かどうか疑問に思っていますが、これを実現するためにWindowsタスクマネージャーよりも優れたツールはありますか?

  2. これにより、よりスッキリとしたマルチタスクエクスペリエンスが得られますか、それとも効果に気づきませんか?

  3. また、複数のIDEを開いてChromeの開発者ツールを使用して数時間Web開発を行った後、深刻なスラッシングが発生したため、3GBから8GBに移行することも計画しています。追加のRAMで十分ですか、それともより高速なCPUが必要ですか?(現在Core 2 Duo E6750 @ 2.66ghzを実行しています)

5
vaughan

Windowsは一般にコア間でアイテムをスケジュールするのに非常に優れているため、特にこの種のことを念頭に置いて設計されたWindows 7では、特定のプロセスを特定のコアに配置した場合の影響に気付くことはありません。

一般に、忙しいタスクは1つのコアにほとんどの時間を費やし(通常、通常のアプリでは60%以上、シングルスレッドゲームでは95%以上)、Windowsは忙しくなるにつれて、他のコアで他のタスクをスケジュールすることがわかりました。心配する必要はありません。 Windows 7は、システムでどのコアが「優先」されているかを判断できることを読んだことを覚えているようです。そのため、 ターボブースト 機能(最初のコアのアクティビティを使用してブーストする必要があるかどうかを教えてください)そしてハイパースレッディングの場合、Windowsは最初のコアでシングルスレッドタスクをスケジュールする傾向があり、マルチスレッドタスクはハイパースレッドの「仮想」コアの前に「実際の」コアに優先的に割り当てられます。私はこれが私のi7(クアッドコア、8ハイパースレッドコア)で機能しているのを見てきました。これは、最初のコアをほぼ独占的に使用し、次に代替の「実際の」コアで適度に使用するゲームで非常にうまく機能します。

アフィニティを指定することが役立つと思うのは、マルチプロセッサに対応しているがタイミングの問題があるように見える特定のメディアプレーヤーを使用してビデオを視聴するときだけです。 Mediaplayer Classic Hometheater Edition ビデオをスキップし始めると、かなり「ジャンプ」するようです。おそらく、デコードに複数のスレッドを使用していて、コア間で十分に同期されていないためです。 1つのCPUのみを使用するように設定すると、ジャンプが停止します。

CPUアフィニティを変更する必要がある場合は、いくつかのツールがあります。

Runfirst は、システムで使用可能な最初のCPUでのみ実行されるようにすることで、古いプログラムを修正するのに役立ちます。

このレビュー Toms Hardwareには、タスクアフィニティを自動的に再割り当てするツールがありますが、リンクが壊れているようで、最近は見つけるのが少し難しいようです。このプログラムは、アフィニティを割り当てたいときは常に実行し続ける必要があると思います。あなたはそれを得ることができるかもしれないように見えます ここ

一般的に、手動でアフィニティを割り当てることに実際のメリットは見られないと思いますが、ソフトウェアが改善されたため、この慣習はほとんどなくなったと思います。

正直なところ、8GBのRAMで十分であり、ニーズに合うと思いますが、使用しているツールを実際に使用した経験はありません。 6GBシステムでは、複数の仮想マシンを実行していて、IDE(Eclipse))を実行しているときに、ハードドライブのスラッシングが原因でシステムが遅く感じたことは一度もないと言えます。

3
Mokubai

特定の実行可能ファイルにCPUアフィニティを割り当てることは悪い考えです。プロセスにアフィニティを設定しても、指定したプロセス用にCPUが予約されず、そのCPUから他のすべてのプロセスがロックアウトされます。そのプロセスは指定されたCPUしか使用できないと言っているだけです。

CPU時間を必要とするプロセスは、通常認識しているプロセスよりもはるかに多いため、これは問題です。アフィニティを使用してプロセスをCPU0などにバインドし、プロセスでCPUが必要になったときに、他の何かがCPU 0を使用している場合、CPU 0で何か他のことが行われるまで、プロセスはまったく実行できません。

どこでも実行するよりもどこかで実行する方がはるかに優れており、どこでも実行しないことは、アフィニティを設定することの一般的な結果です。

プロセスのアフィニティを単一のCPUに設定した場合の別の恐ろしい結果は、そのプロセスのすべてのスレッドを1つのCPUに制限することです。これにより、マルチスレッドが持っていた可能性のあるパフォーマンス上の利点が失われます。

つまり、Windowsスケジューラに任せてください。選択肢が少なければ少ないほど、実行できる仕事は貧弱になります。

2
Jamie Hanrahan