2011-02-07 5 views
6

System.Environment.ProcessorCountは私が使用したいN個のプロセッサ(私の場合N = 8)を表示します。今問題は、Windowsのresourcemanager saisは、私のCPUのうち4つが 'パークされている'ということです.8スレッドは、ブロックされていない4つのCPUまで別々に始まります。C#スレッド化パークドCPU?

パーキングされたCPUを使用する方法はありますか?

答えて

3

通常、あなたは、このようにそれを行うことができるはず:

Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)0x00FF; 

は、ここではそれについてのドキュメントを参照してください。
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.processoraffinity.aspx

をが、それはまた、デフォルトでは、あなたのプロセスは、すべてに割り当てられている、と述べていますコア。一方

、あなたは ProcessThread.ProcessorAffinityを試みることができるし、(あなたが別のコアを使用するように各スレッドを強制したい場合は)手動で設定してみてください。

+0

ありがとうございます。基本的にすべての答えは正しかった... ProcessorAffinityを個別のCPUを使用してスレッドを強制的に強制するように設定すると、私は役に立たなかったが、私が尋ねたことを正確に教えてくれたので、 – Steav

+0

CPUアフィニティを調整する際には、OSのCPUスケジューラ*がコアと考えるコアに人為的な制約を適用するように、インテリジェントに行うようにしてください。もちろん、質問にはコアパーキングとCPUの親和性についての混乱がありました。これは、私の目の前ではっきりと分かりませんでした。 –

7

Windowsの「公園」CPUコア、それはそのコアが行うための十分な仕事それが低電力状態にそのコアを置くがないことを意味します。 CPUを "アンカー"するには、十分な作業を作成するだけです。

あなたは8つのスレッドを起動しているとWindowsがCPUをunparkingされていない場合、スレッドはおそらく、ブロッキング、またはあまりにも早く完了し、I/Oを行っています。あなたのスレッドが何をしているのかを投稿すると、誰かがなぜ彼らが駐車したコアで動いていないのか説明することができます。

+0

私は短い操作(サイクルあたり2〜10ms)をするFor-Loopを持っていますが、それが動作するリストは200〜300kまで容易に成長できます。 私は仕事を始める前に4つのCPUが駐車されていて、4つは働いています...私が手順を開始したときと同じです...そしてたくさんの作業があり、4つの追加のコアが大幅に改善できるパフォーマンス。スレッドは20秒以内に完了しません。 I/O操作は行われません。 – Steav

+0

実際には、4つの追加のコアが必要なので心配しています。なぜなら、動作は8coreのIntel I7よりも長くかかるからです。 – Steav

+0

駐車は一時的な状態です。コアのコアが解除されると、コアは処理を実行し、再びパークされます。リソースモニターを見ると、コアが停止していることが示されますが、そのCPUはまだ何らかの作業を行っています。 – Gabe

2

Win7/2K8R2は、他のものが飽和または飽和に近づくまで、コアをアンカーしません。

パーキングコア全体が作業を統合することです。 4コアを80%で8コアより40%使用する方が電力効率が高いです。また、パフォーマンスの差はほとんど存在しないはずです。関連する少数のハードウェアスレッドがあるので、あまり同期オーバーヘッドが存在することになるので、

また、共有されるデータの量に応じて、作業を統合することは、実際に速くなります。 1つのスレッドからの最近のデータ変更は、キャッシュの可能性が高くなります。

したがって、最も一般的な最悪のケースは、ほぼ同じ性能であり、使用される電力がより少なく、一般的な最良のケースは、より良い性能とより少ない電力が使用されることです。

0

パーキングは、プロセスのCPUアフィニティ設定によって制御されず、Windows CPUスケジューラによって自動的に実行されます。 CPUアフィニティの調整によって特定のコアが強制的に使用される可能性がありますが、Windowsは別のコアをパークするだけです。パーキングは、システムの負荷に応じて、非常に迅速に動的にオンまたはオフになります。実際には驚くほど積極的です(一部のプラットフォームでは多すぎるかもしれません)。リソースモニタで見ることができます。

独自のCPUアフィニティを設定する場合は、との注意を払ってください。。 HyperThreadedコア、またはAMD Bulldozerの場合、計算ユニットを共有するペアのコア(HyperThreadingなしのHyperThreading; p)を考慮する必要があります。実際のコアのパフォーマンスのほんの一部を提供するHyper-Threadedコアに「つぶれ」てしまうことはありません。 CPUスケジューラはそのようなことを認識しているので、あなたが何をしているのか分からず、そのシステムのCPUをチェックしていなければ、親和性が最も残されます。

を再起動することなく、CPU駐車を非常に簡単に有効/無効にすることができます。私は単純なGUIを使ってHOW-TOを書いています。How to Enable/Disable or Tweak CPU Parking Without a Reboot, and without Registry Edits

また、CPU Parkingの詳細とPowerCfg.exeを使って調整する方法についても説明しています。実際には、Windowsの標準的なAdvanced Power Profile設定でオプションを表示させることができますが、ここでは取り上げません。

関連する問題