Почему Hyper-Threading предоставляет 2 виртуальных ядра, но не больше?

1414
A.L

Вот объяснение Hyper-Threading, найденного в Википедии :

Для каждого физического процессорного ядра операционная система обращается к двум виртуальным (логическим) ядрам и по возможности распределяет между ними рабочую нагрузку.

Мне интересно, почему у нас нет Hyper-Threading, который обеспечивает 3 или 4 логических ядра на физическое ядро?

1
[Sparc имеет 8-ядерный дизайн с 16-ядерными 128-потоковыми процессорами] (https://en.wikipedia.org/wiki/Simrallelous_multithreading). Однако, IMHO, это поможет, только если у вас много условий блокировки, например, отсутствие кэша. В противном случае достаточно 2 потоков / ядро phuclv 6 лет назад 0

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

1
xavier_fakerat

Это обсуждение было поднято на ServerFault SE: сколько процессоров следует использовать с Hyperthreading?

когда наличие двух разных потоков приводит к тому, что один из них работает хуже?

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

Логическое ядро ​​мало что может сделать, но оно немного увеличивает параллелизм. Это далеко не настоящее ядро. Фактически, он предлагает примерно 30% производительности реального физического ядра.

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

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

Источник: Когда HyperThreading Hurts

1
harrymc

Руководство Техническое руководство пользователя технологии Intel Hyper-Threading содержит некоторые подсказки о том, почему Intel не пыталась использовать более двух потоков на ядро ​​в своих потребительских ЦП, что она и делала в некоторых серверных ЦП.

Объясняя технологию Hyper-Threading, он говорит:

Каждый логический процессор

  • Имеет собственное архитектурное состояние
  • Выполняет свой собственный поток кода одновременно
  • Может быть прервано и остановлено независимо

Два логических процессора совместно используют

  • Исполнение движка и кешей
  • Прошивка и интерфейс системной шины

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

Intel количественно оценил средний прирост производительности по потокам следующим образом:

Процессор с технологией Hyper-Threading может обеспечить прирост производительности на 30 процентов при выполнении многопоточной операционной системы и кода приложения по сравнению с аналогичным процессором архитектуры Intel без технологии Hyper-Threading.

Таким образом, статистический выигрыш двух потоков против одного составляет лишь порядка 30%, что очень далеко от тех 100%, которые можно было бы ожидать, если бы два потока на одном ядре могли удвоить работу одного.

Поэтому я бы посчитал, что если бы Intel включила, скажем, три потока в ядре, статистический выигрыш был бы намного ниже, может быть, порядка 10% или меньше.

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

Для эффективной Hyper-Threading Intel пришлось бы увеличить количество блоков одного типа внутри каждого ядра. Это было сделано именно в микроархитектуре Haswell, которая имеет 4 порта для загрузки / хранения, 4 для целого числа и 2 для филиала, поэтому даже два потока, выполняющих идентичные целочисленные рабочие нагрузки, вероятно, не вызовут большого спора. Тем не менее, Intel по-прежнему придерживается модели двух гиперпотоков на ядро, я думаю, вероятно, для того, чтобы сэкономить на оборудовании, необходимом для большего количества гиперпотоков, или, возможно, даже потому, что современные операционные системы не могут эффективно использовать такие архитектура.

0
Ramhound

Мне интересно, почему у нас нет Hyper-Threading, который обеспечивает 3 или 4 логических ядра на физическое ядро?

Причина в том, что инженеры Intel разработали технологию Hyper-Threading, чтобы при включении обрабатывать только 2 потока на физическое ядро.

Вот официальное описание Intel этой функции:

Технология Intel Hyper-Threading (технология Intel HT) обеспечивает два потока обработки на физическое ядро. Высокопоточные приложения могут выполнять больше работы параллельно, выполняя задачи быстрее.

enter image description here

Источник: Процессор Intel® Core ™ i7-4770 - Нажмите на? рядом со списком на странице спецификации любого процессора Intel.

Спасибо за ответ, но я все еще задаюсь вопросом, почему Intel не разработала HT для 3 или 4 потоков? A.L 6 лет назад 0
Потому что это сложнее сделать. Гиперпоточность, по своей сути, позволяет частям ядра, которые в настоящее время не используются основным потоком, обрабатывать части вторичного потока. В ядре очень много разделов (без точки, имеющей избыточные компоненты, лучше создать другое ядро). Вторичный поток обрабатывается в служебной нагрузке первого ядра, которая уже меньше ресурсов основного потока. Tldr: недостаточно места, лучше сделать другое ядро, чем сделать больше места. Baldrickk 6 лет назад 1
@AL - Если вы хотите узнать конкретную причину, по которой инженеры Intel разработали эту функцию так, как они это сделали, я рекомендую вам обратиться в Intel. Контакты, которые у меня были, которые работали на Intel, не могли бы сказать мне причину. Ramhound 6 лет назад 0
0
otislafayette

Почему не 3 или 4 темы? Или 8? Снижение отдачи. Sun выполнила 8 потоков на ядро, и для вещей, которые требуют много потоков, но не высокой производительности, она работала хорошо, но вы заметите, что тактовая частота была намного ниже, чем у чипов Intel того же времени. Дублирование частей сердечника для большего количества потоков способствует дополнительному накоплению тепла. Новые чипы от Sun и теперь Oracle имеют возможность динамически отключать некоторые или все другие потоки на данном ядре, чтобы обеспечить высокую производительность для однопоточной задачи.

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