На примере этой программы, отметим некоторые ключевые особенности MC#-программ, предназначенных для исполнения на GPU, которые будут детализированы в последующих разделах:
Особенности архитектуры и программирования графических ускорителей
Развитие современных графических ускорителей или Graphic Processor Unit (в дальнейшем GPU) привело к появлению графических ускорителей с программируемым конвейером. Если раньше программист графических приложений мог использовать только фиксированную функциональность GPU, то теперь 2 стадии обработки информации в конвейере GPU стали программируемыми. Более точно программируемой стала обработка вершин, что позволило создавать, в частности, более разнообразные модели «освещения», а так же обработка фрагментов. Столь коренное изменение архитектуры GPU привело к возможности использования GPU не только для целей компьютерной графики, но и для задач, которые раннее решались на CPU, таким образом, появилась Технология Вычислений Общего Назначения на Графическом Ускорителе или General Purpose computation on Graphic Processor Unit (в дальнейшем просто GPGPU).
Идея применения специализированных арифметических ускорителей при построении суперкомпьютерных систем за последнее 5-10 лет стала довольно популярной благодаря возможности существенного повышения производительности при сохранении уровня энергопотребления и количества вычислительных узлов. Если проследить за эволюцией списка самых быстрых суперкомпьютеров мира Top500, то легко заметить, что переход к гетерогенным архитектурам не раз позволял соответствующим вычислительным системам занимать первые места с существенным отрывом от «классических» кластеров.
Графический ускоритель – это устройство, преобразующее графический образ, хранящийся как содержимое памяти компьютера (или самого адаптера), в форму, пригодную для дальнейшего вывода на экран монитора. Первые мониторы, построенные на электронно-лучевых трубках, работали по телевизионному принципу сканирования экрана электронным лучом, и для отображения требовался видеосигнал, генерируемый видеокартой.
Применить технологии, отработанные при создании мощных игровых видеокарт для параллельных вычислений, впервые удалось NVIDIA, не остался в стороне и AMD со своим ускорителем FireStream. Использование графических ускорителей (GPGPU) позволяет получить значительную вычислительную мощность в десятки раз дешевле по деньгам и потребляемой мощности. В нынешнем списке TOP500три из первой пятерки суперкомпьютеров используют ускорители NVIDIA TESLA. GPGPU — единственная доступная по деньгам возможность получить «персональный суперкомпьютер» терафлопсной мощности в обычном настольном корпусе. Однако не все так просто, программирование для графических ускорителей не самое простое занятие. Также возникают вопросы, что выбрать — дорогую специализированную Tesla или топовую графическую карту, которая быстрее и дешевле? В любом случае, альтернативы множеству «легких» ядер пока не просматривается, а значит, приходится программировать все более параллельно. Сейчас выбор ПО, предназначенного для параллельной обработки данных с использованием не только лишь CPU весьма и весьма велик.
В заметке я постараюсь раскрыть особенности архитектуры и программирования графических процессов. Предмет работы – графический процессор и ускоритель. Задача – собрать и проанализировать сведения об архитектуре графических ускорителей, а так же способах их программирования. Рассмотрены следующие вопросы:
- Развитие графических ускорителей;
- Преимущества GPGPU;
- Архитектура GPGPU;
- Технологии программирования GPGPU: CUDA, OpenCL, Direct X.
1 Общие сведения о графических ускорителях
Современная видеокарта состоит из следующих частей:
- графический процессор (Graphics processin gunit – графическое процессорное устройство) — занимается расчётами выводимого изображения, освобождая от этой обязанности центральный процессор, производит расчёты для обработки команд трёхмерной графики.
видеоконтроллер — отвечает за формирование изображения в видеопамяти, даёт команды RAMDAC на формирование сигналов развёртки для монитора и осуществляет обработку запросов центрального процессора. Кроме этого, обычно присутствуют контроллер внешней шины данных (например, PCI или AGP), контроллер внутренней шины данных и контроллер видеопамяти. - видеопамять — выполняет роль кадрового буфера, в котором хранится изображение, генерируемое и постоянно изменяемое графическим процессором и выводимое на экран монитора (или нескольких мониторов). цифро-аналоговый преобразователь (ЦАП, RAMDAC – Random Access Memory Digital-to-Analog Converter) — служит для преобразования изображения, формируемого видеоконтроллером, в уровни интенсивности цвета, подаваемые на аналоговый монитор.
- видео-ПЗУ (Video ROM) — постоянное запоминающее устройство, в которое записаны видео-BIOS, экранные шрифты, служебные таблицы и т. п. ПЗУ не используется видеоконтроллером напрямую — к нему обращается только центральный процессор.
- система охлаждения — предназначена для сохранения температурного режима видеопроцессора и видеопамяти в допустимых пределах.
Современные GPU обладают высокой скоростью доступа к своей собственной оперативной памяти, которая обычно именуется текстурной памятью, и имеют высокую вычислительную мощность.
Для примера приведем некоторые числа:
Если у Intel 3.0 GHz Pentium 4 пиковая вычислительная мощность оценивается как 12 GFLOPs, то у видеокарты ATI Radeon X1800XT 120 GFLOPs, для этого же оборудования пиковая скорость обмена данными между процессором и соответствующей памятью составляет соответственно 5.96 GB/s у CPU против 42 GB/s у GPU1.
На рисунке 1 показана производительность видеокарт разных поколений с разрешением 1920х1080:
Но GPU не только быстры и мощны, но и что важно, их мощности растут очень быстрыми темпами.
Вершинный процессор — программируемый модуль, который выполняет операции над входными значениями вершин и другими связанными с ними данными. Вершинный процессор предназначен для выполнения следующих традиционных операций с графикой:
- преобразования вершин;
- преобразования нормали, нормализации;
- генерирования текстурных координат;
- преобразования текстурных координат;
- настройки освещения;
- наложения цвета материала.
Фрагментный процессор — программируемый модуль, который выполняет операции над фрагментами и другими связанными с ними данными. Фрагментный процессор может выполнять следующие стандартные графические операции:
- операции над интерполированными значениями;
- доступ к текстурам;
- наложение текстур;
- создание эффекта дымки;
- наложение цветов.
Если учесть при этом относительно низкую стоимость видеокарт по сравнению с равномощными CPU, то станет понятно зачем использовать видеокарты для вычислений общего назначения.
Для обработки графики пользовательского интерфейса, игр, видео и т.д., производители закладывают ряд драйверов, инструментов и библиотек: OpenGL ES, OpenCL, Vulkan и DirectX. Чем новее SoC, тем современнее драйвера, а устройство демонстрирует лучшие показатели производительности или возможностей, при выполнении привычных задач.
Что такое видеокарта (GPU)?
Видеокарта (видеоадаптер, графический адаптер, графическая плата, графическая карта, графический ускоритель или на английском: video card, graphics card) — это устройство, преобразующее графический образ или код, хранящийся как содержимое в памяти компьютера (или самого графического адаптера), в форму, пригодную для дальнейшего вывода на экран монитора.
Проще говоря, видеокарта в совокупности с другими компонентами компьютера позволяет преобразовать протекающий машинный код (последовательность команд) внутри вашего компьютера в удобочитаемое изображение для человеческого глаза.
В первую очередь, под видеокартой подразумевается устройство с графическим процессором, который занимается формированием самого графического образа. Все современные видеокарты не ограничиваются простым выводом изображения, они имеют встроенный графический процессор, который может производить дополнительную обработку команд и кода, снимая данную часть задачи с центрального процессора компьютера.
Также современные видеокарты от Nvidia и AMD на аппаратном уровне осуществляют рендеринг графического конвейера для построения и отображения двумерной и трёхмерной компьютерной графики на спецификациях OpenGL, DirectX и Vulkan.
Зачастую видеокарта выполнена в виде отдельной печатной платы и используется в отдельном слоте расширения (AGP, PCI Express) материнской платы. Однако широко распространены и встроенные (интегрированные) в системную плату или процессор видеокарты. Ниже мы посвятим отдельный блок в ключе сравнения интегрированных и внешних (дискретных) видеокарт.
История появления графических процессоров
Пожалуй, это был один из самых сложных и тернистых путей компьютерного прогресса, и начинался он, как могли подумать многие, не с вывода примитивной 2D или 3D графики, а с вывода самого простого текста на монохромный экран монитора.
Стоит обозначить, что мы не будет разбирать всю хронологию графических адаптеров, а обозначим только самые значимые и переломные моменты истории.
Итак, давайте начнём по порядку.
Самым первым графическим адаптером стал MDA (Monochrome Display Adapter), разработанный в 1981 году. MDA был основан на чипе Motorola 6845 и оснащен 4 КБ видеопамяти. Он работал только в текстовом режиме с разрешением 80×25 символов и поддерживал пять атрибутов текста: обычный, яркий, инверсный, подчёркнутый и мигающий. Никакой цветовой или графической информации он передавать не мог, и то, какого цвета будут буквы, определялось моделью используемого монитора.
Однако настоящим прародителем современных видеокарт принято считать CGA (Color Graphics Adapter), выпущенный компанией IBM в 1981 году. CGA мог работать как в текстовом режиме с разрешениями 80×25, так и в графическом с разрешениями до 640×200 точек и с возможностью отрисовки 16 цветов.
С момента появления первого цветного графического адаптера CGA в 1981 и вплоть до 1991 никаких революционных инноваций не происходило от слова «совсем». В основном разработчики и конструкторы аппаратных плат представляли небольшое увеличение разрешения, цветности изображения и т. д.
И только в 1991 году появилось такое понятие, как SVGA (Super VGA) — расширение VGA с добавлением новых режимов и дополнительного сервиса, например, возможности поставить произвольную частоту кадров. Число одновременно отображаемых цветов увеличивается до 65 536 (High Color, 16 бит) и 16 777 216 (True Color, 24 бита), появляются дополнительные как текстовые, так и визуальные режимы отображения информации. SVGA является фактическим стандартом видеоадаптеров где-то с середины 1992 года, после принятия ассоциацией VESA стандарта VBE (VESA BIOS Extention — расширение BIOS стандарта VESA) версии 1.0. До того момента практически все видеоадаптеры SVGA были несовместимы между собой.
Ну что, не устали еще? Если нет, предлагаю продолжить и перейти к разбору того, что из себя представляют интегрированные и дискретные видеокарты.
Hd Graphics применяется только в чипах Intel. Мощность сопоставима с PowerVR при одинаковых частотах. Распространенность и оптимизация низкая, из-за чего SoC не используют больше в смартфонах, а только в планшетах.
Устройство
Современная видеокарта состоит из следующих частей:
- графический процессор (Graphics processing unit — графическое процессорное устройство) — занимается расчётами выводимого изображения, освобождая от этой обязанности центральный процессор, производит расчёты для обработки команд трёхмерной графики. Является основой графической платы, именно от него зависят быстродействие и возможности всего устройства. Современные графические процессоры по сложности мало чем уступают центральному процессору компьютера, и зачастую превосходят его как по числу транзисторов, так и по вычислительной мощности, благодаря большому числу универсальных вычислительных блоков. Однако, архитектура GPU прошлого поколения обычно предполагает наличие нескольких блоков обработки информации, а именно: блок обработки 2D-графики, блок обработки 3D-графики, в свою очередь, обычно разделяющийся на геометрическое ядро (плюс кэш вершин) и блок растеризации (плюс кэш текстур) и др.
- видеоконтроллер — отвечает за формирование изображения в видеопамяти, даёт команды RAMDAC на формирование сигналов развёртки для монитора и осуществляет обработку запросов центрального процессора. Кроме этого, обычно присутствуют контроллер внешней шины данных (например, PCI или AGP), контроллер внутренней шины данных и контроллер видеопамяти. Ширина внутренней шины и шины видеопамяти обычно больше, чем внешней (64, 128 или 256 разрядов против 16 или 32), во многие видеоконтроллеры встраивается ещё и RAMDAC. Современные графические адаптеры (ATI, nVidia) обычно имеют не менее двух видеоконтроллеров, работающих независимо друг от друга и управляющих одновременно одним или несколькими дисплеями каждый.
- видеопамять — выполняет роль кадрового буфера, в котором хранится изображение, генерируемое и постоянно изменяемое графическим процессором и выводимое на экран монитора (или нескольких мониторов). В видеопамяти хранятся также промежуточные невидимые на экране элементы изображения и другие данные. Видеопамять бывает нескольких типов, различающихся по скорости доступа и рабочей частоте. Современные видеокарты комплектуются памятью типа DDR, DDR2, GDDR4 и
- цифро-аналоговый преобразователь (ЦАП, RAMDAC — Random Access Memory Digital-to-Analog Converter) — служит для преобразования изображения, формируемого видеоконтроллером, в уровни интенсивности цвета, подаваемые на аналоговый монитор. Возможный диапазон цветности изображения определяется только параметрами RAMDAC. Чаще всего RAMDAC имеет четыре основных блока — три цифроаналоговых преобразователя, по одному на каждый цветовой канал (красный, зелёный, синий, RGB), и SRAM для хранения данных о гамма-коррекции. Большинство ЦАП имеют разрядность 8 бит на канал — получается по 256 уровней яркости на каждый основной цвет, что в сумме дает 16,7 млн. цветов (а за счёт гамма-коррекции есть возможность отображать исходные 16,7 млн. цветов в гораздо большее цветовое пространство). Некоторые RAMDAC имеют разрядность по каждому каналу 10 бит (1024 уровня яркости), что позволяет сразу отображать более 1 млрд. цветов, но эта возможность практически не используется. Для поддержки второго монитора часто устанавливают второй ЦАП. Стоит отметить, что мониторы и видеопроекторы, подключаемые к цифровому DVI выходу видеокарты, для преобразования потока цифровых данных используют собственные цифроаналоговые преобразователи и от характеристик ЦАП видеокарты не зависят.
- видео-ПЗУ (Video ROM) — постоянное запоминающее устройство, в которое записаны видео-BIOS, экранные шрифты, служебные таблицы и т. п. ПЗУ не используется видеоконтроллером напрямую — к нему обращается только центральный процессор. Хранящийся в ПЗУ видео-BIOS обеспечивает инициализацию и работу видеокарты до загрузки основной операционной системы, а также содержит системные данные, которые могут читаться и интерпретироваться видеодрайвером в процессе работы (в зависимости от применяемого метода разделения ответственности между драйвером и BIOS). На многих современных картах устанавливаются электрически перепрограммируемые ПЗУ (
- система охлаждения — предназначена для сохранения температурного режима видеопроцессора и видеопамяти в допустимых пределах.
Характеристики
- ширина шины памяти, измеряется в битах — количество бит информации, передаваемой за такт. Важный параметр в производительности карты.
- объём видеопамяти, измеряется в мегабайтах — объём встроенной оперативной памяти видеокарты.
- частоты ядра и памяти — измеряются в мегагерцах, чем больше, тем быстрее видеокарта будет обрабатывать информацию.
- техпроцесс — технология изготовления основных микросхем видеокарты, указывается характерный размер, измеряемый в нанометрах (нм), современные микросхемы выпускаются по 90, 80, 65, 55 или 40-нм нормам техпроцесса. Чем меньше данный параметр, тем больше элементов можно уместить на кристалле микросхемы.
- текстурная и пиксельная скорость заполнения, измеряется в млн. пикселов в секунду, показывает количество выводимой информации в единицу времени.
- выводы карты — первоначально видеоадаптер имел всего один разъём VGA (15-контактный D-Sub). В настоящее время платы оснащают одним или двумя разъёмами DVI или Display Port. Порты D-SUB, DVI и USB-концентраторы и иные устройства ввода-вывода. На видеокарте также возможно размещение композитных и
- DirectX 7 — карта не поддерживает шейдеры, все картинки рисуются наложением текстур;
- DirectX 8 — поддержка пиксельных шейдеров версий 1.0, 1.1 и 1.2, в DX 8.1 ещё и версию 1.4, поддержка вершинных шейдеров версии 1.0;
- DirectX 9 — поддержка пиксельных шейдеров версий 2.0, 2.0a и 2.0b, 3.0;
- DirectX 10 — поддержка унифицированных шейдеров версии 4.0;
- DirectX 10.1 — поддержка унифицированных шейдеров версии 4.1.
- OpenGL 1.0
- OpenGL 1.2
- OpenGL 1.4
- OpenGL 2.0
- OpenGL 2.1
- OpenGL 3.0
На первый взгляд такое различие в производительности видеокарт кажется абсурдом — зачем производителю дополнительно устанавливать более слабую видеокарту? Но на практике такое сочетание иногда встречается в бюджетных моделях ноутбуков, например, в HP Laptop 15-gw0040ur.
Драйвера
Для обработки графики пользовательского интерфейса, игр, видео и т.д., производители закладывают ряд драйверов, инструментов и библиотек: OpenGL ES, OpenCL, Vulkan и DirectX. Чем новее SoC, тем современнее драйвера, а устройство демонстрирует лучшие показатели производительности или возможностей, при выполнении привычных задач.
Традиционно лучшие наработки получают мобильные платформы топового и флагманского сегмента. Жизненный цикл, поддержка и обновление таких чипов в приоритете. Тогда как средний или бюджетный сегмент обновляется в последнюю очередь, либо не получает обновы вообще. Поддержка Qualcomm в среднем 2-3 года; MediaTek 1-1.5 года, нижний сегмент обновляется только с выходом новых чипов.
Учитывать версии драйверов стоит в том случае, если смартфон или планшет покупается с запасом на будущее. Тогда лучший выбор – свежий SoC, топового или флагманского сегмента.
Вывод
В мобильной платформе, графический ускоритель — неотъемлемая часть процессора. Поэтому требуется выбирать оптимальное сочетание обоих элементов, исходя из нагрузки в процессе эксплуатации.
Наилучший вариант – связка Snapdragon-Adreno. Ускоритель не так распространен, как Mali, но поддержка производителя в 2 раза дольше конкурентов. Кроме того имеется запас мощности, что легко компенсирует недостаток оптимизации.
Не рекомендуется рассматривать ускоритель Mali в чипах MediaTek. Это гарантия отсутствия будущих обновлений ОС Android. Так же производительность сопоставимая с ускорителями Adreno 2-4 летней давности.
Кроме того стоит учесть ежегодное увеличение требований системы и недостаток оптимизации. Поэтому важно иметь запас в 20-40 GFlops, для компенсации через 1-2 года эксплуатации.
Кроме того стоит учесть ежегодное увеличение требований системы и недостаток оптимизации. Поэтому важно иметь запас в 20-40 GFlops, для компенсации через 1-2 года эксплуатации.
Разрядность шины памяти
Это настолько важный параметр, что о нем следует сказать отдельно. Шина памяти представляет собой канал между графическим процессором и памятью, и чем он шире (чем больше разрядность), тем больше информации способна видеокарта обработать за единицу времени. Но, так как видеокарта состоит из нескольких компонентов, низкую разрядность можно компенсировать, например, за счет более быстрой и современной видеопамяти.
Принято считать, что игровому компьютеру необходима разрядностьне менее 128 бит. Лучше, если этот показатель будет выше.
Выберите в каталоге
Питание
Разъёмы
6 pin, 8 pin, 6+8 pin
Бюджетные видеокарты и решения низшего среднего класса обходятся без дополнительного питания. Однако многие графические адаптеры со средней и высокой производительностью потребляют так много энергии, что без дополнительного питания им не обойтись. Для этого они комплектуются разъемами различных типов.
Высокое энергопотребление видеокарты означает, что к блоку питания компьютера тоже предъявляются особые требования. Обычно в технических характеристиках графического адаптера указываются рекомендации относительно мощности БП. Ориентируйтесь на эти показатели.
Рекомендуем брать блок питания мощностью не ниже 700 ватт.
Выберите в каталоге
OpenCL (Open Computing Language) — открытый стандарт параллельного программирования для гетерогенных платформ (в частности, для GPGPU), включающих центральные, графические процессоры и другие дискретные вычислительные устройства. OpenCL позволил использовать мощности GPU на различных программных и аппаратных платформах.
Правда ли, что встроенные видеокарты AMD намного быстрее видеокарт Intel?
Встроенная графика Radeon RX Vega появилась в 2018 году и сразу произвела фурор на рынке, занятом массовыми решениями от Intel, такими как HD Graphics 610 и HD Graphics 630. Младшее решение — графика Radeon RX Vega 3, встраиваемая в процессоры Athlon G, уверенно обходит в играх HD Graphics 610, а старшие модели, Radeon RX Vega 8, 10 и 11, не только обходят по скорости любую встроенную графику от Intel, но и на равных соревнуются с дискретными видеокартами Radeon RX 550 и GeForce GT 1030.
Пользователи возлагали надежды на новую графику Intel UHD 750 с архитектурой Xe-LP, встраиваемую в процессоры Rocket Lake-S, но, несмотря на неплохую прибавку в производительности по сравнению с графикой прошлого поколения, Intel UHD 630, достичь уровня Radeon RX Vega 8 в большинстве игр решению от Intel не удалось.
Встроенная графика Radeon RX Vega дала пользователям недорогих ноутбуков играть в современные игры, пусть даже и на минимальных настройках. Но надо учитывать, что для реализации ее потенциала в ноутбуке должен стоять солидный объем ОЗУ, работающей в двухканальном режиме.
Что выбрать?
Итак, мы подходим к главному вопросу: ноутбук с какой графикой выбрать под ваши нужды, ведь цены разных моделей, их производительность в рабочих программах и играх, а также время автономной работы радикально отличаются. Неправильный выбор в одном случае заставит вас переплатить, а в другом — не даст полноценно работать и играть на ноутбуке.
И если при приобретении обычного ПК такие проблемы можно решить апгрейдом, то в случае с ноутбуком придется менять устройство целиком.
Если ваши основные задачи:
- серфинг в интернете
- общение по видеосвязи в мессенджерах
- просмотр видео
- офисная работа
- несложные приложения для обработки видео и графики
- запуск нетребовательных, старых или браузерных игр
Тогда вам стоит присмотреться к ноутбукам с встроенной видеокартой, например, Intel UHD Graphics: вы не только сэкономите, но и получите устройство, позволяющее дольше работать автономно, с низким уровнем шума и небольшим нагревом.
Если вы хотите получить большую производительность в играх, запускать некоторые новинки на минимальных настройках, а в такие хиты, как The Elder Scrolls V: Skyrim или Grand Theft Auto V, играть с комфортом, то стоит присмотреться к ноутбукам с встроенной видеокартой Radeon RX Vega 8, 10 или 11. Стоят они вполне демократично, например, Acer Aspire 3 A315-23-R8D5.
Если ваши задачи включают в себя:
- запуск самых требовательных современных игр
- работу в сложных графических приложениях типа Photoshop или CorelDRAW
- работу в видеоредакторах, таких как Adobe Premiere Pro
- ведение видеоблога и стримов
В этом случае стоит присмотреться к игровым моделям с производительной дискретной видеокартой, например, GeForce RTX 3060. Цена на них уже кусается и может вдвое или втрое превышать цену бюджетных устройств, но вы получите ноутбук, способный полностью заменить мощный ПК в работе и играх и дающий свободу передвижения.