Добрый день читатели моего блога.
Наверняка многие при выборе процессора, при просмотре обзора или отзыва на CPU встречали такое понятие, как многопоточность. В целом из таких обзоров становится ясна отличительная черта - вроде бы чем больше потоков, тем больше производительность. В этой статье разберем так ли это и как вообще это работает.
Что такое гиперпоточность?
Начну с истории. В ноябре 2002 года выходит процессор компании Intel под названием Pentium 4. Продукт, построенный на принципиально новой архитектуре NetBurst обладал множеством нововведений, одним из которых являлась технология hyper-threading — гиперпоточность. Для объяснения работы этой технологии давайте представим процессор в виде сборочного автомобильного конвейера.
По нему продвигаются будущие автомобили, в которые рабочие постепенно устанавливают различные детали. Подобие такого конвейера существует в ядре каждого процессора, только вместо автомобилей там множество задач, которые нужно выполнить. Как и на автомобильном конвейере, в ядре процессора может произойти замедления работы или полная остановка ввиду того, что смежные подразделения не успевают выполнять свою работу и поставлять на конвейер нужные комплектующие. В случае процессора зачастую процессор слишком долго ждет данных из медленного кэша третьего уровня или оперативной памяти.
В Intel придумали во время данного простоя загрузить простаивающее ядро еще одним конвейером. Как если бы рабочий на линии, видя что очередь остановилась, разворачивался к другому конвейеру и продолжал работать там, пока основная линия не сдвинется.
У всей этой истории прослеживается несколько особенностей:
- Дополнительный поток не является еще одним полноценным ядром. Он использует всё тот же кэш и все те же ресурсы ядра, на котором исполняется основной поток. Если основное ядро работает полноценно то, надобности и смысла в еще одном потоке нет. Ну и дополнительный поток не может обладать такой же производительностью, как и основной.
- ПО должно быть оптимизировано под многопоточность иначе в лучшем случае не будет прироста производительности, в худшем, приложение будет работать некорректно.
- Работа многопоточности будь то hyper-threading от Intel и SMT от AMD сопровождается повышенным тепловыделением.
Если говорить про дальнейшую историю то Intel когда Intel по пути многоядерности - не смогла реализовать поддержку hyper-threading в свои продуктах вплоть до 2008 года и выхода первых процессоров линей core i7. С тех времен Intel старалась разделять свои продукты следующим образом - только в линей i7 есть hyper-threading. Только в последней 10 серии процессоров они нарушили данную политику.
Насколько полезно?
Многие думают, что hyper-threading это очень полезная вещь, ведь девять поколений процессоров прослеживалась четкая тенденция - линейка i7 всегда производительней линейки i5 при том же количестве ядер и тех же частотах. Однако на самом деле столь драматичная разница достигалась совсем другим - в линейке i7 всегда было больше кэша третьего уровня. Именно увеличенный кэш является причиной резкого скачка производительности, а не хваленая многопоточность. Лишь в некоторых специально оптимизированных по многопоточность приложениях можно ощутить измерить повышение производительности при прочих равных.
Что там у AMD?
Если говорить про AMD, то они представили свою технологию многопоточности SMT вместе со своей линей Ryzen в 2017. Технология работает аналогично hyper-threading и имеет все те же ранее описанные особенности.
Говоря про обе технологии можно даже заметить что при отключении их в BIOS в некоторых приложениях можно ощутить даже увеличение производительности. Сейчас такое явление можно встретить крайне редко, ведь большинство разработчиков хоть немного, но оптимизировали свои приложения под "многопоток".
Вывод
При выборе процессора задайте себе вопрос - насколько программы, которые вы будете использовать дружат с hyper-threading или SMT? Если ответ не очень - лучше обратить внимание на другие характеристики процессора, такие как количество ядер, частота, количества кэша L3.
Спасибо за прочтение.