EMZETT.
Войти

Одновременная многопоточность (SMT)

Коротко: Одновременная многопоточность (SMT) позволяет одному физическому ядру процессора выполнять два (или более) потока одновременно, лучше используя исполнительные блоки. Intel называет это Hyper-Threading.

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

Подробности

Как это работает:

  • На каждое ядро есть продублированные наборы регистров и управление, но только один набор ALU, FPU и кэшей (общих).
  • Планировщик каждый такт заполняет свободные слоты исполнения поочерёдно из обоих потоков.
  • Если один поток ждёт, другой продолжает вычислять.

Преимущества:

  • Примерно на 10–30 % больше пропускная способность при хорошо распараллеливаемой нагрузке (рендеринг, компиляция, серверы, виртуализация). Выигрыш стоит лишь небольшой дополнительной площади чипа (~5 %).
  • Меньшая задержка при множестве мелких задач, лучшая отзывчивость под нагрузкой.

Ограничения и недостатки:

  • Нет удвоения: оба потока делят исполнительные блоки и кэш. Для вычислительно тяжёлых программ, которые и так исчерпывают ядро, SMT даёт мало или даже замедляет (конкуренция за кэш).
  • Скорость одного потока может немного снижаться, когда параллельно работает второй поток.
  • Безопасность: общие ресурсы сделали возможными атаки по побочным каналам (Spectre, MDS, «PortSmash»). Некоторые облачные провайдеры и системы поэтому отключают SMT или разделяют клиентов по ядрам.
  • Игры: часто почти не выигрывают. Некоторые работают стабильнее без SMT.

Названия:

ПроизводительНазвание
IntelHyper-Threading (HT)
AMDSMT
IBM PowerSMT до 8 потоков на ядро
Apple, мобильные ядра ARMв основном без SMT, вместо этого больше настоящих ядер

Включение/выключение: в UEFI («SMT mode», «Hyper-Threading»). Разумно только в особых случаях.

См. также: Hyper-threading и ядра, Ядра процессора, логические процессоры и потоки, Конвейер процессора