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

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

В этом материале мы рассмотрим историю GPU, архитектуру графического процессора и области его применения.

История появления GPU

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

Первые видеокарты, такие как IBM Monochrome Display Adapter (MDA) и Color Graphics Adapter (CGA) могли поддерживать только текстовый режим отображения или базовую цветную графику. Позже появились более совершенные графические карты, например, Video Graphics Array (VGA). Они обеспечивали более высокое разрешение и глубину цвета.

Термин «GPU» впервые ввела компания Nvidia в 1999 году с выпуском GeForce 256. Это была первая видеокарта, которую продавали как GPU, поскольку она интегрировала механизмы трансформации, освещения, настройки/склейки треугольников и рендеринга на одном чипе. В то время как предыдущие видеокарты для этих задач использовали CPU.

Видеокарта VisionTek GeForce 256 DDR
Видеокарта VisionTek GeForce 256 DDR

В 2006 году Nvidia представила GeForce 8800 GTX — первый GPU с унифицированной архитектурой. Вместо отдельных процессоров для вершинных и пиксельных шейдеров в нем находился пул процессоров общего назначения, которые могли выполнять обе задачи. Так GPU смог динамически распределять ресурсы в зависимости от рабочей нагрузки.

Важным этапом развития GPU стало появление вычислений общего назначения на графических процессорах (GPGPU). Они расширили роль GPU за пределы рендеринга графики до общих вычислительных задач. Благодаря появлению таких языков программирования, как CUDA от Nvidia, а затем OpenCL, разработчики смогли использовать параллельную вычислительную мощность GPU для широкого спектра приложений — от научных симуляций до машинного обучения.

Архитектура GPU

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

Ядра. Ядра — отдельные вычислительные блоки в каждом CU. Хотя они проще своих аналогов в CPU, огромное количество ядер в GPU позволяют выполнять параллельно одну задачу для множества данных. Это важно, например, для рендеринга графики.

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

Потоковые мультипроцессоры (SMs). В архитектуре NVIDIA GPU потоковый мультипроцессор (SM) служит основным вычислительным блоком, он управляет и выполняет потоки в группах. Каждый SM содержит несколько ядер CUDA, а несколько SM составляют GPU.

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

Блоки отображения текстур (TMU). TMU выполняют операции с текстурами во время рендеринга графики. Текстуры — это изображения, которые накладывают на 3D-модели для придания им реалистичного вида. TMU отвечают фильтрацию и отображение.

Виды графических процессоров

Есть два вида GPU: интегрированные и специализированные. У каждого вида есть свои характеристики, возможности и сценарии использования.

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

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

Принцип работы GPU

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

Этапы конвейера рендеринга

Конвейер рендеринга (графический конвейер) — это последовательность шагов, которые выполняет графический процессор для преобразования 3D-данных в 2D-изображение на экране. Конвейер можно условно разделить на этапы.

Наглядный пример этапов конвейера рендеринга
Наглядный пример этапов конвейера рендеринга

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

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

Растеризация. Второй фиксированный этап. Фигуры (треугольники), полученные на предыдущем этапе, растеризуются в набор пикселей.

Пиксельный шейдер. Второй программируемый этап, где определяется цвет каждого пикселя. Для этого этапа пишется пиксельный шейдер, который вычисляет окончательный цвет пикселя на основе алгоритма и/или текстур.

Виды шейдеров

Шейдеры — это небольшие программы, которые работают на GPU и отвечают за различные аспекты рендеринга пикселей и вершин. Существует несколько видов шейдеров.

Вершинные шейдеры. Обрабатывают атрибуты каждой вершины, такие как ее положение, цвет и текстурные координаты. Они отвечают за преобразование 3D-координат вершин в 2D-координаты, используемые на экране.

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

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

Существуют и другие виды шейдеров, которые используют в более продвинутых техниках рендеринга.

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

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

Наложение текстур и растеризация

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

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

Методы сглаживания

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

Многодискретное сглаживание (MSAA). Метод уменьшает сглаживание путем выборки нескольких точек в каждом пикселе для расчета окончательного цвета. Он обеспечивает баланс между вычислительной производительностью и качеством изображения.

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

Быстрое приближенное сглаживание (FXAA). После обработки изображения FXAA сглаживает пиксели на основе их экранного рисунка. Хотя он менее требователен к вычислительным ресурсам, чем пространственные методы сглаживания, он может не так эффективно сохранять детали.

Субпиксельное морфологическое сглаживание (SMAA). Метод постобработки, который сочетает в себе различные техники для уменьшения как геометрического, так и временного сглаживания. Он сложнее, чем FXAA, но может обеспечивать лучшее качество.

Темпоральное сглаживание (TAA). Метод уменьшает артефакты ползания и мерцания, которые могут возникать при движении камеры. Он достигается путем объединения образцов из предыдущих кадров с текущим.

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

Где применяется GPU 

GPU в видеоиграх

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

Рендеринг высококачественной графики

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

Источник: Star Wars Jedi: Survivor
Источник: Star Wars Jedi: Survivor

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

