iPhones.ru

Почему в видеокартах NVIDIA тысячи ядер, а в чипах Apple намного меньше. Разбираемся, как устроены GPU

Павел avatar | 7
FavoriteLoading В закладки
Почему в видеокартах NVIDIA тысячи ядер, а в чипах Apple намного меньше. Разбираемся, как устроены GPU

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

В чипе Apple M4 установлено 10 ядер GPU, в то время как даже в базовых вилдеокартах NVIDIA и AMD их больше тысячи.

А если посмотреть на модели среднего уровня, разница ещё сильнее. Вот пример.

В M4 Pro установлено 20 графических ядер, и в MacBook Pro этот чип выдаёт 13 577 очков в 3D Mark.

В NVIDIA RTX 4070 для ноутбуков уже 4608 ядер, хотя она выдаёт почти те же 12 388 очков 3D Mark.

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

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

У Apple в 100 раз меньше ядер при той же мощности

Посмотрим на уровень производительности графических чипов разного уровня от Apple, AMD и NVIDIA в зависимости от количества указанных в спецификациях ядер.

В качестве бенчмарка возьмём результаты теста в 3D Mark в режиме мультиплатформенного Steel Nomad Lite. Он позволяет уравнять современные чипы с разных платформ в реальных игровых условиях.

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

Начальный уровень
▪︎ Apple M4 (22 Вт): 10 ядер, 3946 очков
▪︎ NVIDIA GTX 1060 6 ГБ (120 Вт): 1280 ядер, 4085 очков
▪︎ AMD RX RX 6500 XT (107 Вт): 1024 ядер, 4815 очков

Средний уровень
▪︎ Apple M4 Pro (40 Вт): 20 ядер, 7834 очков
▪︎ NVIDIA RTX 2070 (175 Вт): 2304 ядер, 8469 очков
▪︎ AMD RX 7600 (165 Вт): 2048 ядер, 10 121 очков

Продвинутый уровень
▪︎ NVIDIA RTX 4070 Laptop (140 Вт): 4608 ядер, 12 388 очков
▪︎ Apple M2 Ultra (90 Вт): 76 ядра, 12 952 очка
▪︎ Apple M4 Max MacBook Pro (70 Вт): 40 ядер, 13 577 очков

Флагманы
▪︎ AMD RX 7900 XTX (355 Вт): 6144 ядер, 29 883 очков
▪︎ NVIDIA RTX 4090 (450 Вт): 16384 ядер, 42 169 очков

❗️Из-за того, что у Apple по графике топовый чип всё ещё M2 Ultra, который не поддерживает рейтрейсинг, даже его 76-ядерная версия набирает меньше очков в тесте Steel Nomad Lite, чем M4 Max, и значительно отстает от топовых видеокарт конкурентов.

Тут важно обратить внимание на энергопотребление. При одинаковой производительности в GPU Apple оно ниже в 5 раз на начальном уровне и в два раза на продвинутом. И это с учётом расхода энергии в том числе на CPU.

То есть математика совсем не складывается. Если не понимать, как работают графические чипы в компьютерах, можно подумать, будто в Apple работают инженерные гении, которые создали графическое ядро до 1400 раз мощнее, чем у NVIDIA.

Это, конечно, неправда.

Давайте посмотрим, что вообще такое GPU и как в них считаются ядра.

Смотрим, как выглядят и работают обычные GPU


Схема работы GPU одинакова для всех процессоров, даже Apple. Большая задача разбивается на одинаковые маленькие и просчитывается параллельно миллионы раз за секунду

Графический процессор GPU был создан для того, чтобы параллельно просчитывать простые операции одного типа.

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

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

Калькуляторы это буквальные, одинаковые и простые.

wp-image-1296491wp-image-1296484wp-image-1296492

Они выполняют умножение, сложение и пару других простых операций. На одно ядро приходится около четырёх таких калькуляторов разного типа, которые называются арифметико-логические блоки или ALU (Arithmetic Logic Units).

А сами ядра называется шейдерным ядром или CUDA в видеокартах NVIDIA.

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

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

