По каким причинам программист может хотеть отключить гиперпоточность?

13

Моя компания только что купила новые компьютеры, чтобы заменить старые 2ГБ компьютеры под управлением Windows XP. Кто-то из моей команды заметил, что они пришли с отключенной гиперпоточностью, и велел всем перезагрузиться и включить его. Есть ли польза от программирования на машине с отключенной гиперпоточностью?

попса
источник
1
Какую модель процессоров Intel вы используете, например, Core i5 или i7?
JB King
@JBK Хороший вопрос, я не знаю, у меня нет одной из этих машин.
Pops
На старом ноутбуке Pentium 4, чтобы уменьшить тепло и шум вентилятора, и, возможно, сделать аккумулятор еще несколько минут. Не ответ, потому что это должно быть древней историей, и не должно применяться в вашем случае.
Steve314
В игре Lucasarts Grim Fandango звуковой движок столкнулся с состоянием гонки при работе с гиперпоточностью.

Ответы:

14

Да, я работал над приложением, которое работало лучше при работе на компьютере с отключенным HT .

В результате исходный код создавал вдвое больше потоков при запуске на многопоточном компьютере (что, как вы предполагаете, является чем-то вроде HT). Однако пропускная способность этих потоков была очень чувствительна к объему кэша, доступного для потока. При вдвое большем количестве потоков, борющихся за фиксированный объем кеша, доступный кеш на каждый поток был слишком низким, и происходило перебивание: было бы загружено больше пропусков кеша, загружалось бы больше обращений к основной памяти, а производительность значительно снижалась по сравнению с работой с меньше потоков и больше кеша на поток (это то, что вы получаете, если запускаете приложение на компьютере с отключенным HT).

Окончательное решение состояло в том, чтобы приложение лучше проверяло платформу HW и учитывало размеры кеша и объем кеша, который считался необходимым для каждого потока, при определении количества создаваемых потоков. В любом случае проблема быстро исчезла с последующим поколением процессоров, которые удвоили размер кэша (и тогда мы фактически начали видеть скромную выгоду от HT). Тем не менее, весь эпизод оставил долгое и длительное наследие рекомендации всегда отключать HT на любой платформе, на которой работало наше ПО, и коленный рефлекс «на машине не включен HT, не так ли? » Реагировал на любые проблемы с производительностью. (Я думаю, что основная проблема заключается в том, что большинство не-гиков просто не понимают, что такое HT).

timday
источник
11

Я не знаю технических деталей, но, очевидно, если приложение (или ОС) не оптимизировано для гиперпоточности, гиперпоточность может фактически снизить производительность.

Даже Intel рекомендует отключить его в этом случае:

Следующие настольные операционные системы не рекомендуются для использования с технологией Hyper-Threading. Если вы используете одну из следующих настольных операционных систем, рекомендуется отключить технологию Hyper-Threading в программе настройки BIOS системы: [...]

(Источник: http://www.intel.com/support/processors/sb/CS-017343.htm )

Поэтому, возможно, производитель (или поставщик) хотел быть осторожным.

sleske
источник
Известно также, что некоторые игры работают медленнее, чем при отключении гиперпоточности.
Klaim
4
Было бы интересно, если бы они были обеспокоены производительностью игр, в которые играют на работе.
dietbuddha
В многоядерной системе два потока могут быть выделены двум гиперпотокам на одном ядре, оставляя все остальные ядра бездействующими и обеспечивая гораздо меньшую производительность, чем размещение каждого потока на другом ядре. Пока операционные системы не осознают разницу между другим ядром и разными гиперпотоками в одном ядре ...
Steve314
1
@ Steve314: Это, конечно, было и в Windows2000 (и отключение HT было определенно хорошей идеей, если вы работали с ней), но Windows XP должна была поддерживать HT (см., Например, download.microsoft.com/download/5/7/ 7 /… ) и не попасть в такую ​​ловушку. Я предполагаю, что подобная логика была встроена в Linux из какой-то версии ядра.
Timday
6

Более чем вероятно, OEM просто был консервативен. OEM часто поставляются с отключенными расширенными функциями (такими как HT, бит без выполнения, vt и т. Д.). Причина в том, что некоторые редкие обстоятельства могут привести к сбою этих настроек, и люди, которым действительно нужны эти функции, могут так же легко их включить.

Кроме того, некоторые редкие ошибки в ОС приводят к потенциальным проблемам безопасности, когда некоторые функции включены. Например, у технологии виртуализации когда-то была такая проблема. Так что это просто продавец, который консервативен.

Гиперпоточность обычно полезна для интерактивных рабочих столов, таких как машины для программирования. Хотя некоторые люди могут захотеть отключить его, если ваши приложения будут работать на серверах без HT. Просто чтобы уменьшить потенциальные аппаратные различия.

Эрик Фанкенбуш
источник
2
Это почти всегда относится к машинам с выключенным HT. Максимальная совместимость и спасение поставщика от потока странных обращений в службу поддержки.
Патрик Хьюз
5

Гиперпоточность не добавляет новые ядра в процессор. У вас все еще есть одна арифметическая / логическая единица, одна единица с плавающей запятой (...) на ядро. Таким образом, если у вас есть несколько потоков / процессов, которые делают совершенно разные вещи, HTT может улучшить производительность. Но если у вас несколько потоков, выполняющих более или менее одни и те же действия (что не редкость в приложениях с ограниченным числом), производительность может сильно пострадать от HTT.

nikie
источник
2

Может быть, проблемы с согласованием кэша в многопоточном коде? Если у вас есть отдельные кэши ЦП, теоретически возможно, чтобы два потока кэшировали одни и те же данные и одновременно изменяли их с разными значениями. Если в какой-то момент у вас есть унифицированный кеш между процессорами и основной памятью (L2 или L3), то, вероятно, существует какой-то механизм, который предотвратит это, но на младших процессорах с меньшими кэшами, возможно, нет.

С другой стороны, может быть возможно, что включение гиперпоточности на микросхемах, которые его не поддерживают, вызовет код во время POST, поэтому поставщик BIOS просто оставляет его, потому что он не знает, какой тип ЦП будет иметь система.

TMN
источник
Я предполагаю, что существует механизм для решения этой проблемы согласованности, но он может иметь значительное снижение производительности. IIRC, определенная страница памяти не может быть свободно загружена в какую-либо страницу кеша - обычно есть механизм «адреса-карты-на-одном-на-нескольких-страницах». Может быть, два потока могут бороться за несколько страниц кэша, оставляя остальные неиспользованными? (возможно, даже с многоядерным процессором, хотя, по-видимому, с меньшим риском).
Steve314
0

Одна из причин не отключать гиперпоточность на компьютере разработчика состоит в том, что он может скрывать некоторые тонкие многопоточные ошибки. Но это действительно относится только к одноядерному однопроцессорному компьютеру. Многоядерные процессоры, во всяком случае, обнаружат больше многопоточных ошибок во время тестирования.

OTOH, я сомневаюсь, что вы увидите одноядерный процессор с гиперпоточностью по умолчанию. Мой голос на ответ Sleskes.

Steve314
источник
0

Многие старые программы были написаны на одноядерных машинах, и, возможно, в них были ошибки при работе на многоядерной машине. Вероятно, в инструкции действительно говорилось: «Это не работает на многоядерных машинах», просто долгое время гиперпоточность была единственной вероятной многоядерной машиной, которую вы видели в обычном использовании.

Johnb
источник