Найти тему
Mizhgunit

Что такое многопоточность процессора? Потоки важнее ядер?

Оглавление

Всем привет, дорогие друзья. Рад вас видеть! Как же давно я ничего не объяснял простым языком, так что... Вот, исправляюсь. Сегодня поговорим о многопоточности процессоров, а если точнее, то что лучше: 6 ядер и 6 потоков, или 4 ядра, но 8 потоков?

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

Идеальная идея

Идея SMT на мой полу-дилетантский взгляд - это такая же прекрасная идея, как и, например, несколько ядер или кэш L3. И так, начнем с простого:

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

Типа того
Типа того

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

Два потока опознаются ОС как два ядра, НО планировщик ОС в курсе, что два ядра - логические, поэтому мешать друг другу потоки (в большинстве задач) не будут.

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

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

Более понятная картинка
Более понятная картинка

И как это сказывается на производительности?

Как я уже говорил, логические ядра - это не физические, то есть если например условному i9 9900K отключить HT, то его вычислительная мощность останется точно такой же, как и была. Просто использоваться будет сильно менее эффективно.

То есть транзисторов и ядер у нас столько же, но теперь при выполнении задачи часть вычислительных ресурсов процессора простаивает, что не хорошо. Но если пойти в лоб и сравнить 4 ядра и 8 потоков с 6 физическими ядрами, но без HT, то что будет лучше?

-4

Условия такие: все условия одинаковые, кроме ядер процессора. То есть частота памяти, температура в комнате, степпинг, и так далее. Считаем, что идеальное совпадение в обоих случаях, кроме ядер. В одном случае - 4 ядра и 8 потоков, в другом - 6 ядер и 6 потоков.

  • Вопрос: какой процессор будет быстрее?
  • Ответ: все зависит от софта.

Я тут подумал, что вам будет не интересно читать теорию, поэтому решил зайти в биос и сначала отключить у своего i9 4 лишних ядра, а затем вернул два ядра, но выключил HT. Вот скрины CPU-Z обоих случаев:

4 ядра и 8 потоков
4 ядра и 8 потоков
6 ядер и 6 потоков. Оба скрина после запуска ОС, частота во время тестов - 5 ГГц, во время использования AVX - 4.7 ГГц.
6 ядер и 6 потоков. Оба скрина после запуска ОС, частота во время тестов - 5 ГГц, во время использования AVX - 4.7 ГГц.

Я провел два теста: CPU-Z и Cinebench R23, и в обеих есть параметр Multi-Trade Ratio, который показывает разницу между общей производительностью и производительностью на один поток.

MTR 5.14. Производительность чуть выше, чем у 5 полноценных ядер.
MTR 5.14. Производительность чуть выше, чем у 5 полноценных ядер.
Производительность ПОЧТИ как у 5 полноценных ядер.
Производительность ПОЧТИ как у 5 полноценных ядер.

Вот что у нас получилось: 4 ядра с HT практически равны 5 полноценным ядрам, если смотреть на Multi-Trade Ratio. Но, что забавно, 6 полноценных ядер в Cinebench показали МТР 5.3, то есть 6 ядер в этом тесте показали производительность 5.3 ядер. Такое поведение - автоматическое изменение частоты, при нагрузке на одно ядро она, очевидно, выше.

6 ядер почти равны 6 ядрам
6 ядер почти равны 6 ядрам
MTR 5.3 - ниже, чем в тесте CPU-Z. 6 полноценных ядер в 5.3 раза быстрее, чем одно ядро. Скорее всего, связано с частотой.
MTR 5.3 - ниже, чем в тесте CPU-Z. 6 полноценных ядер в 5.3 раза быстрее, чем одно ядро. Скорее всего, связано с частотой.

В общем, 6 ядер и 6 потоков быстрее, но насколько быстрее - зависит от задачи. В реальном использовании разницы практически не будет, что логично: HT повышает эффективную производительность на 20-25%, как и два дополнительных ядра (в нашем случае - увеличение количества ядер на треть примерно равно 33% производительности).

Hyper-Threading - не панацея!...?

У многопотока есть много плюсов, но не всегда оно все работает так, как задумано. Например, в первых поколениях Core i от intel, HT работал не совсем правильно. Приоритетным для загрузки является только первый поток на ядро, тогда как второй задействуется только при полной загрузке всех ядер.

Но по какой-то причине, в старых процессорах потоки грузились по очереди. Если задача могла распараллелиться на 4 ядра, то с HT она нагружала 4 потока, НО раз они загружались по очереди, в работе было только два ядра вместо четырех.

Такое бывает, но в современных условиях встречается... Да практически никогда не встречается, но если вы пользуетесь старыми приложениями, то HT может вызывать некоторые проблемы. Короче, HT - это скорее панацея с исключениями.

Как итог

В современных процессорах мультипоточность позволяет фактически бесплатно увеличить быстродействие на 20-25% без увеличения транзисторного бюджета, при этом, опять же, в современных реалиях, планировщики ОС, сам процессор, и весь софт, которым мы пользуемся, умеет работать с HT.

-11

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

Если было полезно или интересно - не забудь поставить лайк и подписаться на канал. До скорого!

Подпишись на телеграм (там IT-новости), Ютуб (там иногда выходят прикольные видео), и группу ВК (там пока ничего нет, но это только пока).

А если хочешь помочь мне с развитием канала - буду благодарен за каждый репост! Спасибо!

-12