В чем разница между многопоточностью и гиперпоточностью? [закрыто]

10

Я слышал термины "гиперпоточность" и "многопоточность", но в чем именно разница между ними? Какой процессор Intel их использует?

Роза
источник
2
Вы пытаетесь сравнить вещи, которые не сопоставимы напрямую; просто связано. Это все равно что спросить: "В чем разница между ногой и обувью?" Кроме того, что показало ваше исследование? Где именно вы зацикливаетесь на определении различий, основанных на определениях, которые можно легко найти в Интернете?
Ƭᴇcʜιᴇ007
1
я не знаю ни многопоточности, ни гиперпоточности, меня попросили узнать их
поднялся
1
Нацисты переполнения стека закрыли тему как «не по теме» ... Это очень хороший вопрос, он популярен и не должен закрываться ..
Robbo_UK
superuser.com/questions/133082/…
Сиро Сантилли 冠状 病毒 审查 六四 事件 法轮功

Ответы:

19

Многопоточность относится к общей задаче запуска более чем одного потока выполнения в операционной системе. Многопоточность в более общем смысле называется «многопроцессорность», которая может включать в себя несколько системных процессов (простым примером в Windows может быть, например, одновременный запуск Internet Explorer и Microsoft Word), или она может состоять из одного процесса, который имеет несколько потоков внутри Это.

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

Обратите внимание, что всякий раз, когда программные потоки выполнения пытаются выполнить в любой момент времени больше, чем доступные аппаратные (одновременные) потоки выполнения, эти программные потоки будут «чередоваться» среди доступных ядер. В случае «однопроцессорного» (одно ядро ​​ЦП без гиперпоточности), если у вас более одного программного потока, они всегда будутчередоваться Если у вас 4-ядерный ЦП с гиперпоточностью, это 8 «аппаратных потоков», то есть ЦП может одновременно выполнять 8 потоков выполнения, поэтому, если у вас было 8 программных потоков, пытающихся работать, все они могли работать одновременно ; но если бы у вас было 9 программных потоков, один из аппаратных потоков должен чередовать пару потоков (точная пара выбранных потоков будет зависеть от реализации планировщика операционной системы).


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

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

Возьмем следующий пример, где предполагается, что «1 ядро» работает одинаково во всех примерах:

Пример 1: 2 ядра, без гиперпоточности.
Пример 2: 4 ядра, без гиперпоточности.
Пример 3: 2 ядра с гиперпоточностью.
Пример 4: 4 ядра с гиперпоточностью.

В этом случае Пример 4 всегда будет самым быстрым. Пример 2 иногда может быть примерно таким же быстрым, как в примере 4, для рабочих нагрузок, которые крайне плохо подходят для использования преимуществ оптимизации Hyperthreading.

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

Конечно, пример 1 будет самым медленным из всех примеров, но иногда он может быть примерно таким же быстрым, как и пример 3, когда рабочая нагрузка плохо подходит для гиперпоточности.

В реальных тестах производительности современных процессоров Intel мы обычно обнаруживаем, что гиперпоточность приводит, в общем-то, к повышению производительности на 20-40% по сравнению с отсутствием гиперпоточности (при этом случай «без гиперпоточности» сравнивается с отключением функции гиперпоточности в BIOS). Изредка возникают рабочие нагрузки, в которых отключение гиперпоточности демонстрирует преимущество в производительности , но эти рабочие нагрузки могут быть редкими при реальном использовании. Но если бы у меня был выбор между 4 ядрами с гиперпоточностью или 8 ядрами, предполагая, что каждое ядро ​​имеет одинаковую производительность, я бы каждый раз выбирал 8-ядерный процессор.

allquixotic
источник
2
Точнее говоря, многопоточность и многопроцессорность - это не одно и то же. Потоки делят контекст выполнения с процессом, с которым они связаны, в то время как процессы имеют свои собственные контексты выполнения. Однако для этого ответа это различие не так важно.
Теро Килканен
1
Технология гиперпоточности не была «создана Intel»; для mainline x86 это просто название торговой марки для одновременной многопоточности. Если бы Альфа 21464 была произведена, она была бы одним из первых выдающихся пользователей SMT. Intel действительно впервые выпустила SMT (возможно, за исключением менее известных процессоров) с некоторыми процессорами Pentium 4, но основная идея не была изобретением Intel.
Пол А. Клейтон,
2
Quibble: Hyperthreading не строго медленнее, чем отдельные ядра. Можно придумать (искусственные) случаи, когда совместное использование кэшей L1 является большим преимуществом, чем полное использование ресурсов ядра. Другой специфический случай может быть, когда один поток постоянно активен, а другой кратко обрабатывает прерывистые события; прерывистое пробуждение ядра обходится дороже, чем пробуждение потока на активном ядре. Для потоков с чрезвычайно низким ILP, если конфликт с кэшем не является проблемой, тогда более высокая энергоэффективность при использовании одного ядра может обеспечить более высокую турбобустинг (лучшую производительность).
Пол А. Клейтон,
3
Ответы доступны для редактирования в SU, поэтому, если вы, ребята, хотите улучшить его, пожалуйста, не стесняйтесь. Кроме того, имейте в виду очевидный уровень знаний ОП; даже мой ответ сам по себе, вероятно, более технический, чем они ожидали или хотели. Я намеренно замалчивал некоторые детали в пользу простоты объяснения. Я сомневаюсь, что OP собирается разрабатывать процессоры в ближайшее время и отчаянно должен знать все эти детали. Интересные комментарии, тем не менее.
allquixotic
1
Предлагаемые изменения, которые изменяют содержание (т. Е. Не просто исправление грамматики / опечаток или перефразирование для ясности), скорее всего, будут отклонены.
Пол А. Клейтон,
4

Многопоточность - это термин для параллельной обработки на уровне операционной системы. Процессор не имеет ничего общего с многопоточностью.

Гиперпоточность - это концепция Intel, которая реализует «одновременную» обработку нескольких потоков в одном ядре процессора. Операционная система видит два процессорных ядра, хотя есть только одно физическое ядро.

Теро Килканен
источник