Метод C #, который использует parallel.for, полностью использует все ядра в 10-ядерном процессоре (на двойной рабочей станции Windows 10 с ОЗУ Xeon 64 ГБ), но не использует какие-либо другие доступные 10 физических ядер на втором процессоре. Несмотря на то, что сходство процесса (в диспетчере задач) указывает на то, что ему доступны все ядра. Есть какие-нибудь мысли / подходы, чтобы заставить процесс использовать все доступные ядра? Я действительно вижу значительное улучшение производительности при переходе от стандартного кодирования к parallel.for в этом случае; жаль отказываться от очередного 100% прироста скорости. Спасибо.
ВАЖНОЕ НАБЛЮДЕНИЕ: в диспетчере задач очевидно, что ядра, которые действительно использует процесс, распределены между обоими процессорами Xeon. IOW, он использует примерно половину ядер каждого процессора.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Environment.ProcessorCount = 32. Хотя в системе 20 физических ядер и, следовательно, 40 логических ядер. И очевидно, что процесс НЕ использует все эти 32 ядра. Он использует не более 20. FWIW, на одноядерном i7-3770 процесс работает должным образом, используя почти 100% из 8 доступных логических ядер.
ДОПОЛНИТЕЛЬНО 2: Изменения конфигурации, предложенные Luaan, не повлияли на количество доступных процессоров: по-прежнему 32.
ДОПОЛНИТЕЛЬНО 3: 64-разрядная версия Windows 10 Pro.
Environment.ProcessorCount
, это то, чтоParallel.For
использует для определения количества создаваемых рабочих. Если вы вручную создаете дополнительные потоки, не перегружают ли они второй ЦП? - person Luaan   schedule 18.04.2016