Главная > Компьютеры > Hyper-Threading на самом деле практически не работает

Hyper-Threading на самом деле практически не работает

Hyper-Threading — это когда на самом деле у вашего процессора 4 ядра, а система думает, что ядер 8.

mnogopotochnaya-nagruzka-na-protsessor-htop-vmware

Через Task Manager видно, что одна и та же однопоточная задача раньше занимала 25% процессора, а теперь лишь только 12.5% — и отсюда можно сделать вывод, что либо процессорной мощности стало вдвое больше, либо каждое ядро стало вдвое слабее, якобы «было 4 ядра по 4 GHz, а стало 8 ядер по 2 GHz.

Но всё это не так.

 

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

А это значит, что частота одного ядра уж точно не стала меньше.

 

2. Если загрузить все 8 ядер, восьмью задачами, то общая производительность будет равна производительности без гипер треадинга, соответственно на 4 задачах.

Странно, не правда ли? И производительность ядра не упала, и ядер стало вдвое больше, но общая производительность осталась прежней.

 

3. Финальный эксперимент, который раскрывает тему окончательно: при включенном hyper threading’е 4 однопоточных приложения за единицу времени сделают такое же количество работы, как и 8 однопоточных приложений.

Получается так за счёт того, что от 1 до 4 приложения скейлятся линейно: 1 процесс делает х работы в единицу времени, 2 процесса делают 2х работы в ту же единицу, …, а вот начиная с 5 и далее, количество работы заморожено на пиковом значении 4 процессов, дальше лишь увеличивается время исполнения!

То есть 4 процесса за 10 минут посчитают по 10 функций каждый = 40 результатов.
8 процессов за 10 минут посчитают по 5 функций каждый = 40 результатов!
Речь идёт, напомню, о включенном гипер треадинге!

Получается, дополнительные ядра — не настоящие! Можно не обращать на них внимания и предполагать, что максимум производительности процессора при включенном HT находится на 50%.

Вот такая занимательная математика!


А теперь, объяснение. Я уже много лет назад читал, как работает гипертреадинг. Якобы, в потоках ядер остаются лишние пути исполнения, и чтобы они на тактах не простаивали, их-то HT и использует. Выжимает из ядер оставшиеся соки. Если задачи под это подходят.

Да, это буквально так и работает. 4 настоящих ядра работают на 100% своей производительности каждый, а 4 «виртуальных» ядра — очень слабые, никакие. Рассчитывать на них нельзя.

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

Но нужно понимать, что максимум, на что способен ваш процессор, если смотреть на Task Manager в такой конфигурации — это 50%. Всё, что выше — это уже реальное пропорциональное замедление исполнения.

hyper-threading-na-8-potokov-ne-imeet-znacheniya-tormozit-rabotaet-medlenno

Так выглядят на HT процессоре нагрузки 4 процессов (левая половина) против нагрузки 8 процессов (правая половина). А суммарная выполненная работа, напомню, одинаковая.

Обсуждение

avatar

Дмитрий Сохач
Дмитрий Сохач
2016.10.31 18:10

Откуда эти цифры-то? Поищи в интернете тесты других людей и сам попробуй.
Из моего личного опыта:
когда я писал пачку юнит тестов, пусть даже и в IDEA на Java, для прохождения курса по алгоритмам, то тесты в 1 поток ранались время Х, а в 8 потоков — время X/6. Обрати внимание, что не X/4 (ведь по факту 4 ядра), а X/6, что примерно равно ожиданиям Intel от HT.
C wiki: https://en.wikipedia.org/wiki/Hyper-threading#Performance_claims до 30% перформанса.
В моем случае были все 50% от 4х ядер, как-будто от 6ти.

Дима Стефанцов
Дима Стефанцов
2016.10.31 20:14

Здравствуйте, Дмитрий. Цифры из собственных экспериментов с CPU-bound задачей: сложные запросы в mysql с InnoDB таблицами полностью в оперативной памяти.

Тесты-то я читал ещё много лет назад, и там были цифры от -15% до +60%, очевидно зависит от того, что во что упирается. Но вот теперь — пощупал это сам. Чем с вами и поделился.

То, что у вас 8 потоков отрабатывают быстрее, чем 4 потока — это я прекрасно верю. Это будет так, даже если HT отключите, я думаю. Сравните производительность своих тестов в одинаковых конфигурациях, одинаковым количеством потоков, но с включенным и отключенным HT. Делаю ставку на то, что никакой 50% разницы производительности, которую вы якобы пронаблюдали, не получится и близко.

wpDiscuz