Что такое шейдерные процессоры

Обновлено: 20.11.2024

Как шейдеры повышают производительность

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

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

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

Без шейдерной программы и подходящего оборудования обновление образа может занять несколько десятых долей секунды и более. Заметные обновления дисплея могут происходить при обработке ЦП.

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

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

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

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

GFX VS GPU

GFX означает видеокарта. Видеокарта/видеокарта: GeForce GTX 680, Radeon HD 7970.

GPU – это графический процессор. GPU — это процессор внутри/встроенный в видеокарту. Графический процессор GeForce GTX 680 — Kepler GK104, а Radeon HD 7970 — Tahiti XT.

Мне лучше показать, чем описывать, так что посмотрите сами:

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

Блок обработки шейдеров

Что такое блок обработки шейдеров? Также известный как потоковый процессор (AMD), ядро ​​CUDA (NVIDIA), блок обработки шейдеров стал самым важным компонентом графической карты после выпуска унифицированных архитектур шейдеров в 2006 году.

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

И то, и другое важно, и у графических процессоров всегда была серьезная проблема: дисбаланс между пиксельным и вершинным шейдерами. Пример: Radeon X1900 — 36 пиксельных шейдеров и 8 вершинных шейдеров. Эта проблема? В зависимости от потребности 3D-приложения, Pixel или Vertex часто будут бездействовать. Почти как компьютер, ожидающий, пока его принтер выполнит заказ на печать. Другой термин: узкое место.

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

Теперь вам нужно узнать, как сравнивать видеокарты, особенно разных производителей. У AMD и NVIDIA всегда были разные конструкции шейдерных процессоров (SPU), что затрудняет прямое сравнение видеокарт. Карты AMD имеют большее количество SPU, но менее сложны. С другой стороны, у NVIDIA меньше SPU, но они намного сложнее/мощнее.

Хорошим способом сравнения SPU двух производителей является определение их "мощности".

До выпуска архитектуры Kepler шейдеры NVIDIA всегда имели более высокую тактовую частоту по сравнению с центральным блоком графического процессора.

В первой унифицированной архитектуре шейдеров, используемой в серии GeForce 8000/9000, шейдеры работали в 2,5 раза быстрее, чем центральный блок. Вот почему вы видите, что центральный блок GeForce 8800 GT имеет частоту 600 МГц, а его шейдерная/процессорная частота составляет 1500 МГц. Это позволило получить огромную мощность, но вызвало огромный нагрев.

С выпуском архитектуры Fermi ситуация изменилась. NVIDIA разработала технику, известную как Hot Clocking: шейдеры работали в два раза быстрее, чем центральный блок — в 2 раза. Это означало меньший нагрев и меньшее энергопотребление.

Однако большой взрыв произошел с архитектурой Kepler.

В архитектуре Kepler шейдеры работали на той же частоте, что и центральный блок, и концепция "Шейдер/процессорные часы" устарела. Кроме того, они были в три раза энергоэффективнее шейдеров Fermi.

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

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

Вот простой способ расчета исходной мощности затенения:

GeForce 8800 GT:

128 SPU, мощность 2,5X, тактовая частота ядра 600 МГц. Исходная мощность: 128 х 2,5 х 600 = 192 000

GeForce GTX 285:

240 SPU, мощность 2,3X, тактовая частота ядра 648 МГц. Исходная мощность: 240 x 2,3 x 648 = 357696

GeForce GTX 580:

512 SPU, мощность 2,0X, тактовая частота ядра 772 МГц. Исходная мощность: 580 x 2,0 x 772 = 895 520

GeForce GTX 680:

1536 SPU, 1,0-кратное увеличение мощности, тактовая частота ядра 1006 МГц. Исходная мощность: 1536 x 1,0 x 1006 = 1545216 + Boost Clock = до 1625856

GeForce GTX Титан:

2688 SPU, 1,0-кратное увеличение мощности, тактовая частота ядра 836,5 МГц. Исходная мощность: 2688 x 1,0 x 836,5 = 2248512 + тактовая частота Boost = 2353344 + максимальная тактовая частота (например: 1 ГГц, поскольку она зависит от температуры и напряжения) = до 2688000

С AMD все намного проще. «Мощь шейдеров», как я называл ее раньше, изменилась только с архитектурой Graphics Core Next (GCN).

Radeon HD 2900 PRO:

