Что такое SMT и как оно работает в приложениях — плюсы и минусы
Пока я радую свои графоманские пристрастия написанием детальной технической статьи про «Windows Performance Station», захотелось поделиться своими мыслями о том, что хорошего и плохого приносит SMT в процессоры «AMD» и «Intel», и как тут поможет «Windows Performance Station».
Тем, кому интересна данная тема, добро пожаловать под кат…
Итак, для начала давайте определимся, что такое SMT.
Как говорит нам википедия, SMT (от англ. simultaneous multithreading) это одновременная многопоточность, т.е. несколько потоков выполняются одновременно, а не последовательно, как это происходит во «временно́й многопоточности».
Многие знают эту технологию под названием «Intel Hyper-Threading», про неё уже всё давно написано, но до сих пор я сталкиваюсь с тем что многие разработчики, и, тем более, обыватели не понимают в чём основная суть «одновременного» выполнения нескольких команд одним ядром процессора и какие проблемы это несёт.
Для начала поговорим про временну́ю многопоточность. До реализации технологии SMT в виде «Hyper-Threading» использовалась технология «временно́й многопоточности».
Тут всё просто, представим, что у нас есть один конвейер и один рабочий (Ядро ЦП), который выполняет операции над числами и записывает результат. Предположим, для этих операций ему нужна отвёртка и гаечный ключ. Операционная система (ОС) складывает нашему рабочему на конвейер по порядку одну операцию для отвёртки, а за ней одну операцию для гаечного ключа. Один рабочий в один момент времени может оперировать или только гаечным ключом или только отвёрткой. Таким образом, выкладывая разное количество разных блоков, ОС определяет приоритет выполнения тех или иных операций от разных приложений. Пропорцию одних блоков к другим мы можем указывать внутри ОС, когда указываем приоритет процесса. Именно это и делают все диспетчеры задач в т.ч. и «Windows Performance Station». Это приоритизирование распространяется далее на механизмы SMT и всю работу с конвейерами.
С появлением SMT ситуация становится чуть сложнее.
Представим конвейер и двух рабочих, у которых есть одна отвёртка и один гаечный ключ на двоих. При этом, каждый из них может оперировать либо только отвёрткой, либо только гаечным ключом. Один конвейер условно делится на две половинки вдоль. SMT позволяет сложить на такой конвейер сразу два числа, одно для работы с отвёрткой, а второе для работы с гаечным ключом, поэтому действия этих рабочих выглядят так:
— Первый рабочий получает операцию для отвёртки, а второй, стоящий напротив, в тот же момент времени, операцию для гаечного ключа, после чего оба записывают результат.
Исходя из этого, когда на конвейере находится операция (A и B) с одной стороны и (D и E) с другой стороны — всё отлично, но при распараллеливании цепочки вычислений могут получиться две проблемы:
1. С одной стороны конвейера оказалось действие (A и B) = С, а с другой (D и E) = C,
т.е. нужно записать сначала одно значение C, а потом второе значение C, но не одновременно (конфликт по управлению).
2. С одной стороны конвейера оказалось действие (A и B) = C, а с другой (A и C) = D,
т.е. нужно сначала посчитать C, а потом посчитать D, но не одновременно (конфликт по данным).
Оба конфликта вызывают задержку выполнения инструкций и решаются последовательным выполнением команд. Чтобы уменьшить такие задержки были введены элементы процессора под названием предсказатель переходов и кэш процессора.
Предсказатель переходов, как понятно из названия, осуществляет предсказание 🙂 Предсказывает он вероятность возникновения первой проблемы, когда разные преобразования должны произойти над одним числом.
В свою очередь, кэш процессора, необходим для быстрого решения второй проблемы, когда мы останавливаем решение выражения (A и C) = D и пишем в кэш результат выполнения (A и B) = C, после чего сразу вычисляем (A и C) = D.
Справедливости ради, стоит уточнить, что проблема распараллеливания конвейера появляется и у многоядерных процессоров без SMT, но у многоядерников не возникает момента простаивания процессора, когда на двоих рабочих одна отвёртка, т.к. в такой терминологии у каждого рабочего есть своя отвёртка и свой гаечный ключ.
Все эти пляски вокруг угадывания процессором того, как распараллелить текущие операции, приводят к серьёзным потерям энергии и к ощутимым фризам, когда происходит голодание разнотипных задач на ядрах с SMT.
Вообще, стоит держать в уме, что «Intel» разработала «Hyper-Threading» одновременно с созданием своих первых многоядерных процессоров «Xeon» и, по сути, эту технологию можно считать эдаким компромиссом когда ставится двойной конвейер на одно ядро.
С подачи маркетологов принято нахваливать то, как хорошо одно ядро может выполнять несколько задач одновременно и как повышается производительность «в некоторых сценариях использования», однако про проблемы, присущие концепции SMT принято умалчивать.
Примечательно, что на сайте «Intel» в рекламном ролике показывается скорее двухядерность, нежели «Hyper-Threading», тот кто дочитал до этого момента, наверняка уже догадался почему 🙂
Изображение из видео:
Более точное изображение:
Какой вывод можно здесь сделать и что улучшить?
Особенность отображения загрузки логических ядер в ОС Windows вводит путаницу об информации реальной загруженности ядер с SMT. Если Вы видите, что два соседних ядера заняты
50% это может означать две вещи:
1) оба ядра выполняют два параллельных расчёта и загружены на 50% (тут всё ок).
2) оба ядра выполняют один рассчёт попеременно (как если бы два рабочих через такт передавали друг-другу гаечный ключ).
Поэтому, если Вы видите, что все ядра Вашего процессора с SMT загружены на 50% и выше нагрузка не поднимается, скорее всего это значит, что утилизация процессора составляет 100% но он занят однотипной задачей, которую не может разделить для выполнения на SMT!
Вместе с очевидными плюсами, SMT приносит фризы в чувствительные для времени выполнения задачи (воспроизведение видео/музыки или FPS в играх). Именно поэтому, многие геймеры наблюдают падение FPS при включенном SMT/Hyper-Threading.
Как я и написал ранее, приложение «Windows Performance Station» может сортировать блоки, выкладываемые на конвейер, ещё на этапе обработки задач ядром ОС. С помощью приоритетов и разделения процессов по ядрам процессора, можно выкладывать определённые блоки на конвейер в нужном количестве и класть разнотипные блоки для разных виртуальных ядер, чтобы не наступало голодание разнотипных задач. Именно для этой задачи динамического анализа в «Windows Performance Station» мы объединили нейросеть и диспетчер задач. В итоге, нейросеть анализирует задачу и раскладывает её в зависимости от полученных данных по разным правилам, благодаря чему, каждое ядро в паре SMT выполняет разные задачи.
Благодаря такому подходу, процессоры с SMT в Windows могут более эффективно работать с многозадачностью и многопоточными процессами. И именно поэтому нас весьма порадовало появление SMT в новых процессорах «AMD Ryzen».
Приложение «Windows Performance Station» бесплатное и не содержит рекламы, его можно скачать с нашего сайта по ссылке в спойлере:
Более подробно про Windows Performance Station можно прочитать в моей предыдущей статье
Быстрый ответ: что такое режим SMT в BIOS?
Одновременная многопоточность (SMT) — это метод повышения общей эффективности суперскалярных процессоров с аппаратной многопоточностью. SMT позволяет выполнять несколько независимых потоков, чтобы лучше использовать ресурсы, предоставляемые современными архитектурами процессоров.
Что делает режим SMT?
Одновременная многопоточность (SMT) — это Процессорная технология, которая позволяет нескольким потокам инструкций (потоков) работать одновременно на одном физическом процессоре, повышая общую пропускную способность. Для операционной системы каждый аппаратный поток рассматривается как независимый логический процессор.
Что такое режим SMT Ryzen?
Одна из историй о первых поколениях процессоров Zen от AMD связана с влиянием Одновременная многопоточность (SMT) по производительности. Запустив этот режим, который используется по умолчанию в большинстве ситуаций, пользователи заметили значительное повышение производительности в ситуациях, которыми можно было воспользоваться.
Улучшает ли SMT производительность?
В многопоточных рабочих нагрузках мы увидели средний прирост производительности + 22% при включении SMT. Большинство наших тестов показали прирост производительности от + 5% до + 35%. Несколько рабочих нагрузок показали худшие результаты, в основном из-за конкуренции за ресурсы из-за большого количества задействованных потоков — ограничение здесь — это пропускная способность памяти на поток.
Отключение гиперпоточности увеличивает FPS?
Отключение гиперпоточности может повысить производительность одного ядра и старые игры, закодированные для одноядерной производительности, могут выиграть от этого, но вы не должны получать такой плохой fps на низких настройках.
Включен ли SMT по умолчанию?
smt «для управления одновременной многопоточностью (SMT). Это по умолчанию отключено (пока только на процессорах Intel®).
Как узнать, включен ли SMT?
Включение одновременной многопоточности AMD (SMT)
- На экране «Системные утилиты» выберите «Конфигурация системы»> «Конфигурация BIOS / платформы (RBSU)»> «Параметры процессора»> «AMD SMT Option».
- Выберите один из следующих вариантов: Включено — каждое ядро физического процессора работает как два ядра логического процессора. …
- Сохраните ваши настройки.
Что быстрее Intel или AMD?
Эти процессоры обладают хорошей производительностью ЦП и почти все Процессоры Intel приходят с iGPU. Этот процессор также имеет более высокую тактовую частоту, чем процессоры AMD, за счет более высокого энергопотребления и времени автономной работы.
.
Разница между Intel и AMD:
Intel | AMD |
---|---|
Тактовая частота достигает и превышает 5.0 ГГц | Тактовая частота может достигать 5.0 ГГц, но приводит к большему нагреву |
Что такое SMT?
Одновременная многопоточность (SMT) — это методика повышения общей эффективности суперскалярных процессоров с помощью оборудования многопоточность. SMT позволяет использовать несколько независимых потоков выполнения, чтобы лучше использовать ресурсы, предоставляемые современными архитектурами процессоров.
Что такое двухсторонний SMT?
одновременный Многопоточный (SMT) процессор: -Процессор выдает и выполняет инструкции из файлов. количество потоков, создающих количество логических. процессоры в пределах одного физического процессора. например Intel HyperThreading (HT), каждый физический.
Есть ли у моего процессора SMT?
Перейдите на вкладку «Производительность» в Диспетчер задач. Это показывает текущее использование ЦП и памяти. Диспетчер задач отображает отдельный график для каждого ядра ЦП в вашей системе. Вы должны увидеть удвоенное количество графиков, поскольку у вас есть процессорные ядра, если ваш процессор поддерживает Hyper-Threading.
Что такое SMT (Hyper-Threading) — плюсы и минусы
Пока я радую свои графоманские пристрастия написанием детальной технической статьи про «Windows Performance Station», захотелось поделиться своими мыслями о том, что хорошего и плохого приносит SMT в процессоры «AMD» и «Intel», и как тут поможет «Windows Performance Station».
Тем, кому интересна данная тема, добро пожаловать под кат…
Итак, для начала давайте определимся, что такое SMT.
Как говорит нам википедия, SMT (от англ. simultaneous multithreading) это одновременная многопоточность, т.е. несколько потоков выполняются одновременно, а не последовательно, как это происходит во «временной многопоточности».
Многие знают эту технологию под названием «Intel Hyper-Threading», про неё уже всё давно написано, но до сих пор я сталкиваюсь с тем что многие разработчики, и, тем более, обыватели не понимают в чём основная суть «одновременного» выполнения нескольких команд одним ядром процессора и какие проблемы это несёт.
Для начала поговорим про временную многопоточность.
До реализации технологии SMT в виде «Hyper-Threading» использовалась технология «временной многопоточности».
Тут всё просто, представим, что у нас есть один конвейер и один рабочий (Ядро ЦП), который выполняет операции над числами и записывает результат. Предположим, для этих операций ему нужна отвёртка и гаечный ключ. Операционная система (ОС) складывает нашему рабочему на конвейер по порядку одну операцию для отвёртки, а за ней одну операцию для гаечного ключа. Один рабочий в один момент времени может оперировать или только гаечным ключом или только отвёрткой. Таким образом, выкладывая разное количество разных блоков, ОС определяет приоритет выполнения тех или иных операций от разных приложений. Пропорцию одних блоков к другим мы можем указывать внутри ОС, когда указываем приоритет процесса. Именно это и делают все диспетчеры задач в т.ч. и «Windows Performance Station». Это приоритизирование распространяется далее на механизмы SMT и всю работу с конвейерами.
С появлением SMT ситуация становится чуть сложнее.
Представим конвейер и двух рабочих, у которых есть одна отвёртка и один гаечный ключ на двоих. При этом, каждый из них может оперировать либо только отвёрткой, либо только гаечным ключом. Один конвейер условно делится на две половинки вдоль. SMT позволяет сложить на такой конвейер сразу два числа, одно для работы с отвёрткой, а второе для работы с гаечным ключом, поэтому действия этих рабочих выглядят так:
— Первый рабочий получает операцию для отвёртки, а второй, стоящий напротив, в тот же момент времени, операцию для гаечного ключа, после чего оба записывают результат.
Исходя из этого, когда на конвейере находится операция (A и B) с одной стороны и (D и E) с другой стороны — всё отлично, но при распараллеливании цепочки вычислений могут получиться две проблемы:
1. С одной стороны конвейера оказалось действие (A и B) = С, а с другой (D и E) = C,
т.е. нужно записать сначала одно значение C, а потом второе значение C, но не одновременно (конфликт по управлению).
2. С одной стороны конвейера оказалось действие (A и B) = C, а с другой (A и C) = D,
т.е. нужно сначала посчитать C, а потом посчитать D, но не одновременно (конфликт по данным).
Оба конфликта вызывают задержку выполнения инструкций и решаются последовательным выполнением команд. Чтобы уменьшить такие задержки были введены элементы процессора под названием предсказатель переходов и кэш процессора.
Предсказатель переходов, как понятно из названия, осуществляет предсказание 🙂
Предсказывает он вероятность возникновения первой проблемы, когда разные преобразования должны произойти над одним числом.
В свою очередь, кэш процессора, необходим для быстрого решения второй проблемы, когда мы останавливаем решение выражения (A и C) = D и пишем в кэш результат выполнения (A и B) = C, после чего сразу вычисляем (A и C) = D.
Справедливости ради, стоит уточнить, что проблема распараллеливания конвейера появляется и у многоядерных процессоров без SMT, но у многоядерников не возникает момента простаивания процессора, когда на двоих рабочих одна отвёртка, т.к. в такой терминологии у каждого рабочего есть своя отвёртка и свой гаечный ключ.
Все эти пляски вокруг угадывания процессором того, как распараллелить текущие операции, приводят к серьёзным потерям энергии и к ощутимым фризам, когда происходит голодание разнотипных задач на ядрах с SMT.
Вообще, стоит держать в уме, что «Intel» разработала «Hyper-Threading» одновременно с созданием своих первых многоядерных процессоров «Xeon» и, по сути, эту технологию можно считать эдаким компромиссом когда ставится двойной конвейер на одно ядро.
С подачи маркетологов принято нахваливать то, как хорошо одно ядро может выполнять несколько задач одновременно и как повышается производительность «в некоторых сценариях использования», однако про проблемы, присущие концепции SMT принято умалчивать.
Примечательно, что на сайте «Intel» в рекламном ролике показывается скорее двухядерность, нежели «Hyper-Threading», тот кто дочитал до этого момента, наверняка уже догадался почему 🙂
Изображение из видео:
Более точное изображение:
Какой вывод можно здесь сделать и что улучшить?
Вместе с очевидными плюсами, SMT приносит фризы в чувствительные для времени выполнения задачи (воспроизведение видео/музыки или FPS в играх). Именно поэтому, многие геймеры наблюдают падение FPS при включенном SMT/Hyper-Threading. Так как же нам уменьшить эти минусы и не потерять плюсы SMT?
Вот тут как раз нам и поможет управление задачами в ОС.
Как я и написал ранее, мы можем сортировать блоки, выкладываемые на конвейер, ещё на этапе обработки задач ядром ОС. С помощью приоритетов и разделения процессов по ядрам процессора, можно выкладывать определённые блоки на конвейер в нужном количестве и класть разнотипные блоки для разных виртуальных ядер, чтобы не наступало голодание разнотипных задач. Именно для этой задачи динамического анализа в «Windows Performance Station» мы объединили нейросеть и диспетчер задач. В итоге, нейросеть анализирует задачу и раскладывает её в зависимости от полученных данных по разным правилам, благодаря чему, каждое ядро в паре SMT выполняет разные задачи.
Благодаря такому подходу, процессоры с SMT в Windows могут более эффективно работать с многозадачностью и многопоточными процессами. И именно поэтому нас весьма порадовало появление SMT в новых процессорах «AMD Ryzen».
Приложение «Windows Performance Station» бесплатное и не содержит рекламы, его можно скачать с нашего сайта: winperst*ru
SMT Mode — что это в биосе?
Приветствую. Сегодня я постараюсь простыми словами рассказать про одну функцию, которая позволяет повысить производительность процессора. Она давно уже существует в процах Intel и только относительно недавно появилась у AMD.
SMT Mode — что это такое?
Режим, при котором одно физическое ядро процессора представляется в виде двух виртуальных ядер, которые обрабатывают два потока данных вместо одного.
- Для эффективной работы необходима не только поддержка SMT на аппаратном уровне, но и поддержка операционкой и софтом.
- При выставлении Activated могут быть проблемы с платой, поэтому лучше ставить Auto, тогда SMT все равно будет работать, но проблемы с платой будут минимизированы.
- По факту — 2 потока на ядро, как в технологии Intel Hyper-Threading. 1 поток слабее чем 1 ядро. Но 2 потока могут дать больше производительности, чем 1 ядро. Такие потоки Windows воспринимает как реальные ядра.
Другими словами это технология многопоточности, при включении которой производительность процессора повышается, потому что удается загрузить процессор по полной.
Для примера — посмотрите некоторые характеристики процессоров Ryzen, где видим, на одно ядро приходится два потока:
Потоки можно отключить, но тогда упадет производительность, правда и греться процессор будет меньше.
И опция SMT Mode именно активирует работу этих потоков. Нет смысла ее отключать.
SMT Mode — включать или нет?
При использовании последнего билда Windows 10, современных игр, последних драйверов, если у вас процессор Ryzen не первого поколения, а последнего — то в большинстве случаев отключение потоков снизит производительность. Сегодня многие баги связанные с многопоточностью уже устранили.
В интернете есть информация, что SMT стоит отключать для игр, в итоге повышается FPS. С чем связано? Смотрите, 6 ядер процессора — это 6 настоящих ядер, полноценных. Быстрых. А 12 потоков — это уже не полноценные ядра, могут выполнять больше работы, но не быстрее, потому что каждый такой поток работает медленнее одного ядра. Но суммарно 12 потоков смогут за одно время выполнить больше работы, чем 6 ядер и это при условии что софт оптимизирован под многопоточность. Но многим играм и правда достаточно 6 настоящих ядер (особенно если высокая частота), чем 12 потоков. Но повторюсь — все зависит от игры и от ее оптимизации.
Если игра оптимизирована под многопоточность, то отключение потоков только снизит FPS.
Кстати, что интересно.. у процессоров AMD FX по сути тоже присутствуют потоки. Хоть компания и представила их как 8-ядерные, там по сути 4 ядра и 8 потоков. Но отключить там потоки нельзя.
Когда только вышел Ryzen, то отключение потоков дало плюс в производительности. Но это было раньше. Сейчас уже все оптимизировали, в том числе и планировщик Windows.
Но при разгоне процессора SMT Mode стоит отключать.
Название раздела BIOS содержащий функцию зависит от производителя. Например на плате ASUS Prime X370 Pro функция SMT расположена здесь:
И имеет два варианта значений — Auto/Disabled. В тоже время на плате AsRock B450 Pro4 функция расположена здесь:
OC Tweaker/CPU Configuration
Значения опции — Enabled/Disabled.
Чтобы проверить отключена ли опция или нет, советую использовать CPU-Z — смотрим сколько ядер (Cores) и сколько потоков (Threads):
Утилита бесплатная, маленькая, не грузит ПК, поэтому советую. Можно скачать с офф сайта.
Если SMT Mode отключено — количество потоков будет равно количеству ядер.
Настройка в материнке MSI (раздел Overclocking\Параметры CPU):
Как видите, название может быть или SMT или Simultaneous Multi-Threading, все зависит от производителя/модели материнки.