Чем отличается процессор CPU от GPU. Разбираемся, почему в одном восемь ядер, а в другом тысячи

Когда речь идет о мощности компьютера, два основных компонента обычно приходят на ум: центральный процессор (CPU) и графический процессор (GPU). В первую очередь кажется, что они очень похожи, потому что оба обрабатывают большое количество вычислений. Но если рассмотреть его более тщательно, становится очевидным, что их физиология и методы работы совершенно по-разному, как у двух спортсменов, каждый из которых является лучшим в своем виде спорта.

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

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

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

Зачем нужны CPU и GPU

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

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

Каждый чип выполняет свою функцию.

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

GPU: ускоряет обработку и вывод графики в режиме реального времени; полезен в играх, рендеринге видео и 3D-программах; легко воспроизводит 4К- и 8К-видео с высоким битрейтом (плотностью); позволяет использовать несколько мониторов; ускоряет оффлайн-ИИ-функции; и быстрее выполняет простые и повторяющиеся задачи.

Их основное отличие заключается в том, что CPU быстро выполняет сложные процессы один за другим, в то время как GPU может обрабатывать тысячи простых процессов одновременно.

Посмотрим на детали, из которых состоят эти чипы, чтобы понять, как это происходит.

CPU и GPU — это разные типы процессоров, заточенные под разные задачи. CPU, или центральный процессор, — как универсальный мастер: он справляется с одной задачей за раз, но делает это очень быстро и точно, поэтому идеален для работы операционной системы, открытия программ и общих вычислений. У него мало ядер — обычно от двух до восьми, — но каждое мощное и гибкое. GPU, или графический процессор, заточен под выполнение тысяч одинаковых простых операций одновременно. Именно поэтому в нём может быть не восемь, а тысячи ядер — они слабее, зато работают в унисон. Такой подход незаменим в играх, рендеринге видео или обучении нейросетей, где нужно быстро обработать огромные объёмы данных.

Основная структура обоих чипов очень похожа

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

CPU состоит из следующих компонентов: несколько сложных ядер, количество которых составляет от 1 до 24 в обычных домашних компьютерах; контроллер памяти, который позволяет работать с RAM; кэш трёх уровней (L1 на каждом ядре, L2 на нескольких ядрах, L3 на весь процессор); кольцевая шина для связи между компонентами; и дополнительный блок, который позволяет чипу связываться с остальными компонентами компьютера.

GPU состоит из множества простых ядер, контроллера памяти для связи с VRAM и обычно двухуровневого кеша (L1 на ядро и L2 на процессор). Планировщик для управления компонентами (для мультипроцессоров в потоке) Интерфейс для взаимодействия с CPU

Набор компонентов имеет общие черты, как видно.

По сравнению с другими процессорами, их основным отличием является то, что CPU может выполнять от одной до в среднем 32 операций за раз, а GPU может выполнять тысячи операций.

CPU выполняет сложные инструкции последовательно одна за дрyгой.

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

CPU и GPU используют разные ядра, чтобы компенсировать эти различия. Возможности процессора и количество тех самых ядер напрямую зависят от их «состава».

Но ядра в CPU и GPU абсолютно разные

Давайте определимся, что такое «ядро» в процессоре.

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

Ядро выполняет эту задачу, выполняя сложение, вычитание, умножение, деление, логические операции (И, ИЛИ, НЕ), а также сравнение чисел с помощью различных арифметико-логических модулей ALU.

Это ядро в процессоре, которое отвечает за работу операционной системы и всех запущенных программ.

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

Чтобы это произошло, ядро CPU должно выполнять все эти операции в их невероятном разнообразии и моментально переключаться между ними.

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

Расчет пикселей в изображении, генерация видеопотока, вычисление геометрии и растирание графики — все это процессы, которые выполняет CPU плоxо.

Это можно исправить, увеличив количество ядер, но упрощая икс.

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

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

Таким образом, GPU ускоряет все операции с изображениями.

Чтобы понять, чем они отличаются друг от друга на физическом уровне, мы рассмотрим устройство ядер CPU и GPU.

Ядра CPU, часть 1. Универсальнее и быстрее, но очень сложные

Большинство современных CPU высокого класса ядер разделены на энергоэффективные и производительные с высокой тактовой частотой.

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

Например, в процессоре Intel Core i9-14900K есть 8 мощных P-ядер и 16 энергоэффективных Е-ядер.

Здесь я опишу строение более сложного и мощного P-ядра.

Как инструкция становится понятной процессору

Как инструкция становится понятной процессору

Для начала рассмотрим задачу «Ввести текст в Word». максимально простой вариант

1. Word запускает процесс ввода текста в операционной системе Windows. 2. Эта задача интерпретируется Windows в руководстве по языку системы. 3. Инструкции Windows смешиваются с инструкциями самой системы, фоновыми программами и другими программами. 4. Поток поступает в процессор. 5. Инструкции разбиваются процессором и отправляются на одно или несколько ядер. Инструкции декодируются ядром на бинарный язык, который транзисторы понимают. Затем ядро разделяет декодированные инструкции на микропроцессы и обрабатывает их в последовательности, которую сам определяет. 8. Результат записывается в оперативную память и появляется на экране.

Все это происходит за десятые одной наносекyнды, или миллиардной секунды, в нескольких этапах.

Раздел Front End использует информацию из кэша третьего уровня L3 и оперативной памяти RAM в P-ядре для первичной сортировки; затем эта информация передается в Back End для выполнения.

Если процедуру упростить до уровня отдельных модулей в одном ядре, мы получаем последовательность, представленную ниже:

Front End: Модули извлечения и предсказания ветвлений определяют порядок обработки поступивших инструкций; Кэш процессора копит инструкции для декодирования в нужном порядке. Инструкции превращаются в микрооперации с помощью декодера.

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

Теперь мы поговорим о том, как обрабатывается задача в единой связке внутри ядра.

Модуль извлечения интрукций и предсказания ветвлений (Fetch & Predict) является первым местом, куда попадает задача, когда она попадает в Front End. Модуль анализирует полученные данные и на основе прошлых инструкций определяет, когда следует запустить следующий процесс.

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

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

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

Иногда функции не декодируются сразу; вместо этого они накапливаются в отдельном кэше декодирования, а затем могут быть переведены в один пакет для повышения энергоэффективности.

Микрооперации передаются в Back End, вторую часть ядра, после их декодирования.

Ядра CPU, часть 2. Вычислительный модуль ALU как главная сила любого ядра

Микропроцессы uOp поступают в модули вычисления ALU различных типов из распределителя. Эти модули являются наиболее универсальными и сложными в архитектуре ядра CPU.

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

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

В конце концов, микрооперация попадает в арифметико-логический модуль ALU. То есть там, где и происходит тот самый процесс преобразования, который дал названию процессору CPU P.

ALU (Arithmetic Logic Unit) является центральным модулем ядра и выполняет преобразования разного типа из арифметики и логики.

В CPU есть разные модули ALU для каждой операции. Одним из вариантов является простое сложение и вычитание целых чисел, другой — умножение, а третий — операции с плавающей запятой с разной точностью (простые FP32 и сложные FP64), а также операции с дробями и десятичными числами. ALU предназначены для обработки векторов.

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

Как видно, вычислительные модификации ALU различного типа позволяют одному ядру CPU выполнять множество различных операций. Однако их устанавливают не так часто из-за сложности ядра — в среднем не больше 24 штук.

Это означает, что CPU может одновременно выполнять несколько десятков операций.Мы рассмотрим его соотношение с GPU.

Ядра GPU. Тут вычислительный модуль ALU простой, но их много

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

Рассмотрим, как устроен вычислительный модуль GPU на примере NVIDIA RTX 3090ti, архитектура которой хорошо изучена. GPU в процессорах M от Apple, особенно M3 и новее, значительно отличаются от всей индустрии, и его архитектура должна быть темой отдельной статьи.

В видеокартах RTX 3080 и RTX 3090ti используется процессор GA102, который содержит 10752 CUDA ядер после высококачественной литографии.

В центре чипа GA102 большая часть ядра с иерархической структурой.

Вся область графических ядер делится на 7 графических кластеров GPC (Graphics Processor Cluster).

▪︎ Каждый кластер состоит из 12 потоковых мультипроцессоров SM (Streaming Multiprocessor) и одного растрово-геометрического движка.

Каждый SM состоит из одного ядра трассировки лучей и четырех ворпов.

Наконец, в каждом ворпе находятся 32 ядра CUDA (шейдерные) и одно ядро тензора.

В общей сложности получено 10752 CUDA ядер, 336 тензорных ядер и 84 трассировочных ядра.

Ядра CUDA состоят из иx ALU, которые являются основным вычислительным элементом CPU. Они выполняют простые операции умножения и сложения, а также некоторые дополнительные операции, такие как смещение и маска. Используются для просчета игровой графики.

Нейронные ядра необходимы для определения геометрии и работы нейронных сетей, а также для умножения и складывания матриц.

Трассировочные ядра для трассировки лучей используют уникальные алгоритмы.

Ядра GPU выполняют простые логические операции по сравнению с ядрами CPU, как видно.

В нем отсутствуют предсказатели ветвлений, распределитель для непоследовательного выполнения процессов и ALU с более точными вычислениями с плавающей точкой формата FP64 — инструмент для подсчета, более гранулярный.

Таким образом, ядра меньше и каждое потребляет меньше энергии, чем CPU. Например, 3090ti имеет частоту 1560 МГц. Однако, учитывая количество вычислительных блоков, общее потребление видеокарты составляет почти 450 Bt.

Я считаю, что пришло время сделать вывод.

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

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

В результате их нельзя сравнивать только по количеству ядер. Восемь ядер CPU и тысячи ядер GPU — это демонстрация различных подходов, а не спор о том, что лучше. Один характеризует сложность, а другой — объем.

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

Поделиться с друзьями
Павел Романов

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

Оцените автора
Добавить комментарий