Моделирование физики в видеоиграх

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

Разработчики воссоздают отскок мяча в зависимости от его траектории и скорости
Разработчики воссоздают отскок мяча в зависимости от его траектории и скорости

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

Трассировка лучей в реальном времени

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

Наглядный пример, как работает трассировка лучей в игре Control 
Наглядный пример, как работает трассировка лучей в игре Control 

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

GPU в профессиональных приложениях

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

Графический дизайн и видеомонтаж

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

Многие программы для графического дизайна и редактирования видео могут использовать возможности GPU. Например, пакет Creative Cloud от Adobe, включающий Photoshop и Premiere Pro, использует GPU для ускорения различных задач, таких как применение эффектов, рендеринг 3D-объектов и воспроизведение видео в режиме реального времени.

3D-моделирование и анимация

Программное обеспечение для 3D-моделирования использует GPU для рендеринга видового экрана, позволяя художникам видеть предварительный просмотр своего проекта. Это особенно важно при работе со сложными сценами, которые включают в себя множество объектов, текстур и света.

Реклама шумоподавления Samsung. Источник: Behance
Реклама шумоподавления Samsung. Источник: Behance

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

Кроме того, GPU играют важную роль в движках рендеринга в реальном времени, таких как Unreal Engine и Unity. Движки используют для создания интерактивного 3D-контента, такого как видеоигры, виртуальная реальность и архитектурные визуализации. Используя мощь GPU, эти движки могут рендерить высококачественную графику в реальном времени.

Применение GPU в научных областях

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

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

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

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

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

GPU в облачных вычислениях

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

Облачные сервисы

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

Виртуализация GPU и облачные игры

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

Искусственный интеллект и машинное обучение

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

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

Преимущества и недостатки облачных вычислений на GPU

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

GPU в инфраструктуре виртуальных рабочих столов (VDI)

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

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

Благодаря мощности графических процессоров специалисты могут заниматься проектированием, дизайном, 3D-моделированием и производством видеоконтента с такой же эффективностью, как и на физическом ПК.

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

Тенденции в развитии технологии GPU

В развитии GPU можно выделить несколько тенденций:

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

  • рост спроса на высокопроизводительные вычисления. Для решения этой проблемы производители GPU инвестируют в разработку энергоэффективных архитектур и технологий;

  • повышение пропускной способности памяти и ее способности справляться с задачами, которые требуют больших объемов данных, благодаря таким технологиям, как память с высокой пропускной способностью (HBM);

  • распространение систем с несколькими графическими процессорами, которые позволяют параллельно обрабатывать задачи и тем самым увеличивать вычислительную мощность;

  • использование трассировки лучей в реальном времени в GPU получит более широкое распространение.

Важно отметить, что все эти тенденции могут быстро трансформироваться из-за стремительного развития технологий. Ключевые игроки на рынке GPU, такие как NVIDIA и AMD, продолжают внедрять инновации и выпускать новые продукты, чтобы оставаться конкурентоспособными. Например, NVIDIA планирует выпустить свои модели GeForce RTX 4060 и 4060 Ti в 4 квартале 2023 года. Аналогично, AMD находится на пороге анонса серии Zen 5 / Ryzen 8000.

ITGLOBAL.COM предоставляет облачные серверы с графическими видеокартами NVIDIA A800 на базе 2-х сокетного сервера vStack-R и дисковой подсистемы на Hi-End СХД NetApp. Подробнее узнайте на нашем сайте.

Комментарии (1)


  1. dimitrii_z
    08.07.2023 12:13

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

    1. Например, ускорение задач искусственного интеллекта (ИИ), глубокое обучение до высокоскоростной аналитики данных и научные симуляции.

    = =опечатка, надо: Например, ускорение задач искусственного интеллекта (ИИ), глубокое обучение для высокоскоростной аналитики данных и научные симуляции.

    2. В то время как предыдущие видеокарты для этих задач использовали CPU.

    = = В то время как предыдущие видеокарты для некоторых из этих задач использовали CPU.

    - - не все задачи же были на CPU, та же предыдущая видеокарта от Nvidia - Riva TNT2 - на CPU перекладывала только обработку вершин. Можно же более корректно написать и уточнить этот момент про TNT2.

    3. Многодискретное сглаживание (MSAA). Метод уменьшает сглаживание

    = = Многодискретное сглаживание (MSAA). Метод устраняет ступенчатость

    А так получилось что написано обратное, сглаживание как раз добавляется, а не уменьшается

    4. FXAA описан совершенно непонятно и даже некорректно. Главное - метод определяет контрастные области (рёбра) любого размера и незначительно, на расстояние меньше размера пикселя, сдвигает каждый пиксель в каждой области. Вообще хорошая статья-перевод есть тут же на Хабре, можно было бы ссылку на неё добавить в текст: https://habr.com/ru/articles/558552/

    5. Может, и придирка, но не хватает хотя бы абзаца про расчёты для AR/VR. И какие при этом возникают и решаются сложности, что отличает от других расчётов.