320 SPU, мощность 0,65X, тактовая частота ядра 600 МГц. Исходная мощность: 320 х 0,65 х 600 = 124 800

Радеон HD 4890:

800 SPU, мощность 0,65X, тактовая частота ядра 850 МГц. Исходная мощность: 800 х 0,65 х 850 = 442 000

Радеон HD 6970:

1536 SPU, мощность 0,65X, тактовая частота ядра 880 МГц. Исходная мощность: 1536 х 0,65 х 880 = 878592

Радеон HD 7970:

2048 SPU, 1X мощность, тактовая частота ядра 925 МГц. Чистая мощность: 2048 х 1 х 925 = 1894400

Версия Radeon HD 7970 ГГц:

2048 SPU, 1X мощность, тактовая частота ядра 1000 МГц. Исходная мощность: 2048 X 1 X 1000 = 2048000 + Boost Clock = до 2150400

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

У какой компании это лучше?

По моему мнению, до выпуска архитектуры Kepler AMD выделяла больше SPU с меньшим количеством транзисторов по сравнению с графическими картами NVIDIA (например, GTX 580 по сравнению с 6970). Это означает, что было более эффективно распределять SPU на транзисторы.

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

Поэтому я голосую за то, чтобы AMD сделала это лучше. Однако с выпуском видеокарт Kepler все изменилось. Графические карты NVIDIA теперь нагреваются так же сильно, как AMD GFX, и потребляют гораздо меньше энергии, так как GeForce GTX 690 с двумя видеокартами потребляет столько же, сколько AMD Radeon HD 7970 GHz Edition.

В конце концов, как можно сравнивать процессор NVIDIA SPU с процессором AMD? Вы не можете.

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

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

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

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

В предыдущей главе мы описали шейдеры как эквивалент пресса Гутенберга для графики. Почему? И что еще более важно: что такое шейдер?

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

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

Почему шейдеры быстрые?

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

Представьте, что ЦП вашего компьютера — это большая промышленная труба, а каждая задача — как что-то, что проходит через нее — как фабричная линия. Некоторые задачи больше, чем другие, а это значит, что для их решения требуется больше времени и энергии. Мы говорим, что они требуют большей вычислительной мощности. Из-за архитектуры компьютеров задания вынуждены выполняться последовательно; каждая работа должна быть завершена по одной за раз. Современные компьютеры обычно имеют группы из четырех процессоров, которые работают как эти конвейеры, выполняя задачи одну за другой, чтобы обеспечить бесперебойную работу. Каждый канал также известен как поток.

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

Вернемся к нашей метафоре каналов и задач. Каждый пиксель на экране представляет собой простую небольшую задачу. Каждая пиксельная задача по отдельности не является проблемой для ЦП, но (и вот в чем проблема) крошечная задача должна выполняться для каждого пикселя на экране! Это означает, что на старом экране 800x600 480 000 пикселей должны обрабатываться за кадр, что означает 14 400 000 вычислений в секунду! Да! Это достаточно большая проблема, чтобы перегрузить микропроцессор. На современном дисплее Retina с разрешением 2880x1800, работающем со скоростью 60 кадров в секунду, это вычисление в сумме составляет 311 040 000 вычислений в секунду. Как графические инженеры решают эту проблему?

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

Представьте крошечные микропроцессоры в виде таблицы каналов, а данные каждого пикселя — в виде шарика для пинг-понга. 14 400 000 шариков для пинг-понга в секунду могут забить почти любую трубу. Но с таблицей 800x600 крошечных каналов, получающих 30 волн по 480 000 пикселей в секунду, можно справиться без проблем. То же самое работает и при более высоких разрешениях: чем больше у вас параллельного оборудования, тем больше потоков, с которым оно может работать.

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

Что такое GLSL?

Почему шейдеры так болезненны?

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

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

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

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

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

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

Графический процессор спроектирован как механизм обработки одной инструкции и нескольких данных (SIMD), предназначенный для массовых параллельных рабочих нагрузок. Трехмерная графика — один из лучших примеров высокопроизводительной параллельной обработки, поскольку графические процессоры могут обрабатывать миллиарды пикселей/вершин или операций с плавающей запятой (GFLOPS) каждую секунду. В основе GPU лежат один или несколько шейдеров (модулей SIMD), которые обрабатывают независимые вершины, примитивы и фрагменты (пиксели). Шейдеры — это вычислительные элементы, которые выполняют программы 3D-графики для каждой вершины, пикселя или другого примитива.

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

