Всем привет, дорогие друзья. Рад вас видеть! Как же давно я ничего не объяснял простым языком, так что... Вот, исправляюсь. Сегодня поговорим о многопоточности процессоров, а если точнее, то что лучше: 6 ядер и 6 потоков, или 4 ядра, но 8 потоков?
Попутно ответим еще на несколько интересных вопросов: зачем вообще оно надо, почему сейчас его пихают во все современные процессоры, и когда отключение HT может привести к увеличению производительности. Вот теперь давайте начинать!
Идеальная идея
Идея SMT на мой полу-дилетантский взгляд - это такая же прекрасная идея, как и, например, несколько ядер или кэш L3. И так, начнем с простого:
Представим, у нас есть задача, которая требует определенное количество процессорного времени, но сам по себе процессор - это не просто кучка транзисторов, это мать его конвейер по преобразованию информации, который и работает как конвейер. Специфика задач такова, что в данный конкретный момент все блоки конвейера могут быть и не нужны.
Незадействованные блоки просто стоят и ждут своей очереди, иногда - несколько тактов подряд. Ожидание операций ввода-вывода системами мониторинга считается нагрузкой, но незадействованные блоки никакой задачи не выполняют. Так почему бы не сделать второй поток, чтобы загрузить эти блоки чем-нибудь второстепенным?
Два потока опознаются ОС как два ядра, НО планировщик ОС в курсе, что два ядра - логические, поэтому мешать друг другу потоки (в большинстве задач) не будут.
Помимо этого, в случае какой-то проблемы на одном потоке, процессор просто переключится на второй и ядро продолжит выполнять полезную работу.
В общем, давайте запомним: SMT - это технология, которая позволяет одному физическому ядру процессора обрабатывать два потока информации.
И как это сказывается на производительности?
Как я уже говорил, логические ядра - это не физические, то есть если например условному i9 9900K отключить HT, то его вычислительная мощность останется точно такой же, как и была. Просто использоваться будет сильно менее эффективно.
То есть транзисторов и ядер у нас столько же, но теперь при выполнении задачи часть вычислительных ресурсов процессора простаивает, что не хорошо. Но если пойти в лоб и сравнить 4 ядра и 8 потоков с 6 физическими ядрами, но без HT, то что будет лучше?
Условия такие: все условия одинаковые, кроме ядер процессора. То есть частота памяти, температура в комнате, степпинг, и так далее. Считаем, что идеальное совпадение в обоих случаях, кроме ядер. В одном случае - 4 ядра и 8 потоков, в другом - 6 ядер и 6 потоков.
- Вопрос: какой процессор будет быстрее?
- Ответ: все зависит от софта.
Я тут подумал, что вам будет не интересно читать теорию, поэтому решил зайти в биос и сначала отключить у своего i9 4 лишних ядра, а затем вернул два ядра, но выключил HT. Вот скрины CPU-Z обоих случаев:
Я провел два теста: CPU-Z и Cinebench R23, и в обеих есть параметр Multi-Trade Ratio, который показывает разницу между общей производительностью и производительностью на один поток.
Вот что у нас получилось: 4 ядра с HT практически равны 5 полноценным ядрам, если смотреть на Multi-Trade Ratio. Но, что забавно, 6 полноценных ядер в Cinebench показали МТР 5.3, то есть 6 ядер в этом тесте показали производительность 5.3 ядер. Такое поведение - автоматическое изменение частоты, при нагрузке на одно ядро она, очевидно, выше.
В общем, 6 ядер и 6 потоков быстрее, но насколько быстрее - зависит от задачи. В реальном использовании разницы практически не будет, что логично: HT повышает эффективную производительность на 20-25%, как и два дополнительных ядра (в нашем случае - увеличение количества ядер на треть примерно равно 33% производительности).
Hyper-Threading - не панацея!...?
У многопотока есть много плюсов, но не всегда оно все работает так, как задумано. Например, в первых поколениях Core i от intel, HT работал не совсем правильно. Приоритетным для загрузки является только первый поток на ядро, тогда как второй задействуется только при полной загрузке всех ядер.
Но по какой-то причине, в старых процессорах потоки грузились по очереди. Если задача могла распараллелиться на 4 ядра, то с HT она нагружала 4 потока, НО раз они загружались по очереди, в работе было только два ядра вместо четырех.
Такое бывает, но в современных условиях встречается... Да практически никогда не встречается, но если вы пользуетесь старыми приложениями, то HT может вызывать некоторые проблемы. Короче, HT - это скорее панацея с исключениями.
Как итог
В современных процессорах мультипоточность позволяет фактически бесплатно увеличить быстродействие на 20-25% без увеличения транзисторного бюджета, при этом, опять же, в современных реалиях, планировщики ОС, сам процессор, и весь софт, которым мы пользуемся, умеет работать с HT.
Так что отключать его нет смысла. Нет смысла и покупать старые процессоры без HT, а в современных процессорах он и так есть. При этом он дает ощутимый прирост эффективности использования ресурсов, вот так вот.
Если было полезно или интересно - не забудь поставить лайк и подписаться на канал. До скорого!
Подпишись на телеграм (там IT-новости), Ютуб (там иногда выходят прикольные видео), и группу ВК (там пока ничего нет, но это только пока).
А если хочешь помочь мне с развитием канала - буду благодарен за каждый репост! Спасибо!