Что такое гиперпоточность и как она работает?

Я недавно слышал термин гиперпоточность, что такое гиперпоточность и почему это важно?

6 ответов

Решение

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

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

В Hyper-Threading два потока могут работать на одном однопоточном ядре. Когда поток в рассматриваемом ядре останавливается или находится в состоянии остановки, гиперпоточность позволяет ядру работать вместо этого во втором потоке.

Гиперпоточность заставляет ОС думать, что процессор имеет удвоенное количество ядер и часто дает улучшение производительности, но только в районе 15-30% в целом - хотя в некоторых обстоятельствах может фактически наблюдаться снижение производительности (=<20%).

В настоящее время большинство чипов Atom и все i7 (и Xeon-эквивалентные чипы) имеют гиперпоточность, как и некоторые старые P4. В случае с Atoms это отчаянная попытка улучшить производительность без значительного увеличения энергопотребления; в случае i7s он отличает их от чипов i5.

Сложная обработка не принесет много пользы от HT, но определенные (простые, многопоточные) задачи, такие как кодирование видео, выигрывают от HT. На самом деле в этом не так много...

Когда одноядерный может действовать как двухъядерный

это гиперпоточность

В деталях

Внедрение Intel технологии одновременной многопоточности известно как технология Hyper-Threading, или технология HT.

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


Гиперпоточность позволяет одному процессору выполнять два потока одновременно, но не во всех условиях.

Гиперпоточность не удваивает производительность системы, она может повысить производительность за счет лучшего использования незанятых ресурсов, что приводит к большей пропускной способности для определенных важных типов рабочей нагрузки. Приложение, работающее на одном логическом процессоре занятого ядра, может ожидать чуть более половины пропускной способности, которую оно получает, работая в одиночку на процессоре без гиперпотока. Улучшения производительности Hyper-Threading сильно зависят от приложений, и в некоторых приложениях может наблюдаться снижение производительности при использовании Hyper-Threading, поскольку многие ресурсы процессора (например, кэш) распределяются между логическими процессорами.

Благодаря технологии Intel Hyper-Threading каждое ядро ​​может иметь два логических процессора, которые совместно используют большую часть ресурсов ядра, таких как кэш-память и функциональные блоки.

Основная функция

Гиперпоточность заключается в увеличении количества независимых инструкций в конвейере; он использует суперскалярную архитектуру, в которой несколько команд работают с отдельными данными параллельно

Intel говорит, что гиперпоточность очень эффективна, потому что она использует ресурсы, которые в противном случае были бы простаивали или использовались недостаточно.

Ссылки:

Википедия
Переполнение стека
Многоядерное программирование Digital_Edition стр. 8

Чтобы расширить то, что уже было сказано, гиперпоточность означает, что одно ядро ​​ЦП может поддерживать два отдельных контекста выполнения и быстро переключаться между ними, эффективно эмулируя два ядра на аппаратном уровне.

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

Ядро с гиперпоточностью имеет только один основной исполнительный блок, но некоторые другие части ЦП, связанные с инструкциями по подготовке для обработки и поддержания состояния выполнения, дублируются.

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

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

Я так понимаю, давайте рассмотрим небольшой пример, который не совсем соответствует действительности, но подчеркивает суть...

Допустим, у нас есть процессор, которого с этого момента будем называть Тоддом .

У Тодда также есть несколько рук, скажем, четыре (во многом как у Тома Вудраффа-младшего Горо). Это версия логических элементов процессора Тодда.

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

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

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

Если мы дадим Тодду второе ухо (чтобы он теперь выглядел красиво и симметрично), он сможет получать две инструкции одновременно.

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

Теперь... Я знаю, о чем вы можете подумать; а что, если одна инструкция требует, чтобы он использовал все свои руки, а вторая инструкция требует, чтобы он использовал обе левые руки?

Что ж, к сожалению, у Тодда было дополнительное ухо, но не было дополнительных рук, так что в этом случае второй инструкции придется подождать, и он не более (или менее) эффективен, чем когда у него было только одно ухо.

Итак, вот вам история о том, как Тодд, наш мутант, имитирующий процессор, может искусственно повысить эффективность (то есть производительность), не имея при этом никаких дополнительных рук.

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

Я думаю, в рекламе лучше звучит фраза «наши ядра могут выполнять в два раза больше потоков», чем «мы сократили часть затрат, позволив ядрам совместно использовать оборудование».

Другие вопросы по тегам