Пользователи, хоть раз занимавшиеся настройкой BIOS, вероятно, замечали, что там встречается многим непонятный параметр Intel Hyper Threading. И далеко не каждый знает, что это за технология и для чего она создана. Попробуем разобраться, что такое Hyper Threading, как включить использование этой поддержки, а заодно выясним, какие преимущества для работы компьютера дает такая настройка. В принципе, ничего сложного для понимания здесь нет.
Что представляет собой технология Intel Hyper Threading?
Итак, что же это такое? Если не лезть в дебри компьютерной терминологии, а говорить обычным языком, данная технология была создана для увеличения потока команд, одновременно обрабатываемых центральным процессором.

Как правило, сегодня современные процессорные чипы используют свои вычислительные возможности всего лишь где-то на 70 %. Остальное остается, так сказать, про запас, на всякий случай. Что касается обработки потока данных, в большинстве случаев реализуется всего один поток, несмотря на то что процессор может быть многоядерным.
Основные принципы работы
Для увеличения возможностей CPU и была разработана технология Hyper Threading. Она позволяет либо разбивать один поток команд на два, либо добавлять второй к уже имеющемуся. Вот только такой поток является виртуальным, а не работает в физическом плане. Такой подход позволил существенно увеличить производительность процессора, соответственно, и вся система стала работать намного быстрее. Вообще, прирост производительности CPU может колебаться достаточно сильно (от 5 до 80 %), о чем будет сказано отдельно.

Впрочем, как утверждают и сами разработчики, детищем которых стала технология Hyper Threading, до полноценного процессорного ядра она явно не дотягивает. Однако в некоторых случаях ее использование является оправданным, как говорится, на все сто. А если знать суть процессов Hyper Threading (как включить их и применить на практике), результат не заставит себя ждать.
Немного истории
Теперь немного окунемся в историю этой разработки. Впервые поддержка Hyper Threading появилась только в процессорах Intel Pentium 4, а затем ее реализация была продолжена в серии Intel Core iX (где X – серии процессоров: 3, 5, 7) и даже в процессорах для мобильных девайсов серии Atom. Примечательно, что в линейке процессорных чипов Core 2 она почему-то отсутствует.

Тогда, правда, прирост производительности был достаточно слабым, где-то на уровне 15-20 %, что говорило о том, что сам процессор не имел должной вычислительной мощности, а созданная технология как бы обогнала свое время. Впрочем, сегодня Hyper Threading есть практически во всех современных чипах. К тому же для увеличения мощности CPU сам процесс задействует всего лишь 5 % поверхности кристалла, оставляя, таким образом, место для обработки основного потока данных и команд.
Вопросы производительности и конфликтов
Конечно, все это хорошо, но иногда в обработке данных может наблюдаться и замедление работы. Связано это большей частью с так называемым модулем предсказания ветвления или недостаточным объемом кэша, когда происходит его постоянная перезагрузка.
Если говорить об основном модуле, тут ситуация такова, что в некоторых случаях первый поток может затребовать данные из второго, а они в данный момент еще не обработаны или находятся в очереди на обработку. Не менее распространенными можно назвать ситуации, когда ядро центрального процессора имеет слишком сильную нагрузку, а основной модуль, несмотря на это, все равно посылает на него данные. Наконец, некоторые программы и приложения, в частности ресурсоемкие онлайн-игры, могут достаточно сильно притормаживать, хотя бы только потому, что в них отсутствует оптимизация под использование такой технологии.
С играми ведь что получается? Со своей стороны, пользовательская компьютерная система пытается оптимизировать потоки данных из приложения на сервере. Но вот беда – игра-то не умеет распределять потоки данных разного типа, так сказать, сваливая все в одну кучу. По большому счету она на это бывает и вовсе не рассчитана.

