Влияние производительности на Hyper-Threading

9113
Bonita Montero

Я только что прочитал статью о Heise Online (посмотрите на таблицу, остальное на немецком языке), в которой говорилось, что Hyper-Threading замедляет однопоточные программы, хотя они не используют второй поток ядра. Т.е. если вы отключите HT в BIOS, однопоточное приложение будет работать немного быстрее.

Это правда или ошибка измерения? У кого-нибудь есть источники о тестах, которые утверждают то же самое?

4

4 ответа на вопрос

5
jgorosdev

Это, вероятно, не ошибка измерения. Фактически, это вечные споры о производительности игр, поскольку они обычно рассчитаны на максимальную производительность одноядерных процессоров. Согласно этой статье из статьи Intel от Intel Hyperthreading является:

Технология Hyper-Threading от Intel позволяет воспринимать один пакет физических процессоров как два отдельных логических процессора в операционной системе. Ресурсы процессора, включенные для технологии Hyper-Threading, дублируют, маркируют или совместно используют большинство ресурсов. Совместное использование ресурсов позволяет более эффективно использовать процессор для значительного увеличения производительности, при размере кристалла менее 5% и увеличении потребляемой мощности по сравнению с одним процессором. Однако технология Hyper-Threading не может иметь ожидаемой производительности, эквивалентной многопроцессорному, когда все ресурсы процессора реплицируются.

В приведенной вами таблице Cinebench тестирует одно ядро ​​процессора. Короче говоря, HT (HyperThreading) включает два виртуальных ядра для одного физического ядра (которое будет оценено в тесте). Если тест основан на запуске одного процесса, который не нужно делить, совместное использование ресурсов между двумя ядрами ухудшает результат теста, поскольку баланс, который происходит, когда он активен, не происходит, когда он отключен (Windows и Cinebench видят только один процессор).

Если мы добавим еще один тест от Tom's Hardware, чтобы сравнить его с таблицей, которую вы показали (Cinebench R11.5):

И многопоточный:

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

Вы также можете увидеть здесь, как разные сценарии в разных играх в статье overclock.net привели к результатам, утверждающим, что в некоторых случаях производительность снижается. Я не верю, что это следует воспринимать как «отключение HT улучшает производительность одного потока», но как «игра оптимизирована под максимум 4 ядра» или «не использует преимущества HT». Первое предположение можно проверить, прочитав некоторые статьи, подобные этой, в которых показано, как одноядерная производительность i3 повышает производительность, если HT включен по сравнению с i7, что нет.

Подводя итог, мы увидели, что есть небольшие случаи, когда отключение HyperThreading имеет минимальные улучшения по сравнению с производительностью одного потока, но общего соотношения затрат и выгод недостаточно для заявления об отключении HyperThreading. Что касается ОС и программного обеспечения, предназначенного для архитектуры HT, отключать его не стоит.

Обновленный ответ. jgorosdev 7 лет назад 0
2
Itai

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

Это разработано, чтобы позволить больше распараллеливания происходить на основе того, что большинство программ недостаточно многопоточны. Однако, если вы полностью многопоточны в программе, то вы перерасходуете ресурсы, и производительность падает только из-за дополнительных издержек на поток. Каким бы небольшим это ни было, с приложением, которому удалось использовать 100% ЦП на любом количестве ядер и процессоров, включение HT привело к снижению производительности примерно на 2-3%.

Теперь, в случае изолированной однопоточной программы, похоже, что это не должно иметь значения, поскольку сама программа не может чрезмерно использовать ресурсы, но помните, что ОС также считает, что существуют дополнительные ядра и это может привести к перегрузке ресурсов. Даже если все еще есть неиспользуемые ядра, можно измерить издержки, вызванные планировщиком, который не оптимально размещает поток и привязывает его к одному реальному ядру.

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

0
LawrenceC

Нет тестов, но это, вероятно, правда, основываясь на следующем:

Из статьи в Википедии "Hyper-threading":

... однако при запуске двух программ, требующих полного внимания процессора, может показаться, что одна или обе программы немного замедляются при включении технологии Hyper-Threading. Это связано с тем, что система воспроизведения Pentium 4 связывает ценные ресурсы выполнения, выравнивая ресурсы процессора между двумя программами, что добавляет разное время выполнения.

Это то, что неприменимо, когда SMT отключен - ОС затем распределяет потоки между ядрами, а не аппаратными потоками.

Современные процессоры Intel (и AMD) выполняют « умозрительное выполнение », когда они фактически извлекают и предварительно выполняют инструкции перед указателем текущей инструкции, чтобы иметь результаты, готовые к моменту, когда фактическое выполнение догоняет.

Такие вещи, как непредвиденные ответвления и прерывания, заставляют ЦП выбрасывать свои предположения и должны начинать все сначала, и кажется, что SMT создает больше ситуаций, в которых это может произойти. Для «простых задач», которые не разветвляются или не справляются со многими условиями (например, задачи с графическим процессором), это, вероятно, дает преимущество.

0
Alex Cannon

Когда вы включили HT, ЦП разделяется на два логических ЦП, причем оба ЦП значительно медленнее, чем одноядерное, из которого они вышли, но суммарная мощность превышает 100%. За 4 дня Pentium можно разделить одно ядро ​​процессора на два логических ядра, что примерно на 55% быстрее. С добавлением Hyper Threading в архитектуру Core он стал лучше, чем 55%.

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

Представьте себе занятый сервер с экранной заставкой, интенсивно использующей процессор. Включается экранная заставка, и хотя она имеет низкий приоритет, в конечном итоге она разделяет ядро ​​ЦП на две части, которые на 65% быстрее. Теперь на сервере доступно только 65% процессорного ядра.

Похожие вопросы