Вычислительные шейдеры, такие как в OpenGL ES 3.1, полезны для расширенного рендеринга графики, когда вы можете смешивать контексты 3D и GPU Compute (GPGPU) для добавления реальных эффектов, таких как обработка физики (естественные движения волн и ветра или яркие взрывы в игре). ) и глобальное освещение (лучшее освещение и тени за счет вычислений с использованием прямых и непрямых источников/лучей света). Графические процессоры также могут эффективно масштабироваться от одного блока шейдеров до тысяч взаимосвязанных, сгруппированных блоков шейдеров для повышения производительности и параллелизма в зависимости от целевого приложения, начиная от Интернета вещей и мобильных и заканчивая высокопроизводительными вычислениями (HPC) и научными вычислениями. Высокопроизводительные шейдеры могут работать на частоте более 1,2 ГГц и выполнять миллиарды инструкций за цикл для обработки графики, OpenCL, OpenVX (обработка изображений) и т. д.

На рис. 1 показаны некоторые из основных различий между архитектурами ЦП и ГП. Каждая конструкция имеет свои сильные стороны и должна работать в тандеме для достижения наиболее оптимального решения (мощность, пропускная способность, совместное использование ресурсов и т. д.). Лучшие проекты используют гетерогенную системную архитектуру, которая разделяет/назначает рабочие нагрузки каждому процессорному ядру в зависимости от его сильных сторон. Графический процессор также становится важной частью системы, поскольку отрасль движется к оптимизации на уровне платформы, где графический процессор используется для приложений с интенсивными вычислениями, помимо графики. Обратите внимание, что в современных гибридных конструкциях есть другие вычислительные блоки, включая DSP, FPGA и другие ядра для конкретных задач, которые можно использовать вместе с комбинацией CPU-GPU.

Введение в конвейер графического процессора

В новых графических процессорах используются «унифицированные» шейдеры для обеспечения наилучшего управления аппаратными ресурсами между различными типами шейдерных программ для балансировки рабочих нагрузок.Первые версии унифицированных шейдеров сочетали обработку вершин (VS) и пикселей (PS), а последующие версии добавляли поддержку геометрических (GS), мозаичных (TS) и вычислительных (CS) шейдеров по мере расширения графических API.

Для унифицированных шейдеров рабочие нагрузки, назначенные каждому шейдеру, могут быть основаны либо на вершинах, либо на пикселях, что позволяет шейдеру мгновенно переключаться между любыми контекстами для поддержания высокого уровня использования шейдера. Это сводит к минимуму узкие места и остановки аппаратных ресурсов в случаях, когда у вас есть изображение с большим количеством вершин или пикселей. В неунифицированных шейдерных архитектурах существуют отдельные фиксированные шейдеры VS и PS. Например, если изображение загружено вершинами, VS может остановить конвейер графического процессора, поскольку он должен завершиться, прежде чем графический процессор сможет продолжить обработку остальной части изображения. Это вызывает пузыри конвейера и неэффективное использование оборудования. На рис. 2 показан случай, когда у вас есть отдельные VS и PS, а не единое ядро ​​шейдера.

За прошедшие годы шейдеры графических процессоров вышли за рамки графики и теперь включают в себя конвейеры общего назначения, которые можно настроить для графики, вычислений, совместной обработки изображений (ISP), встроенного зрения, видео (HEVC и H.264 до/после обработки). обработка и т.д.), и другие параллельные приложения. Вот почему вы слышите такие термины, как GPGPU (ГП общего назначения) и Вычисления на ГП, используемые для описания широкого использования ГП за пределами рендеринга графики.

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

Интерфейс хоста и (защищенный) MMU

  • Обмен данными с ЦП через интерфейсы ACE-Lite/AXI/AHB.
  • Обрабатывает команды ЦП и получает доступ к данным геометрии из буфера кадров или системной памяти.
  • Выводит поток вершин, который отправляется на следующий этап (вершинный шейдер).
  • Управляет всеми транзакциями графического процессора, включая отправку инструкций/данных шейдерам, выделяет/освобождает ресурсы и обеспечивает безопасность для безопасных транзакций и сжатия данных.

