Статьи

Процессоры, потоки и процессы: ПК ждет многоядерное будущее?

Процессоры, потоки и процессы: ПК ждет многоядерное будущее?

Многие десятилетия все процессоры имели только одно ядро и один поток. Прошло немало времени до появления первых Dual Core CPU. Теперь у вас может быть 8, 12, 16 или больше ядер в ЦП домашнего компьютера. Современные ПК имеют процессоры, которые могут одновременно обрабатывать множество потоков. Все благодаря разработкам в области проектирования и производства микросхем. Но что такое потоки и почему так важно, чтобы ЦП мог обрабатывать более одного потока? В этой статье читатель найдет ответ на эти и другие вопросы.

Что такое поток?

Проще говоря, поток процессора — набор данных, кратчайшая последовательность инструкций, необходимая для выполнения вычислительной задачи. Это может быть очень короткий список, но он также может быть огромным по длине. Что влияет на это, так это процесс, частью которого являются потоки (как показано ниже).

Процессор

Итак, теперь у нас есть новый вопрос, на который нужно ответить (т.е. что такое процесс?), но, к счастью, решить его так же легко. Если вы используете Windows на своем компьютере, нажмите клавишу Windows и X и выберите «Диспетчер задач» из появившегося списка.

Курс
QA
Вивчайте важливi технології для тестувальника у зручний час, та отримуйте $1300 уже через рік роботи
РЕЄСТРУЙТЕСЯ!

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

Процессор

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

Если вы переключитесь на вкладку «Производительность» в диспетчере задач, а затем выберите раздел ЦП, вы увидите, сколько процессов в настоящее время выполняется, а также общее количество активных потоков.

Каждый раз, когда процесс хочет получить доступ к файлу, будь то в ОЗУ или на накопителе, создается дескриптор файла. Каждый из них уникален для создавшего его процесса, поэтому один файл может иметь множество дескрипторов.

Возвращаясь к потокам, «Диспетчер задач» мало что говорит о них — например, количество потоков, связанных с каждым процессом, не отображается. К счастью, у Microsoft есть еще одна программа под названием Process Explorer, которая поможет в этом.

Процессор

Здесь мы можем увидеть гораздо более подробный обзор различных процессов и их потоков.

Обратите внимание на то, как некоторые программы генерируют относительно небольшое количество последовательностей инструкций (например, хост плагин Corsair iCUE имеет только одну), в то время как другие программы исчисляются сотнями, например, процесс System.

Именно операционная система генерирует большинство этих потоков. Затем ОС приступает к созданию и управлению ими самостоятельно.

Центральный процессор

Конечным пунктом назначения для любого потока является центральный процессор (ЦП). Это устройство берет список инструкций, переводит их на «язык», который он понимает, а затем выполняет предписанные задачи.

Глубоко в недрах процессора специальное оборудование хранит потоки для их анализа, а затем сортирует их список инструкций таким образом, чтобы наилучшим образом соответствовать тому, что процессор делает в данный момент времени.

Процессор

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

Если поток содержит последовательность инструкций «Если…тогда…иначе», схема прогнозирования оценивает наиболее вероятный результат. Затем ответ на это предположение заставляет ЦП копаться в своем хранилище инструкций, а затем выполнять те, которые требуются для логического решения.

Если «прогноз» был верным, то заметное количество времени экономится от необходимости ждать обработки всего потока. Если нет, то это не так уж и хорошо — вот почему разработчики процессоров усердно работают над этим! Современный процессор самостоятельно выбирает наиболее нужный поток данных для обработки в определенный момент времени.

Процессор

Серверные процессоры Intel первой половины 90-х годов

Центральные процессоры 1990-х годов, будь то настольные или серверные, имели только одно ядро, поэтому могли работать только с одним потоком за раз, хотя они могли выполнять несколько инструкций одновременно (известные как суперскалярные).

Серверам и рабочим станциям высокого уровня приходится иметь дело с огромным количеством потоков, а машины эпохи Pentium обычно имели два ЦП, чтобы справиться с рабочей нагрузкой. Однако идея, что процессор может обрабатывать несколько потоков одновременно, существовала уже довольно давно. Современные сервера также используют несколько процессоров на одной материнской плате.

Идея ЦП, выполняющего более одной инструкции потока в своем ядре, также известная как одновременная многопоточность (SMT), должна была подождать. Прошло немало времени для того, чтобы возможности оборудования позволили реализовать такую технологию.

Процессор

Архитектура Intel Northwood принесла многопоточность в массы. 1 ядро, 2 потока в Intel Pentium 4

Это было достигнуто к 2002 году, когда Intel выпустила новую версию процессора Pentium 4. Это был первый ЦП для настольных ПК, полностью совместимый с SMT, с функцией, получившей название технологии Intel Hyper-Threading. Все современные процессоры являются его наследниками.

Мультизадачность

Так как же одно ядро ​​процессора работает с двумя потоками одновременно? Думайте о процессоре как о сложной фабрике, состоящей из нескольких этапов: получение и организация исходных материалов (т. е. данных), затем сортировка заказов (потоков), разбивая их на множество более мелких задач.

Процессор

Точно так же, как линия по производству автомобилей в больших объемах будет работать с различными деталями, одной или двумя за раз, ЦП должен выполнять различные задачи в заданной последовательности, чтобы выполнить заданный набор инструкций.

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

Здесь в игру вступает SMT (Simultaneous multithreading). Аппаратное обеспечение, предназначенное для отслеживания состояния каждой части «конвейера», используется для определения того, может ли другой поток использовать незанятые этапы без остановки текущего потока.

Тот факт, что процессоры для настольных ПК стали многопоточными задолго до того, как они стали многоядерными, показывает, что SMT гораздо проще реализовать. В случае с архитектурой Intel Northwood для управления двумя потоками было задействовано менее 5% всего кристалла.

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

ЦП для настольных ПК обрабатывают не более двух потоков на ядро ​​ЦП, потому что их конвейеры относительно короткие и простые, а анализ, проведенный разработчиками, показал бы, что два — это оптимальный предел. Поэтому мы до сих пор не видим в домашних компьютерах 8 ядер — 24 потока и т.д.

Процессор

ЦП IBM Power10 — 15 SMT8 cores

На противоположном конце спектра огромные серверные процессоры, такие как чипы Intel Xeon Phi или новейшие процессоры IBM POWER, обрабатывают 4 и 8 потоков на ядро ​​соответственно. Это потому, что их ядра содержат множество конвейеров с общими ресурсами.

Эти разные подходы к проектированию ЦП возникают из-за очень разных рабочих нагрузок, с которыми приходится иметь дело чипам.

Центральные процессоры — не единственные микросхемы в компьютере, которым приходится иметь дело с большим количеством потоков. Есть один чип с очень специфической ролью, который обрабатывает тысячи потоков одновременно.

Видеокарты

Когда дело доходит до чрезмерных цифр, процессоры полностью проигрывают видеокартам. Они физически больше, имеют гораздо больше транзисторов, потребляют больше энергии и обрабатывают гораздо больше потоков, чем любой серверный процессор.

Процессор

Видеокарта начального уровня быстрее обрабатывает данные чем 32-ядерный современный процессор AMD Ryzen

Возьмем, к примеру, видеокарту AMD Radeon RX 6800 с чипом Navi 21. Этот процессор состоит из 60 вычислительных блоков (CU), каждый из которых должен одновременно обрабатывать 64 отдельных потока. Это 3840 потоков!

Так как же GPU справляется с гораздо большими задачами, чем центральный процессор?

Каждый CU имеет два набора блоков SIMD (одна инструкция, несколько данных), и каждый из них может работать с 32 отдельными элементами данных одновременно. Все они могут быть из разных потоков, но загвоздка в том, что модуль должен выполнять одну и ту же инструкцию в каждом потоке.

В этом ключевое отличие от ЦП — там, где ядро ​​процессора для настольных ПК будет обрабатывать не более двух потоков, инструкции могут быть совершенно другими, из совершенно несвязанных процессов.

Процессор

Графические процессоры предназначены для выполнения одних и тех же операций снова и снова, как правило, из одних и тех же процессов (технически они известны как ядра, но мы оставим это в стороне), но все это выполняется параллельно.

Как и в случае с IBM POWER10, процессором, предназначенным только для корпоративных серверов, графический адаптер создан для выполнения очень специализированной задачи.

Крупнейшие современные игры с их сложными 3D-изображениями требуют невероятного количества математических вычислений всего за несколько миллисекунд. А для этого нужны потоки в огромном количестве.

Нужно больше потоков

Если вы взглянете на любой обзор ЦП, вы почти всегда увидите два результата Cinebench, теста, который выполняет сложную задачу рендеринга на основе ЦП.

Процессор

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

Cinebench рендерит 3D-графику, как в игре, только один кадр с высокой детализацией. И если вы вспомните, как графические процессоры выполняют множество потоков параллельно для создания 3D-графики, становится очевидным, почему процессоры с большим количеством ядер, особенно с SMT, так быстро справляются с рабочей нагрузкой. Это один из немногих сценариев, где можно реализовать все ядра/потоки процессора.

К сожалению, добавление большего количества ядер просто делает процессор больше и, следовательно, более дорогим, поэтому может показаться, что SMT всегда будет хорошей технологией. Однако многое зависит от ситуации.

Например, процессор AMD Ryzen 9 3950X (12-ядерный процессор с 24 потоками) в 36 различных играх с включенным SMT и без него показывает разные результаты. В некоторых играх производительность будет лучше на 10-16% с включенным SMT, в то время у других хуже на 10-12 %.

Средняя разница, тем не менее, составляла всего 1%, так что это, конечно, не тот случай, когда SMT всегда следует отключать во время игр. Но это вызывает еще несколько вопросов.

Во-первых, почему игра работает на 12% медленнее, если ядра ЦП одновременно обрабатывают два потока? Ключевая фраза здесь — «конфликт за ресурсы».

Процессор

Чем больше потоков может обрабатывать ЦП, тем более важной становится система кэширования в процессоре. Это становится очевидным при изучении процессоров с фиксированным размером кэша L3, независимо от того, сколько ядер активировано.

Чем больше ядер и потоков у чипа, тем большее количество запросов к кешу приходится обрабатывать системе. И это подводит нас к следующему вопросу: поэтому большинство игр не умеет работать с большим количеством потоков/ядер?

Почему игры не используют много потоков?

Вернемся к Process Explorer и посмотрим на несколько игр, а именно Cyberpunk 2077, Spider-Man Remastered и Shadow of the Tomb Raider. Все три были разработаны для ПК и консолей, поэтому можно ожидать, что они будут использовать от 4 до 8 потоков.

Процессор

На первый взгляд, в играх действительно используется множество потоков. Но невозможно, поскольку процессор, используемый в компьютере, на котором запущены игры, поддерживает максимум 8 потоков. Но если мы углубимся в потоки процесса, мы получим гораздо более ясную картину. Давайте посмотрим на Shadow of the Tomb Raider.

Ниже мы видим, что подавляющее большинство этих потоков почти не занимают время выполнения ЦП (второй столбец, отображаемый в секундах). Хотя процесс и ОС создали более сотни потоков, большинство из них выполняются слишком быстро, чтобы даже зарегистрироваться.

Процессор

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

Может показаться, что количество тактов — смешное число, но если процессор имеет тактовую частоту, скажем, 4,5 ГГц, то один цикл занимает всего 0,22 наносекунды. Таким образом, 1,3 миллиарда циклов соответствуют чуть менее 300 миллисекундам.

Конечно, не все игры умеют так, и чем старше проект, тем меньше количество потоков он задействует. Если мы посмотрим на оригинальную Call of Duty 2003 года, то увидим совсем другую картину.

Процессор

Все игры той эпохи были такими — всего один поток для всего. Это связано с тем, что в то время процессоры имели только одно ядро, и относительно немногие из них поддерживали SMT.

В то время как процесс Call of Duty требует один поток, Shadow of the Tomb Raider должным образом одновременно является многопоточным (столько, сколько поддерживает ЦП).

Первоначально аппаратное обеспечение опережало программное обеспечение, когда дело дошло до полного использования всех предлагаемых ядер (с SMT или без него), и нам пришлось ждать несколько лет, прежде чем игры стали полностью многопоточными.

Теперь, когда последние консоли имеют 8-ядерный процессор с поддержкой 2SMT, будущие игры, безусловно, будут больше загружены потоками.

Многопоток – будущее?

Пользователь может получить настольный ПК с процессором, способным обрабатывать 32 потока (AMD Ryzen 9 7950X), и графическим процессором, который может обрабатывать 4096 потоков (Nvidia GeForce RTX 4090).

Это аппаратное обеспечение, конечно же, находится на переднем крае технологий, стоимости и мощности и, конечно же, не является представителем того, что может предложить большинство компьютеров. Но около 10 лет назад картина была совсем другой.

Лучшие процессоры поддерживали 8 потоков через SMT, но среднему ПК обычно приходилось обходиться примерно 4 потоками. Теперь вы можете приобрести процессоры с бюджетом менее 100 долларов, которые работают так же, как лучшие чипы 7-летней давности.

Процессоры, потоки и процессы: ПК ждет многоядерное будущее?

4 ядра, 8 потоков, менее 100 долларов – Intel Core i3-10100 показывает приблизительно тот же уровень производительности, что и Intel Core i7-7700.

Мы можем поблагодарить AMD за это, так как они были первыми, кто предложил множество ядер/потоков по доступной цене. Платформа АМ4 стала революцией в мире домашних ПК. И сегодня оба производителя регулярно борются за то, кто может предложить больше ядер/потоков за доллар.

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

Итоги

Так что же дальше? Если бы мы могли перенестись на десятилетие вперед, увидим ли мы среднестатистического геймера, использующего 128-поточный процессор? Возможно, но очень маловероятно, просто потому, что большинство программного обеспечения до сих пор упирается в мощности одного ядра. Наращивание Single Core производительности имеет важную роль, как и количество ядер. Тем не менее профессиональные создатели графического контента уже используют мощные процессоры и дорогие видеокарты для работы.

Источник: Techspot


Завантаження коментарів...

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: