Что такое Hyper-Threading - обзор технологии гиперпоточности CPU от Intel

Что такое Hyper-Threading

Тирекс
Тирекс Самый зубастый автор
25 июля 2024

В материале подробно рассмотрим принцип работы Hyper-Threading, распространенные заблуждения о технологии, а также ее преимущества и недостатки.

Изображение записи

Hyper-Threading — технология для одновременного выполнения нескольких потоков команд на физическом ядре процессора. Разработана компанией Intel и впервые представлена в процессорах IPentium® 4 в 2002 году. Hyper-Threading позволяет увеличить плотность вычислений в процессоре, разделяя его ресурсы между несколькими логическими ядрами.

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

Ключевые термины

Для начала разберемся с базовыми понятиями: потоками, ядрами и многопоточностью.

Иллюстрация работы Hyper-Threading.
Иллюстрация работы Hyper-Threading.

Потоки и ядра

Ядро процессора — это основная рабочая единица CPU, которая выполняет инструкции программы. Современные процессоры содержат несколько ядер и могут работать с несколькими задачами одновременно. Например, двухъядерный процессор может параллельно обрабатывать два различных потока команд. 

Поток — это последовательность инструкций, которые CPU выполняет поочередно. Каждый поток — отдельная задача, которую процессор должен обработать.

Многопоточность

Многопоточность (Multithreading) — это техника, при которой CPU выполняет несколько потоков одновременно в пределах одного ядра. Она бывает аппаратной и программной.

Аппаратная многопоточность — это технология, которая позволяет одному ядру процессора выполнять несколько потоков команд одновременно. Ядро может делить свои ресурсы между несколькими потоками. Благодаря этому процессор можно использовать более эффективно, а простаивание сводится к минимуму. 

Для ОС многопоточный процессор выглядит как несколько логических процессоров. Их количество соответствует числу потоков, которые он может обрабатывать одновременно. Hyper-Threading относится именно к аппаратному типу многопоточности.

Программная многопоточность — это управление несколькими потоками внутри одного процесса. Реализуется в коде программы, но поддерживается на уровне ОС. 

Как работает многопоточность процессора

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

  • Хранение информации о потоках. Процессор способен хранить данные о нескольких работающих потоках одновременно.
  • Выделение ресурсов для логических процессоров. Каждый логический процессор имеет свой собственный набор регистров и контроллер прерываний. Регистры — это быстрая память внутри процессора, а контроллеры прерываний обрабатывают запросы на прерывания от различных устройств.

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

Сравнение выполнения задач процессором с многопоточностью и без него изображено на рисунке ниже. Здесь строки — это блоки процессора (например, ALU, FPU), столбцы — временной интервал выполнения задачи, а желтые и оранжевые квадраты — две различные задачи.

Работа процессора без Hyper-Threading и с ним.
В верхней части рисунка изображена работа процессора без Hyper-Threading. Задачи выполняются последовательно. В нижней части рисунка изображена работа процессора с Hyper-Threading. Задачи выполняются параллельно.

При работе над одной задачей процессор редко  занят на 100%. Некоторые блоки могут простаивать из-за задержек в доступе к ресурсам или вовсе не быть нужными. Многопоточность использует их для выполнения второй задачи. Это позволяет одновременно обрабатывать два потока команд на одном ядре.

Блоки процессора (ALU, FPU, LSU), которые используются для выполнения двух потоков (синие и зеленые квадраты).
На изображении показано, как различные блоки процессора (ALU, FPU, LSU) используются для выполнения двух потоков (синие и зеленые квадраты). Красные квадраты показывают, когда оба потока пытаются использовать один и тот же блок. В таком случае возникает временная задержка: второй поток вынужден ждать, пока первый освободит блок.

Преимущества Hyper-Threading

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

Рост производительности

Hyper-Threading увеличивает производительность процессора на 15-30%. Время простоя снижается благодаря эффективному распределению ресурсов CPU между потоками. Такая способность полезна при рендеринге видео, научных расчетах, работе с базами данных и серверными приложениями.

Сокращение времени отклика на команды

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

Экономия электроэнергии

Увеличение производительности при включении Hyper-Threading составляет в среднем до 30% в многопоточных задачах. При этом энергопотребление возрастает всего на 7-10%​.

Таким образом, несмотря на временное увеличение энергопотребления, Hyper-Threading приводит к общей экономии энергии. Это объясняется более быстрым завершением задач. Когда они выполнены, процессор переходит в режим пониженного энергопотребления.

Заблуждение: Hyper-Threading — это удвоение ядер

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

Чтобы узнать количество ядер и логических процессоров в ОС Windows, необходимо открыть диспетчер задач и перейти на вкладку «Производительность». В Linux-системах данную информацию можно получить, например, с помощью команды lscpu, в выводе которой CPU(s) показывает количество физических ядер, а Thread(s) per core — количество логических процессоров в одном ядре.

Что нужно для работы Hyper-Threading

Для работы технологии Hyper-Threading необходимы оборудование и ОС, которые поддерживают данную технологию. А также конфигурация BIOS и оптимизированные приложения.

Оборудование

Многопоточность реализована на процессорах Intel и AMD. У первого производителя она называется Hyper-Threading (HT), у второго — Simultaneous MultiThreading (SMT).

Настройки BIOS

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

Операционная система

Современные версии Windows, Linux и macOS совместимы с Hyper-Threading и способны оптимально распределять задачи между логическими ядрами. Если Hyper-Threading включен в BIOS, проверить его совместимость с можно, выполнив следующие действия.

Инструкция для Windows

  1. Нажмите Ctrl + Shift + Esc, чтобы открыть диспетчер задач.
  2. Перейдите на вкладку Производительность.
  3. Выберите ЦП. Если логических процессоров больше, чем физических ядер, значит Hyper-Threading поддерживается и включен.

Инструкция для Linux

  1. Откройте терминал.
  2. Введите команду lscpu.
  3. Найдите строку Thread(s) per core. Если значение больше 1, то Hyper-Threading поддерживается и включен.

Инструкция для macOS

  1. Нажмите на логотип Apple в верхнем левом углу и выберите Об этом Mac.
  2. Нажмите кнопку Отчет о системе.
  3. В разделе Аппаратное обеспечение найдите информацию о процессоре. Если в описании указано больше потоков, чем ядер, Hyper-Threading поддерживается и включен.

Оптимизированные приложения

Чтобы использовать Hyper-Threading по полной, приложения должны быть оптимизированы. Так они смогут эффективно распределять рабочую нагрузку.

В каких задачах использовать Hyper-Threading

Видеомонтаж и рендеринг

При обработке видео и рендеринге 3D-графики используют сложные алгоритмы, которые требуют значительных вычислительных ресурсов. Программное обеспечение для видеомонтажа (Adobe Premiere Pro, Final Cut Pro) и 3D-рендеринга (Blender, Autodesk 3ds Max) эффективно распределяет задачи на несколько потоков, что позволяет быстрее обрабатывать кадры и эффекты.

Научные вычисления

Многопоточность особенно полезна в научных вычислениях, где обработка больших объемов данных и сложных математических моделей требуют значительных мощностей. Различное ПО, например MATLAB, Wolfram Mathematica и ANSYS, используют многопоточность для параллельного выполнения задач.

Серверные приложения, СУБД

Серверные приложения и системы управления базами данных, например Apache HTTP Server, Microsoft SQL Server и MySQL, используют многопоточность для одновременной обработки множества запросов. Тем самым — повышают общую производительность и скорость ответа сервера.

Игры и интерактивные приложения

Современные компьютерные игры и интерактивные приложения активно используют многопоточность. Она помогает одновременно обрабатывать физику, AI и другие данные.

С помощью Hyper-Threading процессор может обрабатывать больше операций за единицу времени. Это ведет к более  FPS. 

Обработка больших данных (Big Data)

В проектах анализа данных, машинном обучении и искусственном интеллекте Hyper-Threading позволяет эффективно обрабатывать огромные объемы информации. Например, Apache Hadoop и Apache Spark используют многопоточность для параллельной обработки данных, что ускоряет анализ и позволяет быстрее получать результаты.

Для чего Hyper-Threading не подходит

Однопоточные приложения

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

  • Многие старые компьютерные игры, особенно выпущенные до 2000-х годов, были однопоточными. Например, Doom, Quake и StarCraft.
  • Ранние версии офисных пакетов (Microsoft Word, Excel 97) были в основном однопоточными, так как разрабатывались для одноядерных процессоров.
  • Ранние версии веб-браузеров (Internet Explorer 6, Netscape Navigator) в основном работали в однопоточном режиме, так как веб-страницы были менее сложными и особо не требовали вычислительных ресурсов.

Realtime-системы с жесткими временными ограничениями

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

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

Программы с высокой зависимостью между операциями

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

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

Заключение

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