Одновременная многопоточность (SMT)
Коротко: Одновременная многопоточность (SMT) позволяет одному физическому ядру процессора выполнять два (или более) потока одновременно, лучше используя исполнительные блоки. Intel называет это Hyper-Threading.
Подробнее: У ядра много исполнительных блоков, которые при одном потоке часто простаивают, потому что поток ждёт данные из памяти или тормозится зависимостями. SMT добавляет дополнительные регистры и состояние, и второй поток работает в свободных промежутках. Поэтому операционная система видит два логических процессора на ядро.
Подробности
Как это работает:
- На каждое ядро есть продублированные наборы регистров и управление, но только один набор ALU, FPU и кэшей (общих).
- Планировщик каждый такт заполняет свободные слоты исполнения поочерёдно из обоих потоков.
- Если один поток ждёт, другой продолжает вычислять.
Преимущества:
- Примерно на 10–30 % больше пропускная способность при хорошо распараллеливаемой нагрузке (рендеринг, компиляция, серверы, виртуализация). Выигрыш стоит лишь небольшой дополнительной площади чипа (~5 %).
- Меньшая задержка при множестве мелких задач, лучшая отзывчивость под нагрузкой.
Ограничения и недостатки:
- Нет удвоения: оба потока делят исполнительные блоки и кэш. Для вычислительно тяжёлых программ, которые и так исчерпывают ядро, SMT даёт мало или даже замедляет (конкуренция за кэш).
- Скорость одного потока может немного снижаться, когда параллельно работает второй поток.
- Безопасность: общие ресурсы сделали возможными атаки по побочным каналам (Spectre, MDS, «PortSmash»). Некоторые облачные провайдеры и системы поэтому отключают SMT или разделяют клиентов по ядрам.
- Игры: часто почти не выигрывают. Некоторые работают стабильнее без SMT.
Названия:
| Производитель | Название |
|---|---|
| Intel | Hyper-Threading (HT) |
| AMD | SMT |
| IBM Power | SMT до 8 потоков на ядро |
| Apple, мобильные ядра ARM | в основном без SMT, вместо этого больше настоящих ядер |
Включение/выключение: в UEFI («SMT mode», «Hyper-Threading»). Разумно только в особых случаях.
См. также: Hyper-threading и ядра, Ядра процессора, логические процессоры и потоки, Конвейер процессора