Гиперпоточность может ухудшить производительность некоторых приложений, и ее не следует использовать. С веб-сайта Microsoft (https://msdn.microsoft.com/en-us/library/cc615012%28BTS.10%29.aspx):
Для BizTalk Server критически важно отключить гиперпоточность
компьютеры. Гиперпоточность делает сервер более
процессоры / процессорные ядра, чем на самом деле; тем не мение
Гиперпоточные процессоры обычно обеспечивают от 20 до 30%
производительность физического процессора / процессорного ядра. Когда BizTalk
Сервер подсчитывает количество процессоров, чтобы настроить его самонастройку
алгоритмы; Гиперпоточные процессоры вызывают эти корректировки
перекос, который наносит ущерб общей производительности.
Программа Process Lasso позволяет отключить гиперпоточность для некоторых процессов:
Вы можете использовать такие программы, как Process Lasso (бесплатно), чтобы установить процессор по умолчанию
сходство для критических процессов, так что их потоки никогда не получат
выделены логические ядра. Мы называем эту функцию HyperThreaded Core
Избежание.
У меня есть несколько старых программ, которые выполняют много математических вычислений. Очень неприятно видеть, что они используют одно ядро, если они могут использовать 4. Я хочу переписать их, чтобы использовать много потоков. Они используют большие непрерывные блоки памяти, поэтому количество пропусков кеша минимально. Мои вопросы следующие:
Я не знаю, что процесс Лассо работает с «отключением HyperThreading». Для этого конкретного приложения лучшее, что вы можете сделать, это внедрить DLL в каждый процесс в системе, вызвать SetProcessAffinityMask с помощью чего-то, что составляет лишь предположение, отключите каждое другое ядро, в надежде, что ОС избежит планирования для многопоточных логических ядер.
Предположим и надеемся, что в Windows API нет ничего, что могло бы сделать это наверняка. Это отвечает вашему третьему пункту.
Вы можете отключить HyperThreading как уровень BIOS (обычно).
Я не могу комментировать совет Microsoft по отключению HT для BizTalk, ваша связанная статья, так как я не могу найти дату для этой статьи. Единственный интересный момент был о «Назначении привязки прерываний к логическим процессорам …», новой для меня. Единственный другой совет в этой статье относительно ХТ довольно слабый.
В более широком смысле: я не знаю, почему вы спрашиваете о HyperThreading, когда вы должны быть обеспокоены многопоточностью в целом. Если вы обеспокоены тем, что несколько потоков конкурируют за один и тот же общий ресурс …, не используйте потоки в своем приложении.
Шутки в сторону: та же компания продает продукт под названием SmartTrim, напоминающий о RAM-дублеры которые были популярны в 90-х.
По сути, все сводится к настройке количества параллельных потоков, выполняющих нагрузку на процессор. ОС знает о гиперпоточности и будет назначать потоки физическим ядрам до тех пор, пока она не закончится, и только если потоков больше, чем физических ядер, она начнет распределять работу по логическим ядрам.
Чтобы определить, является ли оптимальное количество потоков количеством физических или логических ядер, наилучшим подходом является измерение производительности ваших реальных задач. Синтетические тесты могут научить вас тому, как работает гиперпоточность, но не подскажут, что лучше для вашего конкретного набора инструкций.
Точный способ управления количеством потоков зависит от используемой вами конструкции многопоточности — если вы создаете потоки самостоятельно, это очевидно, но структуры потоков пула и автоматизированного параллелизма, такие как OpenMP, также предоставляют способы настройки количества потоков.