Чем этих ALU-калькуляторов больше в одном чипе, тем быстрее и больше графический процессор сможет просчитывать объектов в сцене.

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

wp-image-1296494wp-image-1296496wp-image-1296484

Кроме этого, сейчас в GPU добавляют тензорные, текстурные ядра и ядра для трассировки лучей.

Внутри тензорных ядер установлены более сложные «калькуляторы» матриц, чтобы работало ИИ-масштабирование NVIDIA DLSS, AMD FidelityFX или Apple MetalFX.

Ядра для трассировки лучей просчитывают траекторию векторов световых лучей с учётом их отскакивания от объектов.

Подробнее о компонентах GPU читайте здесь.

Все ядра выполняют операции одновременно, поэтому так эффективны. Так работает графика в любой современной платформе NVIDIA, AMD и Apple.

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

Теперь давайте посмотрим, как это выглядит на деле – отдельно в GPU у NVIDIA и у Apple.

Архитектура GPU от NVIDIA. Тысячи ядер легко найти

wp-image-1296488wp-image-1296487

В качестве примера возьмём архитектуру процессора GA102, который является базой для всех видеокарт с RTX 3080 до RTX 3090ti.

🟥 Чип состоит из нескольких блоков: кэш, контроллеры VRAM памяти, мультипроцессор для связи всех компонентов и самого главного графического блока, где происходят все вычисления.

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

Дорожки называются графическими кластерами GPC (Graphics Processor Cluster).

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

▪︎ Каждый SM состоит из четырёх ворпов (Warp), четырёх текстурных блоков и одного ядра трассировки лучей.

▪︎ И, наконец, внутри каждого ворпа расположено 32 ядра CUDA (шейдерное) и 1 тензорное ядро.

▪︎ Каждое ядро CUDA состоит из базовых арифметико-логических блоков ALU, которые и проводят необходимы для графики вычисления.

Всего получается 10752 CUDA-ядер, 336 тензорных, 336 текстурных и 84 трассировочных ядер.

⚙️ Общая схема «заворачивания» блоков один в другой выглядит так:

Вычислительный блок → 7 графических кластеров GPC → 12 потоковых мультипроцессоров SM → 4 ворпа, 1 текстурное и 1 RT-ядро → 32 шейдерных ядра и 1 тензорное ядро.

В зависимости от поколения и уровня процессора количество и архитектура самих ядер меняется, но критерий подсчёта и общая структура в последние 20 лет остаётся прежней.

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

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

Архитектура GPU от Apple. Внутри больших ядер скрыты сотни маленьких

wp-image-1296486wp-image-1296485

Примером возьмём 10-ядерный GPU из M3. У него такая же архитектура, как в A17 Pro из iPhone 15 Pro, A18 и чипах серии M4.

Речь идёт сразу о нескольких поколениях, потому что в них Apple использует архитектуру под названием «Apple family 9», то есть уже девятую версию графики, которую компания разработала для своих процессоров и запустила в 2023 году.

Большую мощность по сравнению с A17 Pro в разных версиях M3, M4 и A18 добиваются с помощью масштабирования этой архитектуры.

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

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

▪︎ Как и в процессорах NVIDIA, в M3 основной графический блок GPU в M3 делится на 10 графических кластеров, именно их Apple называет ядрами.

▪︎ Внутри каждого ядра находится 16 вычислительных блоков (Compute Units, CU), аналог потоковых мультипроцессоров в чипах NVIDIA.

▪︎ В каждом CU блоке 8 исполнительных блоков (Execute Units, EU), блок кэша и микропроцессоры для управления данными.

▪︎ В каждом EU блоке по одному шейдерному блоку (Shader Core, SC), которые являются аналогом CUDA-ядер, одному RT-ядру и по одному блоку для обработки текстур.

▪︎ Каждый шейдерный блок состоит из нескольких арифметико-логических блоков ALU, пулов для обработки и планирования инструкций SIMD (Single Instruction, Multiple Data pool) и ещё одного блока памяти для обработки текущих процессов.

⚙️ Общая схема «заворачивания» блоков один в другой выглядит так:

Вычислительный блок → 10 крупных ядер → 16 вычислительных блоков CU → 8 исполнительных блоков EU → 1 шейдерное, 1 текстурное и 1 тензорное ядро.

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

Тензорных ядер в самом GPU от Apple нет, но их заменяют два вида специализированных блоков на самих чипах серий M и A: это AMX-блоки и NPU, предназначенные для ускорения матричных вычислений и операций с тензорами.

Из других отличий: судя по данным Apple, в GPU M3 и новее трассированных RT-ядер и текстурных столько же, сколько и шейдерных. В картах NVIDIA их на порядок меньше, чем CUDA-ядер.

В итоге в M3 установлено 10 ядер по логике Apple и 1280 шейдерных ядер, если считать по принципу NVIDIA. Если сравнивать это с картами начального уровня, то цифры уже сходятся.

В итоге всё зависит от того, кто как считает блоки в GPU

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

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

Более того, даже при всей открытости NVIDIA, профильные источники также могут пропустить детали.

Например, в предыдущей статье на тему GPU я не указал, что каждый из семи первичных потоковых мультипроцессоров SM в RTX 3080 имеет по 4 текстурных блока. Нашёл их только в этот раз.

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

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

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

Но вывод напрашивается всё-таки один.

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

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

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

С обеих сторон позиции понятны. Тысячи ядер позволяют видеокартам NVIDIA выглядеть внушительно, а Apple использует более простые числа, чтобы покупателю было легче понять линейку (и ценовую сетку) её компьютеров.

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

1 Звезд2 Звезды3 Звезды4 Звезды5 Звезд (9 голосов, общий рейтинг: 4.89 из 5)
undefined
iPhones.ru
Пока работал над большим разбором, чем отличаются процессоры CPU от GPU, заметил интересную вещь. В чипе Apple M4 установлено 10 ядер GPU, в то время как даже в базовых вилдеокартах NVIDIA и AMD их больше тысячи. А если посмотреть на модели среднего уровня, разница ещё сильнее. Вот пример. В M4 Pro установлено 20 графических ядер,...
Здесь можно оставить комментарий! Для этого авторизуйтесь или зарегистрируйтесь на iPhones.ru.

7 комментариев

Форум →
  1. ilcom avatar
    ilcom вчера в 13:40
    0

    А можете сделать гипотезы о количестве CUDA ядер во всех современных mac? По аналогии с прекрасной табличкой: https://github.com/ggerganov/llama.cpp/discussions/4167

    notolduser avatar
    notolduserвчера в 13:55
    2

    Тема статьи хороша для Хабра, но не айфонс ру..тут любят легкие к усвоению новости. 

    ilcom avatar
    ilcomвчера в 14:16
    0

    Или просто принимаем для простоты: 1 GPU ядро apple это 128 Cuda ядер. Множим на число GPU ядер из той же таблички llama.cpp и получаем актуальное число CUDA для сравнения с NVIDIA.

    Войди на сайт, чтобы ответить
    Ответить
  2. AppleDominator avatar
    AppleDominator вчера в 13:47
    1

    Хорошая статья, спасибо. Давно задавался этим вопросом, но все было лень погуглить и разобраться

    Войди на сайт, чтобы ответить
    Ответить
  3. kostik avatar
    kostik вчера в 14:31
    0

    Термин «шейдерное ядро» происходит от английского слова «shade», означающего «тень» и выполнения функции шейдеров в графике.
    Shade это затемнять,  а не тень (Shadow). шейдер затемняет, а не затеняет

    Войди на сайт, чтобы ответить
    Ответить
  4. jpolice avatar
    jpolice вчера в 15:51
    0

    Спасибо, тоже интересовал этот вопрос, теперь стало понятнее 

    Войди на сайт, чтобы ответить
    Ответить
  5. zolstas avatar
    zolstas вчера в 22:32
    0

    Так классно написано. Но я со своими короткими мозгами вообще ничего не понял. В любом случае. Спасибо за информацию. 🙏

    Войди на сайт, чтобы ответить
    Ответить
Помни о правилах — если начал оффтопить, то не удивляйся потом.

Нашли орфографическую ошибку в новости?

Выделите ее мышью и нажмите Ctrl+Enter.