Анатомия GPU: потоковые мультипроцессоры, CUDA, RT и тензорные ядра
Анатомия GPU: потоковые мультипроцессоры, CUDA, RT и тензорные ядра
Флагманский процессор Intel Core i9-14900K насчитывает 24 вычислительных ядра, а графический процессор NVIDIA GeForce RTX 4090 — 16 384 CUDA-ядра. Возникает логичный вопрос: почему мы до сих пор не запускаем операционные системы и офисные приложения на видеокартах, получая колоссальное преимущество в скорости? Ответ кроется в фундаментальном различии философии: центральный процессор проектировался как гениальный спринтер, способный моментально решить одну сложную цепочку задач, а графический процессор — как гигантская армия рядовых, созданная одновременно выполнять миллионы простых однотипных операций.
В этой статье мы разберем внутреннее устройство современного GPU NVIDIA. Вы узнаете, почему кристалл видеокарты устроен не как «россыпь ядер», а как кластер высокоорганизованных вычислительных фабрик, и почему для графики и искусственного интеллекта инженерам пришлось изобретать три принципиально разных типа кремниевых вычислителей.
Задержка против пропускной способности: две философии вычислений
Чтобы понять анатомию GPU, необходимо взглянуть на конфликт двух архитектурных метрик: латентности (latency) и пропускной способности (throughput).
- CPU оптимизирован под минимизацию задержки (Latency-oriented). Его цель — выполнить последовательность зависимых инструкций от начала до конца за минимальное время. Для этого кристалл CPU оснащается сложнейшей логикой внеочередного выполнения (out-of-order execution), предсказателями ветвлений и огромными кэшами L1, L2 и L3, занимающими большую часть площади чипа.
- GPU оптимизирован под максимальную пропускную способность (Throughput-oriented). Графическому чипу не важно, за сколько наносекунд посчитается цвет одного конкретного пикселя. Его задача — выдать 60, 120 или 240 раз в секунду целый кадр, состоящий из 8 миллионов пикселей (в разрешении 4K). Большая часть кремния GPU отдана под вычислительные блоки (ALU), а не под управляющую логику и гигантские кэши.
Центральный процессор напоминает элитного курьера на спорткаре: он доставит небольшую бандероль через весь город за 15 минут. Графический процессор — это грузовой поезд: он трогается медленно, но за один рейс перевозит 10 000 тонн щебня. Для одного письма поезд бесполезен, но для стройки века незаменим.
Потоковый мультипроцессор (SM): автономная фабрика вычислений
Когда производители заявляют «16 000 ядер», маркетологи идут на осознанное упрощение. Кристалл видеокарты физически невозможно организовать как прямое соединение шестнадцати тысяч равноправных процессоров: сеть коммуникаций между ними мгновенно перегрузила бы кристалл и потребила гигаватты энергии.
Вместо этого GPU NVIDIA разбит на крупные независимые функциональные модули — Streaming Multiprocessors (SM), или потоковые мультипроцессоры.
Каждый SM — это полноценный автономный миникомпьютер внутри кристалла. В его состав входят:
- Собственные планировщики инструкций (Warp Schedulers).
- Регистровый файл огромного объема (десятки и сотни килобайт сверхбыстрой памяти прямо у исполнительных блоков).
- Разделяемая память / L1-кэш (Shared Memory / L1 Data Cache).
- Набор вычислительных блоков: универсальные ядра (CUDA), специализированные тензорные матрицы (Tensor Cores) и трассировщики лучей (RT Cores).
В зависимости от мощности и поколения GPU, кристалл объединяет в себе от десятка до полутора сотен таких SM. Например, в мобильной чипе их может быть 20–30, а в монструозных серверных ускорителях — свыше 130.
Как думает GPU: модель SIMT, варпы и сокрытие задержек
В центральном процессоре поток ОС выполняется на одном физическом ядре независимо от других. В GPU используется архитектурная парадигма SIMT (Single Instruction, Multiple Threads) — одна инструкция, множество потоков.
Работа организуется группами ровно по 32 потока, которые в экосистеме NVIDIA называются варпами (warps):
- Планировщик SM берет очередную инструкцию (например, «сложить число из регистра с числом из »).
- Эта инструкция отправляется одновременно 32 потокам варпа.
- Все 32 потока выполняют ее синхронно, но каждый — над собственными изолированными данными.
Но что происходит, если одной части потоков в варпе нужно выполнить условие ветвления if, а другой — ветку else? В этом случае варп выполняет обе ветки по очереди, маскируя (выключая) неактивные потоки на каждом шаге. Это явление называют дивергенцией варпа (warp divergence), и оно резко снижает производительность параллельных алгоритмов.
Главное супероружие GPU в борьбе с медленной памятью — сокрытие задержек (Latency Hiding). Доступ к видеопамяти (VRAM) занимает сотни тактов: для вычислителя это целая вечность. Пока процессор ждал бы данные, простаивая, планировщик SM переключает контекст: он за один такт «усыпляет» варп, ожидающий данные из памяти, и передает конвейер другому варпу, чьи данные уже готовы. Благодаря гигантскому регистровому файлу переключение контекста на GPU бесплатно — состоянию регистров не нужно сохраняться в оперативную память.
Анатомия исполнительных блоков: три поколения кремниевых специалистов
До 2018 года почти вся работа внутри SM ложилась на плечи однотипных вычислительных ядер. Однако усложнение графики и взрывной рост нейросетей уперлись в физические лимиты кремния. Чтобы ускорить вычисления в десятки раз, инженеры пошли по пути аппаратной специализации. В современном SM бок о бок трудятся три класса ядер.
1. CUDA-ядра: универсальная пехота
Классическое CUDA-ядро (часто называемое ALU — Arithmetic Logic Unit) — это базовый исполнительный конвейер, умеющий производить стандартные математические действия над скалярными числами: сложение, умножение, побитовые сдвиги и логические операции.
CUDA-ядра делятся по типам обрабатываемых данных:
- FP32 (Floating Point 32-bit): Вычисления с одинарной точностью с плавающей запятой. Исторически это фундамент трехмерной графики: расчет координат полигонов, векторов освещения, физики твердых тел и растрирования.
- INT32 (Integer 32-bit): Целочисленные вычисления. Служат для вычисления адресов в памяти, индексов массивов и управления циклами.
- FP64 (Double Precision): Двойная точность, критически важная для научной симуляции, гидродинамики и квантовой химии, но практически ненужная в потребительских играх.
2. Тензорные ядра (Tensor Cores): фабрики матричных умножений
Обычное FP32-ядро за один рабочий такт способно выполнить одну операцию вида (умножение с накоплением, FMA) над единичными числами.
В формуле выше и перемножаются, затем к результату прибавляется значение аккумулятора , формируя новый результат .
Нейронные сети и современные методы сглаживания построены не на точечных числах, а на перемножении гигантских матриц. Если выполнять их поштучно на обычных CUDA-ядрах, конвейер тратит колоссальное количество энергии на постоянную загрузку и декодирование элементарных инструкций.
Тензорное ядро — это специализированный матричный сопроцессор. Оно оперирует не одиночными скалярами, а целыми мини-матрицами (например, элемента) за один аппаратный такт:
Здесь — уже не одиночные значения, а матрицы чисел.
Для ускорения нейросетей тензорные ядра используют смешанную точность (Mixed Precision): входные матрицы и могут храниться в компактном формате с меньшей точностью (FP16, BF16, FP8 или INT8), что экономит пропускную способность памяти в разы, а сложение в матрице и итоговый результат вычисляются в полной точности FP32 для предотвращения накопления вычислительной ошибки.
3. RT-ядра (Ray Tracing Cores): геометрические навигаторы
Рендеринг методом трассировки лучей моделирует физику распространения света: луч выпускается из виртуальной камеры через пиксель экрана вглубь трехмерной сцены, отражаясь от зеркал, преломляясь в стекле и рассеиваясь в атмосфере.
Главное препятствие на этом пути — ответить на вопрос: с каким из миллионов треугольников в сцене этот луч пересечется первым?
Наивный перебор всех полигонов привел бы к падению производительности до долей кадра в секунду. В индустрии используют пространственную древовидную структуру данных — BVH (Bounding Volume Hierarchy). Вся сцена упаковывается в большие воображаемые коробки (Bounding Boxes), те делятся на коробки поменьше, и только внутри конечных «листьев» дерева лежат конкретные полигоны.
До появления RT-ядер обходом этого дерева и проверкой геометрии занимались универсальные CUDA-ядра. Трассировка одного луча требовала выполнения сотен программных инструкций:
- Проверить пересечение луча с коробкой первого уровня.
- Если пересек — спуститься на уровень ниже.
- Проверить дочерние коробки.
- Дойдя до листьев дерева, рассчитать математическое пересечение луча с плоскостью треугольника.
RT-ядро — это чистая аппаратная логика из транзисторов, реализующая два специализированных теста:
- Ray-Box Test: Аппаратный расчет пересечения луча с параллелепипедом BVH.
- Ray-Triangle Test: Аппаратное нахождение координат точки пересечения луча с плоскостью полигона (алгоритм Моллера — Трумбора).
Пока RT-ядро выполняет аппаратный спуск по дереву BVH, универсальные CUDA-ядра остаются свободными и продолжают вычислять текстуры, анимацию или физику кадра.
Разделение труда: синергия ядер на практике
Современный графический конвейер — это слаженный оркестр трех специализированных групп кремния:
| Тип ядер | Основной тип данных | Главная задача | Что делают в кадре игры с RTX |
|---|---|---|---|
| CUDA Cores | FP32, INT32, FP64 | Универсальная скалярная арифметика | Считают вертексы, анимацию костей, физику, растеризацию и пиксельные шейдеры |
| RT Cores | BVH Box, Ray Vectors | Поиск геометрических пересечений в пространстве | Трассируют миллионы лучей для зеркал, глобального освещения и теней |
| Tensor Cores | FP16, BF16, FP8, INT4/INT8 | Аппаратное перемножение матриц | Реконструируют кадр через DLSS, удаляют шумы (denoising), считают логику ИИ |
Представьте один кадр в современной игре:
- CUDA-ядра рассчитывают геометрию игрового мира и подготавливают структуры данных.
- RT-ядра берут на себя просчет сотен отражений и мягких теней, моментально отсекая невидимые области геометрии.
- Из-за физических ограничений по времени RT-ядра просчитывают лишь 1–2 луча на пиксель, создавая шумную картинку.
- На помощь приходят тензорные ядра: они запускают нейросеть-шумоподавитель, очищают артефакты, а затем масштабируют картинку (DLSS) из пониженного разрешения в целевое 4K, воссоздавая мелкие детали.
Именно этот союз позволил индустрии преодолеть застой классической растеризации. Однако этот баланс сил появился не сразу: путь к нему занял десятилетие напряженных инженерных экспериментов. В следующей главе мы увидим отправную точку этой революции — архитектуру Turing, которая первой рискнула объединить универсальные вычисления, матрицы и трассировку лучей на одном кристалле.