Программируемые унифицированные шейдеры

  • Вершинные шейдеры (VS) включают преобразование вершин, освещение и интерполяцию и могут быть простыми (линейными) или сложными (эффекты морфинга).
  • Шейдеры пикселей/фрагментов (PS) вычисляют окончательное значение пикселя с учетом освещения, теней и других атрибутов, включая наложение текстур.
  • Геометрический шейдер (GS) берет примитив (линию, точку или треугольник) и модифицирует, создает (или уничтожает) вершины для повышения уровня детализации объекта. GS позволяет конвейеру графического процессора получать доступ к соседним примитивам, чтобы ими можно было манипулировать как тесно связанной группой для создания реалистичных эффектов, когда соседние вершины взаимодействуют друг с другом для создания эффектов плавного плавного движения (волосы, одежда и т. д.). Комбинация GS/VS/PS обеспечивает более автономную работу графического процессора для внутренней обработки изменений состояния (минимизирует взаимодействие ЦП и графического процессора) за счет добавления арифметической и динамической логики управления потоком для разгрузки операций, которые ранее выполнялись на ЦП. Еще одной ключевой функцией является Stream Out, когда VS/GS может выводить данные непосредственно в память, а доступ к данным может осуществляться автоматически и неоднократно шейдерным блоком или любым другим блоком графического процессора без вмешательства ЦП. Stream Out полезен для рекурсивного рендеринга (повторного использования данных) объектов, требующих многократных проходов, таких как преобразование поверхностей объектов и детальное картирование смещения.
  • Шейдеры тесселяции (TS) включают два модуля с фиксированными функциями, называемые шейдерами Hull и Domain в конвейере TS. TS берет криволинейные поверхности (прямоугольные или треугольные) и преобразует их в представления полигонов (сетка/патч) с различными значениями количества, которые можно изменять в зависимости от требований к качеству. Более высокие значения создают больше деталей, а более низкие значения создают меньше деталей на объекте. Блок тесселяции состоит из трех частей:
    • Шейдер корпуса (HS) – это программируемый шейдер, создающий фрагмент геометрии (поверхности) из базового входного фрагмента (четырехугольника, треугольника или линии) и вычисляющий данные контрольных точек, которые используются для управления поверхностью. HS также вычисляет коэффициент адаптивной тесселяции, который передается тесселятору, чтобы он знал, как разделить атрибуты поверхности.
    • Тесселятор – это фиксированный (настраиваемый) функциональный этап, который разбивает патч на более мелкие объекты (треугольники, линии или точки) на основе коэффициента тесселяции из HS.
    • Domain Shader (DS) — это программируемый шейдер, который оценивает поверхность и вычисляет новую позицию вершины для каждой разделенной точки в выходном фрагменте, который отправляется в GS для дополнительной обработки.

    Программируемый растеризатор

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

    Интерфейс памяти

    • Удаляет невидимые или скрытые пиксели с помощью Z-буфера, трафаретных/альфа-тестов перед записью пикселей в буфер кадра.
    • На этом этапе выполняется сжатие, включая Z и цветовой буфер.

    Немедленный режим по сравнению с графическими процессорами с отложенным рендерингом

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

    В 1995 году (еще до появления смартфонов/планшетов) многие графические компании поддерживали оба метода на рынках ПК и игровых консолей. В группу TBDR входили такие компании, как Intel, Microsoft (Talisman), Matrox, PowerVR и Oak. На стороне IMR были такие имена, как SGI, S3, Nvidia, ATi и 3dfx. Перенесемся в 2014 год — на рынках ПК и игровых консолей не используются архитектуры TBDR. Все архитектуры ПК и консолей, включая PS3/PS4, Xbox 360/One и Wii, основаны на IMR.

    Основной причиной этого перехода была присущая IMR сила архитектуры рендеринга объектов, которая могла обрабатывать очень сложные динамичные игровые процессы (например, быстрые движения, FPS или гоночные игры, где сцены или точки обзора постоянно меняются от кадра к кадру). -Рамка). Кроме того, по мере увеличения числа треугольников 3D-контента TBDR не могли идти в ногу, поскольку им приходилось постоянно переполнять свою кэш-память в память кадрового буфера из-за своих архитектурных ограничений. Большее количество треугольников/полигонов позволяет графическому процессору отображать шелковисто-гладкие и детализированные (реалистичные) поверхности вместо блочных изогнутых поверхностей, которые появлялись в старых играх. Благодаря добавлению в IMR шейдеров тесселяции рендеринг поверхности, в котором треугольники и многоугольники дополнительно подразделяются, еще больше приближает трехмерную графику к реальности.

    Сегодняшний рынок мобильных устройств точно отражает тенденции рынка ПК и игровых консолей, где технология IMR заменяет TBDR. На рынке TBDR есть две компании, Imagination и ARM, хотя ARM пытается перейти на IMR, поскольку они видят большие преимущества при запуске игр следующего поколения на мобильных устройствах. На стороне IMR у вас есть Qualcomm, Vivante, Nvidia, AMD и Intel.

    Большое преимущество использования IMR заключается в том, что разработчики игр и приложений могут повторно использовать и легко переносить свои существующие игровые ресурсы, уже работающие на сложных графических процессорах (или игровых консолях), на мобильные устройства. Поскольку мобильные устройства имеют строгие ограничения по энергопотреблению/температуре и площади кристалла, лучший способ сократить разрыв в производительности и свести к минимуму портирование приложений или значительные изменения кода – использовать архитектуру, аналогичную той, на которой они разрабатываются. IMR дает разработчикам такой выбор в дополнение к получению эквивалентного высококачественного рендеринга ПК-качества, и все это упаковано в меньшую площадь кристалла, чем решения TBDR. IMR также повышает пропускную способность внутренней системы и внешней памяти по мере того, как отрасль выходит за рамки интерфейсов прикладного программирования (API) OpenGL ES 3.1 и DirectX 12.

    Наконец, архитектуры TBDR оптимизированы для 3D-контента с небольшим количеством треугольников/полигонов и простых пользовательских интерфейсов. Архитектуры IMR превосходны, когда речь идет о динамических пользовательских интерфейсах и детализированном 3D-контенте, которые обеспечивают одинаковый пользовательский опыт и качество игры на ПК и игровых консолях на мобильных устройствах.

    Графические API на протяжении многих лет

    Ведущий 3D API для мобильных устройств основан на API OpenGL ES от Khronos Group, который используется в большинстве современных смартфонов и планшетов с широким спектром операционных систем, включая Android, iOS и Windows. OpenGL ES основан на настольной версии OpenGL, оптимизированной для мобильных устройств, включая удаление избыточных и редко используемых функций и добавление форматов данных, удобных для мобильных устройств.

    Первоначальная версия OpenGL ES 1.1 была основана на оборудовании с фиксированными функциями, а OpenGL ES 2.0 была основана на программируемых вершинных и фрагментных (пиксельных) шейдерах, при этом были удалены преобразования с фиксированными функциями и конвейер фрагментов версии 1.1. OpenGL ES 3.0 продвигает отрасль еще дальше, добавляя функции, основанные на OpenGL 3.3/4.x, и снижает потребность в расширениях, что упрощает программирование, создавая более жесткие требования к поддерживаемым функциям и уменьшая изменчивость реализации. Некоторые функции GLES 3.0 включают запросы окклюзии, MRT, массивы текстур/вершин, создание экземпляров, обратную связь по преобразованию, дополнительные возможности программирования, совместимость с OpenCL, более высокое качество (32-битные числа с плавающей запятой/целые числа), текстуры NPOT, 3D-текстуры и многое другое.

    В марте 2014 года на конференции разработчиков игр компания Khronos представила OpenGL ES 3.1 с такими улучшениями, как вычислительные шейдеры (CS), отдельные объекты шейдеров, команды непрямого рисования, улучшенное текстурирование и новые языковые дополнения GLSL. Одновременно с OpenGL ES 3.1 компания Google также выпустила пакет расширений для Android L (AEP), для которого требуются функции шейдера геометрии (GS) и тесселяции (TS) в мобильном оборудовании, чтобы предоставить расширенные возможности 3D на платформах Android для отражения графики на уровне ПК. На рис. 3 показана временная шкала развития OpenGL и OpenGL ES на протяжении многих лет. Переходы и сопоставление для Microsoft DirectX (DX) API показаны на рис. 4. DX9 сопоставляется с OpenGL ES 2.0, а DX10/DX11 сопоставляется с OpenGL ES 3.1.

    Графический процессор выходит за рамки графики

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

    GPU, выходящие за рамки графики, могут называться вычислительными ядрами GPU или GPGPU. Были реализованы различные отраслевые стандарты, такие как OpenCL, HSA, OpenVX и Microsoft DirectCompute, в которых параллелизм задач и инструкций теперь оптимизирован для использования преимуществ различных процессорных ядер. В ближайшем будущем мобильные устройства будут лучше использовать системные ресурсы за счет разгрузки ЦП, DSP или пользовательских ядер и использования графического процессора для достижения максимальной производительности вычислений, плотности вычислений, экономии времени и общего ускорения системы. Наилучшим подходом будет использование гибридной реализации, в которой ЦП и ГП тесно чередуются для достижения целевых показателей производительности и энергопотребления.


    Рисунок 5 | В приведенной ниже таблице сравниваются ЦП и ГП с учетом различных факторов, таких как задержка памяти, управление потоками и параллелизм выполнения.

    Многие вычислительные задачи, такие как обработка изображений, обработка изображений, аналитика, математические вычисления и другие параллельные алгоритмы, хорошо сочетаются с архитектурой GPU SIMD. Вы даже можете запрограммировать графический процессор для использования подхода с несколькими графическими процессорами, при котором вычислительная задача и/или кадр 3D-рендеринга распределяются между графическими процессорами для повышения производительности и пропускной способности. Графический процессор может работать в многоконтекстных режимах для одновременного выполнения 3D и вычислительных потоков. Например, ядра 1 и 2 графического процессора назначены для рендеринга изображений, а ядра 3 и 4 предназначены для функций GPGPU, таких как эффекты частиц (дым/вода/огонь), игровая физика для имитации реального движения или естественный пользовательский интерфейс (NUI). ) обработка для поддержки жестов. Другие рынки, на которых применяется GPGPU, особенно в сегментах встраиваемых систем/компьютерного зрения, включают:

    • Дополненная реальность: реальная среда накладывается на данные, сгенерированные графическим процессором (изображения, данные, 3D-рендеринг и т. д.), которые можно вводить с различных датчиков, таких как Google Glass. AR может работать с потоками контента в Интернете (в прямом эфире и напрямую) или в автономном режиме.
    • Извлечение признаков: жизненно важно для многих алгоритмов машинного зрения, поскольку необходимо создавать «точки интереса» и дескрипторы изображения, чтобы графический процессор знал, что обрабатывать. SURF (Speeded Up Robust Features) и SIFT являются примерами алгоритмов, которые можно эффективно распараллелить на графическом процессоре. Распознавание объектов и знаков являются формами этого приложения.
    • Обработка облака точек: включает извлечение признаков для создания 3D-изображений для обнаружения фигур и сегментации объектов в загроможденном изображении. Использование может включать добавление дополненной реальности к картам просмотра улиц.
    • Усовершенствованные системы помощи водителю (ADAS): многочисленные функции безопасности постоянно рассчитываются в режиме реального времени, включая обнаружение линии/ассистент движения по полосе (преобразование Хафа, алгоритмы Собеля/Канни), обнаружение пешеходов (гистограмма ориентированных градиентов или HOGS), изображение де -деформация, обнаружение слепых зон и другие.
    • Безопасность и наблюдение: включает в себя распознавание лиц, которое проходит через локализацию ориентиров лица (классификаторы признаков Хаара), извлечение и классификацию черт лица, а также распознавание объектов.
    • Обработка движения: естественные пользовательские интерфейсы, такие как распознавание жестов рук, которое отделяет руку от фона (например, преобразование цветового пространства в цветовое пространство HSV), а затем выполняет структурный анализ руки для обработки движения.
    • Обработка видео: совместная обработка видео HEVC с использованием шейдерных программ и высокоскоростных вычислений с целыми и плавающими числами.
    • Обработка изображений: объединение GPGPU с процессорами обработки сигналов изображения (ISP) для оптимизированного конвейера обработки изображений.
    • Слияние сенсоров: объединяет обработку зрения с данными других сенсоров (таких как LIDAR) для создания трехмерной пространственной карты с глубиной. Похожая концепция, используемая в графике, — это трассировка лучей, когда вы испускаете луч и прослеживаете его путь через изображение, а также вычисляете все пересечения и отскоки луча от объекта для создания реалистичного трехмерного изображения.

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

    Бенсон Тао — технолог по продуктам в Vivante Corp., отвечающий за планирование продуктов и развитие бизнеса. Более 12 лет он работает в индустрии графических процессоров и видео, занимая различные технические и деловые должности.

    Читайте также: