parallel.forを使用するAC#メソッドは、10コアCPU(デュアルXeon 64GB RAM Windows 10ワークステーション)のすべてのコアを完全に使用しますが、 2番目のCPU上にある他の10個の物理コアを使用できます。プロセスの親和性(タスクマネージャで)は、すべてのコアが利用可能であることを示します。プロセスに利用可能なすべてのコアを使用させる考え/アプローチこの例では、標準コーディングからparallel.forへの大幅なパフォーマンス改善が見られます。スピードの100%改善をあきらめてしまうのは残念です。ありがとう。C#parallel.forループはCPU1のコアを完全に使用しますが、CPU2は使用しません
重要な観測:タスクマネージャを見ると、プロセスが使用しているコアが両方のXeon CPUに分散していることは明らかです。 IOWでは、各CPUのコアの約半分を使用します。
追加情報:Environment.ProcessorCount = 32.システムに20個の物理コアがあり、したがって40個の論理コアがあります。そして明らかに、このプロセスでは32個のコアすべてを使用するわけではありません。それは最大で20を使用します。FWIW、単一コアi7-3770では、使用可能な8つの論理コアの100%に近いものを使用して、プロセスが正常に動作します。
2 ADDITIONAL:Luaanによって提案された変更が使用可能なプロセッサの数に影響を及ぼさなかったコンフィギュレーション:まだ32
ADDITIONAL 3:Windowsの10のPro 64ビット
msconfig.exeでいくつのコアを指定しましたか? – Alex
これらのCPUはNUMAにありますか?それらは同じプロセッサグループに属していますか?複数存在する場合、.NETは両方にアクセスできますか? 'Environment.ProcessorCount'を確認してください。これは、Parallel.Forが作成するワーカーの量を決定するために使用するものです。追加のスレッドを手作業で作成する場合、これらのスレッドも第2のCPUを飽和させますか? – Luaan
どのように処理していますか?私の厄介なハックファイルファインダーは、利用可能なすべてのコアを使用しているようだそれはタスクとパラレルforsの組み合わせを使用して – BugFinder