Технология Intel Hyper-Threading
Введение
Я уже писал здесь ранее о многоядерных процессорах и многопоточности в целом. Эта статья будет основана на этих статьях для обсуждения технологии Intel под названием Hyper-Threading.
Терминология
Терминология в мире технологий может быть запутанной и легко забываемой, поэтому позвольте мне начать с объяснения того, что я имею в виду, когда использую эти термины. Многоядерный ЦП — это ЦП, который имеет более одного ядра на одной интегральной схеме. Мультичип относится к нескольким интегральным схемам, упакованным вместе. Multi-CPU означает, что несколько отдельных процессоров в одной системе работают вместе. И, конечно же, ЦП — это центральный процессор, который имеет одно или несколько ядер, каждое из которых имеет множество исполнительных блоков (именно здесь и выполняются настоящие математические операции).
Hyper Threading
Так что же такое гиперпоточность? Hyper-threading — это термин, используемый Intel для описания своей технологии, благодаря которой одно ядро ЦП представляется операционной системе как два ядра ЦП. Таким образом, операционная система обращается с ядром так же, как с любым многоядерным процессором, отправляя ему несколько потоков одновременно. Хотя было бы возможно, чтобы ядро с гиперпоточностью выглядело как более чем два ядра, архитектурные сложности ограничили Intel выпуском только ядер с гиперпоточностью, которые выглядят как два ядра.
Это не уловка. Intel разработала архитектуру чипа для обработки нескольких потоков почти так же, как это может делать многоядерный процессор. По сути, Intel продублировала часто используемые части ядра ЦП и позволила этим частям одновременно использоваться отдельными потоками. Поскольку эти участки сердечника разделены (они находятся на одном кристалле, но используют разные его части), потоки не мешают друг другу. Эти ядра с поддержкой гиперпоточности не совсем то же самое, что и многоядерные; не любой поток может выполняться одновременно с другим потоком, он должен использовать отдельную часть ядра для своих операций.
Гиперпоточность является примером одновременной многопоточности (SMT). SMT — это один из двух типов многопоточных схем. Другой тип называется Temporal Multi-Threading (TMT). TMT включает в себя ядро ЦП, выполняющее инструкцию из одного потока, затем инструкцию из другого потока, а затем снова одну из первого потока; это движение вперед и назад между потоками кажется пользователю так, как если бы два потока выполнялись одновременно, хотя на самом деле они делят процессорное время между собой. С помощью SMT инструкции из каждого потока могут выполняться одновременно. Эти две конструкции, конечно, можно комбинировать, чтобы максимизировать производительность.
Пользователи также должны знать, что не все операционные системы поддерживают гиперпоточность. По данным Intel, следующие операционные системы Microsoft полностью оптимизированы для поддержки технологии гиперпоточности:
- Профессиональная версия Microsoft Windows XP
- Microsoft Windows XP Домашняя редакция
- Microsoft Windows Vista Домашняя базовая
- Microsoft Windows Vista Домашняя расширенная
- Microsoft Windows Vista Домашняя Максимальная
- Microsoft Windows Vista для домашнего бизнеса
Также, по данным Intel, следующие операционные системы не полностью оптимизированы для гиперпоточности, и поддержку гиперпоточности следует отключить в настройках BIOS:
- Microsoft Windows 2000 (все версии)
- Microsoft Windows NT 4.0
- Майкрософт Windows МЕ
- Microsoft Windows 98
- Microsoft Windows 98 SE
Иногда некоторые приложения, такие как FireFox, имеют проблемы с гиперпоточностью. Обычный прием для решения этих проблем — запустить программу в режиме совместимости с Windows 98. Для этого нужно щелкнуть правой кнопкой мыши значок приложения, перейти к свойствам, совместимости и установить флажок «Запустить эту программу в режиме совместимости». и выберите Windows 98. Это фактически отключит гиперпоточность для приложения, поскольку Windows 98 не поддерживает гиперпоточность.
Преимущества гиперпоточности
Гиперпоточность имеет много преимуществ. Intel утверждает, что дублирование определенных секций ядра ЦП увеличивает размер ядра примерно на 5 процентов, при этом повышая производительность на целых 30 процентов по сравнению с идентичным вычислительным ядром без гиперпоточности.
Недостатки гиперпоточности
Хотя ядра ЦП с гиперпоточностью не обеспечивают всех преимуществ многоядерных ЦП, они предлагают значительные преимущества по сравнению с одноядерными процессорами. Конечно, всегда полезно знать, каковы недостатки, прежде чем использовать эту технологию. Одним из недостатков во многих приложениях является высокое энергопотребление. Поскольку все области ядра должны быть включены (даже в режиме ожидания), общее энергопотребление ядер с поддержкой многопоточности и всех ядер с поддержкой SMT выше. Без высокого использования улучшений скорости, которые обеспечивает ядро с гиперпоточностью, ядро просто будет потреблять больше энергии. Для многих приложений, включая фермы серверов и мобильные вычисления, такое энергопотребление нежелательно.
Кроме того, если вы сравните ядро ЦП с гиперпоточностью с ядром ЦП без гиперпоточности, вы, вероятно, увидите значительное увеличение перегрузки кеша. ARM утверждает, что это увеличение может составить до 42%. Сравнивая это с многоядерным процессором, где перегрузка кеша снижена на 37%, эта производительность действительно бросается в глаза.
Теперь, прочитав эти недостатки, вы, вероятно, думаете, что ядра с гиперпоточностью нежелательны. И вы правы, в некоторых обстоятельствах. Например, если энергопотребление является основной проблемой в вашей ситуации, то ядра с поддержкой Hyper-Threading (или любое ядро с поддержкой SMT), скорее всего, нежелательны. Тем не менее, даже если в вашем списке требований высокое энергопотребление, ядра с поддержкой Hyper-Threading могут быть желательным выбором. Например, рассмотрим ферму серверов. Фермы серверов, очевидно, должны быть обеспокоены своим энергопотреблением (эти счета могут составлять многие тысячи долларов в месяц!). Однако в современных фермах серверов большая часть серверов виртуализирована. Таким образом, вполне возможно, что у вас есть несколько виртуальных серверов на одном физическом сервере, причем каждому серверу требуется только умеренная или низкая производительность. Вполне возможно, что этот тип конфигурации обеспечит достаточную загрузку ЦП, чтобы получить максимальный прирост производительности от ядра с поддержкой Hyper-Threading при минимальном энергопотреблении.
Как всегда, важно тщательно рассмотреть условия вашей эксплуатации, прежде чем вы решите использовать технологию. Редко существует технология без недостатков. Как правило, только после тщательного анализа преимуществ и недостатков технологии и сравнения их с вашей ситуацией становится ясно, будет ли какая-либо технология выгодна для вас. Гиперпоточность как раз и является такой технологией. Для дальнейшего чтения по этой теме я бы рекомендовал прочитать две мои предыдущие статьи. Во-первых, в моей статье о когерентности кэша объясняется, как многоядерные процессоры получают доступ к кэш-памяти. Во-вторых, в моей статье о сходстве процессоров обсуждается взаимодействие между приложениями и несколькими ядрами. Если у вас есть какие-либо вопросы или опасения по поводу этой статьи, не стесняйтесь, пишите мне по электронной почте, и я сделаю все возможное, чтобы ответить быстро.