Моя компания только что купила новые компьютеры, чтобы заменить старые 2ГБ компьютеры под управлением Windows XP. Кто-то из моей команды заметил, что они пришли с отключенной гиперпоточностью, и велел всем перезагрузиться и включить его. Есть ли польза от программирования на машине с отключенной гиперпоточностью?
13
Ответы:
Да, я работал над приложением, которое работало лучше при работе на компьютере с отключенным HT .
В результате исходный код создавал вдвое больше потоков при запуске на многопоточном компьютере (что, как вы предполагаете, является чем-то вроде HT). Однако пропускная способность этих потоков была очень чувствительна к объему кэша, доступного для потока. При вдвое большем количестве потоков, борющихся за фиксированный объем кеша, доступный кеш на каждый поток был слишком низким, и происходило перебивание: было бы загружено больше пропусков кеша, загружалось бы больше обращений к основной памяти, а производительность значительно снижалась по сравнению с работой с меньше потоков и больше кеша на поток (это то, что вы получаете, если запускаете приложение на компьютере с отключенным HT).
Окончательное решение состояло в том, чтобы приложение лучше проверяло платформу HW и учитывало размеры кеша и объем кеша, который считался необходимым для каждого потока, при определении количества создаваемых потоков. В любом случае проблема быстро исчезла с последующим поколением процессоров, которые удвоили размер кэша (и тогда мы фактически начали видеть скромную выгоду от HT). Тем не менее, весь эпизод оставил долгое и длительное наследие рекомендации всегда отключать HT на любой платформе, на которой работало наше ПО, и коленный рефлекс «на машине не включен HT, не так ли? » Реагировал на любые проблемы с производительностью. (Я думаю, что основная проблема заключается в том, что большинство не-гиков просто не понимают, что такое HT).
источник
Я не знаю технических деталей, но, очевидно, если приложение (или ОС) не оптимизировано для гиперпоточности, гиперпоточность может фактически снизить производительность.
Даже Intel рекомендует отключить его в этом случае:
(Источник: http://www.intel.com/support/processors/sb/CS-017343.htm )
Поэтому, возможно, производитель (или поставщик) хотел быть осторожным.
источник
Более чем вероятно, OEM просто был консервативен. OEM часто поставляются с отключенными расширенными функциями (такими как HT, бит без выполнения, vt и т. Д.). Причина в том, что некоторые редкие обстоятельства могут привести к сбою этих настроек, и люди, которым действительно нужны эти функции, могут так же легко их включить.
Кроме того, некоторые редкие ошибки в ОС приводят к потенциальным проблемам безопасности, когда некоторые функции включены. Например, у технологии виртуализации когда-то была такая проблема. Так что это просто продавец, который консервативен.
Гиперпоточность обычно полезна для интерактивных рабочих столов, таких как машины для программирования. Хотя некоторые люди могут захотеть отключить его, если ваши приложения будут работать на серверах без HT. Просто чтобы уменьшить потенциальные аппаратные различия.
источник
Гиперпоточность не добавляет новые ядра в процессор. У вас все еще есть одна арифметическая / логическая единица, одна единица с плавающей запятой (...) на ядро. Таким образом, если у вас есть несколько потоков / процессов, которые делают совершенно разные вещи, HTT может улучшить производительность. Но если у вас несколько потоков, выполняющих более или менее одни и те же действия (что не редкость в приложениях с ограниченным числом), производительность может сильно пострадать от HTT.
источник
Может быть, проблемы с согласованием кэша в многопоточном коде? Если у вас есть отдельные кэши ЦП, теоретически возможно, чтобы два потока кэшировали одни и те же данные и одновременно изменяли их с разными значениями. Если в какой-то момент у вас есть унифицированный кеш между процессорами и основной памятью (L2 или L3), то, вероятно, существует какой-то механизм, который предотвратит это, но на младших процессорах с меньшими кэшами, возможно, нет.
С другой стороны, может быть возможно, что включение гиперпоточности на микросхемах, которые его не поддерживают, вызовет код во время POST, поэтому поставщик BIOS просто оставляет его, потому что он не знает, какой тип ЦП будет иметь система.
источник
Одна из причин не отключать гиперпоточность на компьютере разработчика состоит в том, что он может скрывать некоторые тонкие многопоточные ошибки. Но это действительно относится только к одноядерному однопроцессорному компьютеру. Многоядерные процессоры, во всяком случае, обнаружат больше многопоточных ошибок во время тестирования.
OTOH, я сомневаюсь, что вы увидите одноядерный процессор с гиперпоточностью по умолчанию. Мой голос на ответ Sleskes.
источник
Многие старые программы были написаны на одноядерных машинах, и, возможно, в них были ошибки при работе на многоядерной машине. Вероятно, в инструкции действительно говорилось: «Это не работает на многоядерных машинах», просто долгое время гиперпоточность была единственной вероятной многоядерной машиной, которую вы видели в обычном использовании.
источник