...

Что такое Hyper-Threading

Что такое Hyper-Threading

Будь в курсе последних новостей из мира гаджетов и технологий

iGuides для смартфонов Apple

Технология Intel Hyper-Threading — что это и как работает

Егор

Егор Морозов — 31 января 2017, 16:50

477461-intel-6th-gen-chips.jpg

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

Техническое описание технологии

Начнем с определения, данного на сайте Intel:

    может хранить информацию сразу о нескольких выполняющихся потоках;

160706151145.jpg

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

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

Плюсы и минусы технологии

С учетом того, что кристалл процессора с поддержкой HT физчески больше кристалла процессора без HT в среднем на 5% (именно столько занимают дополнительные блоки регистров и контроллеры прерываний), а поддержка HT позволяет нагрузить процессор на 90-95%, то в сравнении с 70% без HT мы получаем, что прирост в лучшем случае будет 20-30% — цифра достаточно большая.

    Нехватка кэш-памяти. К примеру в современных четырехядерных i5 находится 6 мб кэша L3 – по 1.5 мб на ядро. В четырехядерных i7 с HT кэша уже 8 мб, но так как логических ядер 8, то мы получаем уже только 1 мб на ядро — при вычислениях некоторым программам этого объема может не хватать, что приводит к падению производительности.

Программы, плохо работающие с гиперпоточностью

Традиционно это большинство игр — их обычно бывает трудно грамотно распараллелить, поэтому зачастую четырех физических ядер на высоких частотах (i5 K-серии) более чем хватает для игр, распараллелить которые под 8 логических ядер в i7 оказывается непосильной задачей. Однако стоит учитывать и то, что есть фоновые процессы, и если процессор не поддерживает HT, то их обработка ложится на физические ядра, что может замедлить игру. Тут i7 с HT оказывается в выигрыше — все фоновые задачи традиционно имеют пониженный приоритет, поэтому при одновременной работе на одном физическом ядре игры и фоновой задаче игра будет получать повышенный приоритет, и при этом фоновая задача не будет «отвлекать» занятые игрой ядра — именно поэтому для стриминга или записи игр лучше брать i7 с гиперпоточностью.

Итоги

Пожалуй тут остается только один вопрос — так имеет ли смысл брать процессоры с HT или нет? Если вы любите держать одновременно открытыми пяток программ и при этом играть в игры, или же занимаетесь обработкой фото, видео или моделированием — да, разумеется стоит брать. А если вы привыкли перед запуском тяжелой программы закрывать все другие, и не балуетесь обработкой или моделированием, то процессор с HT вам ни к чему.

Еще раз о Hyper-Threading

Было время, когда понадобилось оценить производительность памяти в контексте технологии 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 бита.

image

Рис.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. Один поток

image

Рис.2 Чтение одним потоком

Максимальная скорость 213563 мегабайт в секунду. Точка перегиба имеет место при размере блока около 32 килобайт.

Опыт №2. 16 потоков на 4 процессора, Hyper-Threading выключен

image

Рис.3 Чтение шестнадцатью потоками. Количество используемых логических процессоров равно четырем

Hyper-Threading выключен. Максимальная скорость 797598 мегабайт в секунду. Точка перегиба имеет место при размере блока около 32 килобайт. Как и ожидалось, по сравнению с чтением одним потоком, скорость выросла приблизительно в 4 раза, по количеству работающих ядер.

Опыт №3. 16 потоков на 8 процессоров, Hyper-Threading включен

image

Рис.4 Чтение шестнадцатью потоками. Количество используемых логических процессоров равно восьми

Hyper-Threading включен. Максимальная скорость 800722 мегабайт в секунду, в результате включения Hyper-Threading почти не выросла. Большой минус – точка перегиба имеет место при размере блока около 16 килобайт. Включение Hyper-Threading немного увеличило максимальную скорость, но падение скорости теперь наступает при вдвое меньшем размере блока – около 16 килобайт, поэтому существенно упала средняя скорость. Это не удивительно, каждое ядро имеет собственную кэш-память первого уровня, в то время, как логические процессоры одного ядра, используют ее совместно.

Выводы

Исследованная операция достаточно хорошо масштабируется на многоядерном процессоре. Причины – каждое из ядер содержит собственную кэш-память первого и второго уровней, размер целевого блока сопоставим с размером кэш-памяти, и каждый из потоков работает со своим диапазоном адресов. В академических целях мы создали такие условия в синтетическом тесте, понимая, что реальные приложения обычно далеки от идеальной оптимизации. А вот включение Hyper-Threading, даже в этих условиях дало негативный эффект, при небольшой прибавке пиковой скорости, имеет место существенный проигрыш в скорости обработки блоков, размер которых находится в диапазоне от 16 до 32 килобайт.

  • Тестирование IT-систем
  • Программирование

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

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

Очевидно, что hyper-threading — это хорошо, потому что за это нужно доплачивать, но что она делает? Самое главное, это то, что вы должны заботиться? Чтобы ответить на эти острые вопросы, мы должны кратко остановиться на том, как процессоры делают свое дело.

Неограниченная сила!

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

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

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

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

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

Hyperthreading (HT) — это имя Intel для одновременной многопоточности . По сути, это означает, что одно ядро ​​ЦП может работать одновременно над двумя проблемами. Это не значит, что процессор может выполнять вдвое больше работы. Только то, что он может обеспечить использование всей своей емкости, решая сразу несколько простых задач.

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

Кто должен заботиться о гиперпоточности?

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

Например, если у вас двухъядерный, гиперпоточный процессор и четырехъядерный процессор без HT, лучше выбрать четырехъядерный вариант. Учитывая, что они близки друг к другу в однопоточном, одноядерном исполнении. Зачем? Потому что четырехъядерный процессор имеет больше физической обработки.

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

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

Традиционно такие операции, как 3D-рендеринг ЦП, кодирование видео и обработка фотографий, создают столько потоков, сколько может выдержать ваш плохой ЦП. Другими словами, многие современные профессиональные приложения требуют много потоков. Вот почему Hyperthreading был ограничен процессорами профессионального уровня, такими как i7 и выше .

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

Большой игровой вопрос

Видеоигры — еще одно основное приложение, которое довольно апатично к Hyperthreading. На момент написания статьи, в 2019 году, новейшие движки видеоигр стали становиться все более насыщенными. Это означает, что процессоры с поддержкой HT будут работать лучше. Старые игры вообще не увидят никакого преимущества, за исключением нескольких игр типа моделирования, в которых интенсивно используются ИИ или другие процессы, ориентированные на ЦП.

Означает ли это, что ваш следующий игровой компьютер должен иметь Hyperthreading? Дело в том, что сейчас мы движемся к рынку массовых процессоров, где 6-, 8- и 12-ядерные процессоры являются нормой. Поэтому гораздо лучше иметь больше физических ядер, где это возможно.

Простой ответ

Надеюсь, приведенное выше объяснение было достаточно ясным, но давайте разберем его суть дела:

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

Гиперпоточность — это отличная технология, но она не представляет необходимости для всех. Теперь вы должны знать, является ли этот «кто-то» вами или нет!

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка / 5. Количество оценок:

Оценок пока нет. Поставьте оценку первым.

При подготовке материала использовались источники:
https://www.iguides.ru/main/gadgets/other_vendors/tekhnologiya_intel_hyper_threading_chto_eto_i_kak_rabotaet/
https://habr.com/ru/articles/248359/
https://ip-calculator.ru/blog/ask/chto-takoe-giperpotochnost-i-pochemu-eto-dolzhno-vas-volnovat/