Кстати, зачастую в 2-ядерных процессорах рост производительности намного выше, чем, например, в 4-ядерных. У последних просто своих вычислительных мощностей хватает.
Hyper Threading: как включить опцию в BIOS?
С самой технологией и историей ее появления мы немного разобрались. И теперь мы подошли вплотную к пониманию того, что такое Hyper Threading. Как включить заявленную поддержку для использования в работе процессора? Проще простого. Делается это из подсистемы управления (BIOS). Вход осуществляется посредством использования клавиш Del, F1, F2, F3, F8, F12, F2+Del и т. д. Для ноутбуков Sony Vaio предусмотрен специфичный вход при помощи специальной клавиши ASSIST.

В настройках BIOS (если данный тип процессора поддерживает эту технологию) обязательно имеется строка настройки, которая в большинстве случаев выглядит как Hyper Threading Technology (иногда Function). Но, в зависимости от версии BIOS и разработчика подсистемы, настройка этого параметра может располагаться либо в главном меню (Main), либо в расширенных настройках (Advanced BIOS Features). Для задействования технологии необходимо войти в меню параметров и установить значение на включенное (Enabled). Далее, как обычно, изменения сохраняются, после чего следует перезагрузка системы.
Что полезного в технологии Hyper Threading?
Напоследок остается отметить некоторые преимущества использования Hyper Threading. Для чего все это делается, зачем нужно увеличить мощность процессора в плане обработки данных?
Тем, кто работает с ресурсоемкими программами, объяснять ничего не нужно. Наверняка многие знают, что математические, проектировочные, графические, видео- и аудиоредакторы требуют в своей работе не то что много, а очень много системных ресурсов, из-за чего вся система нагружается до такой степени, что начинает просто тормозить. Вот чтобы этого не происходило, и активируется поддержка Hyper Threading.

Впервые технология Hyper-Threading (HT, гиперпоточность) появилась 15 лет назад — в 2002 году, в процессорах Pentium 4 и Xeon, и с тех пор то появлялась в процессорах Intel (в линейке Core i, некоторых Atom, в последнее время еще и в Pentium), то исчезала (ее поддержки не было в линейках Core 2 Duo и Quad). И за это время она обросла мифическими свойствами — дескать ее наличие чуть ли не удваивает производительность процессора, превращая слабые i3 в мощные i5. При этом другие говорят что HT — обычная маркетинговая уловка, и толку от нее мало. Правда как обычно по середине — местами толк от нее есть, но двухкртаного прироста ждать точно не стоит.
Техническое описание технологии
Начнем с определения, данного на сайте Intel:
Технология Intel® Hyper-Threading (Intel® HT) обеспечивает более эффективное использование ресурсов процессора, позволяя выполнять несколько потоков на каждом ядре. В отношении производительности эта технология повышает пропускную способность процессоров, улучшая общее быстродействие многопоточных приложений.
В общем понятно то, что ничего не понятно — одни общие фразы, однако вкраце технологию они описывают — HT позволяет одному физическому ядру обрабатывать одновременно несколько (обычно два) логических потока. Но как? Процессор, поддерживающий гиперпоточность:
- может хранить информацию сразу о нескольких выполняющихся потоках;
Разберем на простом примере:

Допустим перед процессором стоят две задачи. Если процессор имеет одно ядро, то он будет выполнять их последовательно, если два — то параллельно на двух ядрах, и время выполнения обеих задач будет равно времени, затраченному на более тяжелую задачу. Но что если процессор одноядерный, но поддерживает гиперпоточность? Как видно на картинке выше при выполнении одной задачи процессор не занят на 100% — какие-то блоки процессора банально не нужны в данной задаче, где-то ошибается модуль предсказания переходов (который нужен для предсказания, будет ли выполнен условный переход в программе), где-то происходит ошибка обращения к кэшу — в общем и целом при выполнении задачи процессор редко бывает занят больше, чем на 70%. А технология HT как раз «подпихивает» незанятым блокам процессора вторую задачу, и получается что одновременно на одном ядре обрабатываются две задачи. Однако удвоения производительности не происходит по понятным причинам — очень часто получается так, что двум задачам нужен один и тот же вычислительный блок в процессоре, и тогда мы видим простой: пока одна задача обрабатывается, выполнение второй на это время просто останавливается (синие квадраты — первая задача, зеленые — вторая, красные — обращение задач к одному и тому же блоку в процессоре):

В итоге время, затраченное процессором с HT на две задачи, оказывается больше времени, требуемого на вычисление самой тяжелой задачи, но меньше того времени, которое нужно для последовательного вычисления обеих задач.
Плюсы и минусы технологии
С учетом того, что кристалл процессора с поддержкой HT физчески больше кристалла процессора без HT в среднем на 5% (именно столько занимают дополнительные блоки регистров и контроллеры прерываний), а поддержка HT позволяет нагрузить процессор на 90-95%, то в сравнении с 70% без HT мы получаем, что прирост в лучшем случае будет 20-30% — цифра достаточно большая.
Однако не все так хорошо: бывает, что прироста производительности от HT нет вообще, и даже бывает так, что HT ухудшает производительность процессора. Это бывает по многим причинам:
- Нехватка кэш-памяти. К примеру в современных четырехядерных i5 находится 6 мб кэша L3 — по 1.5 мб на ядро. В четырехядерных i7 с HT кэша уже 8 мб, но так как логических ядер 8, то мы получаем уже только 1 мб на ядро — при вычислениях некоторым программам этого объема может не хватать, что приводит к падению производительности.
Отсутствие оптимизации ПО. Самая основная проблема — программы считают логические ядра физическими, из-за чего при параллельном выполнении задач на одном ядре часто возникают задержки из-за обращения задач к одному и тому же вычислительному блоку, что в итоге сводит сводит прирост производительности от HT на нет.
Программы, умеющие работать с гиперпоточностью
Таких много, ибо для вычислений HT это манна небесная — тепловыделение практически не растет, процессор особо больше не становится, а при правильной оптимизации можно получить прирост до 30%. Поэтому ее поддержку быстро внедрили в те программы, где легко можно сделать распараллеливание нагрузки — в архиваторы (WinRar), программы для 2D/3D моделирования (3ds Max, Maya), программы для обрабокти фото и видео (Sony Vegas, Photoshop, Corel Draw).
Программы, плохо работающие с гиперпоточностью
Традиционно это большинство игр — их обычно бывает трудно грамотно распараллелить, поэтому зачастую четырех физических ядер на высоких частотах (i5 K-серии) более чем хватает для игр, распараллелить которые под 8 логических ядер в i7 оказывается непосильной задачей. Однако стоит учитывать и то, что есть фоновые процессы, и если процессор не поддерживает HT, то их обработка ложится на физические ядра, что может замедлить игру. Тут i7 с HT оказывается в выигрыше — все фоновые задачи традиционно имеют пониженный приоритет, поэтому при одновременной работе на одном физическом ядре игры и фоновой задаче игра будет получать повышенный приоритет, и при этом фоновая задача не будет «отвлекать» занятые игрой ядра — именно поэтому для стриминга или записи игр лучше брать i7 с гиперпоточностью.
Итоги
Пожалуй тут остается только один вопрос — так имеет ли смысл брать процессоры с HT или нет? Если вы любите держать одновременно открытыми пяток программ и при этом играть в игры, или же занимаетесь обработкой фото, видео или моделированием — да, разумеется стоит брать. А если вы привыкли перед запуском тяжелой программы закрывать все другие, и не балуетесь обработкой или моделированием, то процессор с HT вам ни к чему.
Было время, когда понадобилось оценить производительность памяти в контексте технологии Hyper-threading. Мы пришли к выводу, что ее влияние не всегда позитивно. Когда появился квант свободного времени, возникло желание продолжить исследования и рассмотреть происходящие процессы с точностью до машинных тактов и битов, используя программное обеспечение собственной разработки.
Исследуемая платформа
Объект экспериментов – ноутбук ASUS N750JK c процессором Intel Core i7-4700HQ. Тактовая частота 2.4GHz, повышаемая в режиме Intel Turbo Boost до 3.4GHz. Установлено 16 гигабайт оперативной памяти DDR3-1600 (PC3-12800), работающей в двухканальном режиме. Операционная система – Microsoft Windows 8.1 64 бита.
Рис.1 Конфигурация исследуемой платформы.
Процессор исследуемой платформы содержит 4 ядра, что при включении технологии Hyper-Threading обеспечивает аппаратную поддержку 8 потоков или логических процессоров. Эту информацию Firmware платформы передает операционной системе посредством ACPI-таблицы MADT (Multiple APIC Description Table). Поскольку платформа содержит только один контроллер оперативной памяти, таблица SRAT (System Resource Affinity Table), декларирующая приближенность процессорных ядер к контроллерам памяти, отсутствует. Очевидно, исследуемый ноутбук не является NUMA-платформой, но операционная система, в целях унификации, рассматривает его как NUMA-систему с одним доменом, о чем говорит строка NUMA Nodes = 1. Факт, принципиальный для наших экспериментов – кэш память данных первого уровня имеет размер 32 килобайта на каждое из четырех ядер. Два логических процессора, разделяющие одно ядро, используют кэш-память первого и второго уровней совместно.
Исследуемая операция
Исследовать будем зависимость скорости чтения блока данных от его размера. Для этого выберем наиболее производительный метод, а именно чтение 256-битных операндов посредством AVX-инструкции VMOVAPD. На графиках по оси X отложен размер блока, по оси Y – скорость чтения. В окрестности точки X, соответствующей размеру кэш-памяти первого уровня, ожидаем увидеть точку перегиба, поскольку производительность должна упасть после того, как обрабатываемый блок выйдет за пределы кэш-памяти. В нашем тесте, в случае многопоточной обработки, каждый из 16 инициируемых потоков, работает с отдельным диапазоном адресов. Для управления технологией Hyper-Threading в рамках приложения, в каждом из потоков используется API-функция SetThreadAffinityMask, задающая маску, в которой каждому логическому процессору соответствует один бит. Единичное значение бита разрешает использовать заданный процессор заданным потоком, нулевое значение – запрещает. Для 8 логических процессоров исследуемой платформы, маска 11111111b разрешает использовать все процессоры (Hyper-Threading включен), маска 01010101b разрешает использовать по одному логическому процессору в каждом ядре (Hyper-Threading выключен).
На графиках используются следующие сокращения:
MBPS (Megabytes per Second) – скорость чтения блока в мегабайтах в секунду;
CPI (Clocks per Instruction) – количество тактов на инструкцию;
TSC (Time Stamp Counter) – счетчик процессорных тактов.
Примечание.Тактовая частота регистра TSC может не соответствовать тактовой частоте процессора при работе в режиме Turbo Boost. Это необходимо учитывать при интерпретации результатов.
В правой части графиков визуализируется шестнадцатеричный дамп инструкций, составляющих тело цикла целевой операции, выполняемой в каждом из программных потоков, или первые 128 байт этого кода.
Опыт №1. Один поток
Рис.2 Чтение одним потоком
Максимальная скорость 213563 мегабайт в секунду. Точка перегиба имеет место при размере блока около 32 килобайт.
Опыт №2. 16 потоков на 4 процессора, Hyper-Threading выключен
Рис.3 Чтение шестнадцатью потоками. Количество используемых логических процессоров равно четырем
Hyper-Threading выключен. Максимальная скорость 797598 мегабайт в секунду. Точка перегиба имеет место при размере блока около 32 килобайт. Как и ожидалось, по сравнению с чтением одним потоком, скорость выросла приблизительно в 4 раза, по количеству работающих ядер.
Опыт №3. 16 потоков на 8 процессоров, Hyper-Threading включен
Рис.4 Чтение шестнадцатью потоками. Количество используемых логических процессоров равно восьми
Hyper-Threading включен. Максимальная скорость 800722 мегабайт в секунду, в результате включения Hyper-Threading почти не выросла. Большой минус – точка перегиба имеет место при размере блока около 16 килобайт. Включение Hyper-Threading немного увеличило максимальную скорость, но падение скорости теперь наступает при вдвое меньшем размере блока – около 16 килобайт, поэтому существенно упала средняя скорость. Это не удивительно, каждое ядро имеет собственную кэш-память первого уровня, в то время, как логические процессоры одного ядра, используют ее совместно.






