Я заметил, что несколько моих многопоточных вычислений работают быстрее, если я отключу гиперпоточность в BIOS.Отключить гиперпотоки против изменения ProcessorAffinity?
Я также узнал, что можно программно отключить (логический) CPU: сек путем изменения сродства процессора для текущего процесса, например, как это в C#:
// using System.Diagnostics;
var current = Process.GetCurrentProcess();
var affinity = current.ProcessorAffinity.ToInt32();
current.ProcessorAffinity = new IntPtr(affinity & 0x5555);
По крайней мере, с точки производительности зрения, отключит каждый второй (логический) процессор, изменив сродство процессора, окажет такое же влияние, как и полное отключение гиперпотока?
Хмм, ключевой вопрос: собираетесь ли вы отправить свою машину-разработчик вместе со своим программным обеспечением? –
Другим фактором может быть операционная система. Если вы отключите гиперпоточность в BIOS, и ваше программное обеспечение пытается использовать все ядра, то при попытке запуска операционной системы (или другого фона) она будет конкурировать с вашим программным обеспечением для доступа к процессору. Лучшая ставка может заключаться в том, чтобы просто попробовать и сравнить оба варианта и посмотреть, какие различия вы найдете в процессе; разница может быть несущественной, что позволяет легко отключать гиперпоточность. ПРИМЕЧАНИЕ. Если у вас нет аппаратного контроля, проверьте процессоры AMD, у которых есть выделенные ядра без гиперпотока. –
Спасибо, Крис, очень полезный ответ. Я сделаю еще один бенчмаркинг, чтобы узнать, будет ли какой-либо из вариантов иметь реальную разницу в обычной пользовательской среде. –