GPU

История

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

История

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

История

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

Первое поколение GPU

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

Первое поколение GPU

  • История современных 3D-акселераторов, предназначенных для домашнего использования, началась с компании 3Dfx.
  • Видеокарты на основе процессора Voodoo Graphics, который впоследствии стал называться Voodoo I, производства 3Dfx появились в 1996 году и надолго сделали название производящей их компании синонимом слова 3Dакселератор.
  • Типичное рабочее разрешение для Voodoo I составляло 512 x 384 пикселей, максимальное – 640 x 480 при глубине цвета в 16 бит, поддерживалось до 4 МБ видеопамяти.
  • Одним из факторов успеха молодой компании 3Dfx было использование исключительно новой модели построения 3D-объектов, которая получила название Glide.
  • Glide основывался на библиотеке OpenGL.
  • Сущность модели заключалась в обмене информацией между чипом видеоплаты и видеопамятью, при этом практически вся нагрузка ложилась на последнюю.

Первое поколение GPU

  • Компании nVidia пришлось бросить все силы на разработку 3D-ускорителей, дабы обогнать 3Dfx в кратчайшие сроки.
  • nVidia начала с процессоров Riva128 и Riva128ZX
  • В 1998 году она выпустила новый чип – Riva TNT. Riva TNT поддерживала 32- битный цвет, которого не было в акселераторах Voodoo (они работали исключительно с 16-битными цветами), интерфейс AGP 2x, и частоту работы чипа 90 МГц.
  • Конкуренцию 3Dfx также составляла канадская компания ATI. В основе первого поколения видеокарты Rage лежал чип Mach64. Для использования в Rage он был доработан, обзавелся поддержкой 3D и функцией ускорения видео формата MPEG-1.
  • Rage II поддерживал библиотеки Direct3D и OpenGL. Также была добавлена поддержка формата MPEG-2 и некоторых полезных функций для рендеринга

Второе поколение GPU

  • Отличается дополнительными возможностями программирования.
  • Изначально фиксированный алгоритм вычисления освещенности и преобразования координат вершин был заменен на алгоритм, задаваемый пользователем.
  • Затем появилась возможность писать программы для вычисления цвета пиксела на экране.
  • По этой причине программы для ГПУ стали называть шейдерами, от английского shade - закрашивать.
  • Первые шейдеры писались на ассемблере ГПУ, их длина не превосходила 20 команд, не было поддержки команд переходов, а вычисления производились в формате с фиксированной точкой.
  • По мере роста популярности использования шейдеров появлялись высокоуровневые шейдерные языки, например, Cg от NVidia и HLSL от Microsoft, увеличивалась максимальная длина шейдера

Второе поколение GPU

  • Основоположником GPU принято считать главный чип видеокарты nVidia GeForce 256, появившийся в августе 1999 года, и привнесший в 3D-графику принципиально новые возможности.
  • От предшествующих графических чипов его отличала поддержка технологии Transform Lighting (TL).
  • Эта технология заключается в преобразовании координат вершин в плоские координаты, отображаемые на мониторе, и вычислении их освещенности.
  • Это весьма ресурсоемкие и сложные вычисления, особенно при большом количестве вершин.
  • Ранее они выполнялись на центральном процессоре, что отнимало значительную часть процессорного времени, либо на отдельных процессорах освещения и трансформации.

Второе поколение GPU

  • До 1999 года и первой модели под маркой GeForce геометрическая информация сцены обрабатывалась центральным процессором.
  • Поэтому, благодаря появлению графических процессоров второго поколения, с одной стороны, с CPU снималась часть нагрузки, что позволяло использовать его для решения других, не менее важных задач.
  • С другой стороны, появилась возможность увеличения количества объектов и степени их прорисовки, что позволило добиться нового уровня реалистичности в 3D-приложениях, а особенно в компьютерных играх.

Второе поколение GPU

  • В 2003 году на ГПУ впервые появилась поддержка вычислений с 32-разрядной точностью.
  • В качестве основного интерфейса программирования выделился Direct3D, первым обеспечивший поддержку шейдеров.
  • Появились первые приложения, использующие ГПУ для высокопроизводительных вычислений, начало складываться направление ОВГПУ.
  • Для программирования ГПУ предложен подход потокового программирования. Этот подход предполагает разбиение программы на относительно небольшие этапы (ядра), которые обрабатывают элементы потоков данных
  • Ядра отображаются на шейдеры, а потоки данных - на текстуры в ГПУ.

Третье поколение GPU

  • GPU третьего поколения добавили возможности программирования к графическим процессорам предыдущего поколения.
  • Вершинные шейдеры позволяют определять параметры пикселя (освещенность, прозрачность, отражающую способность, координаты, текстуру), исходя из параметров вершин треугольника, содержащего его.
  • Пиксельные шейдеры позволяют работать с каждым пикселем индивидуально, уже после проведения геометрических преобразований.
  • Обозначились основные производители дискретных графических процессоров: компании nVidia и ATI.
  • К представителям 3D-акселераторов третьего поколения можно отнести nVidia GeForce 2 – 4, ATI Radeon 8500 – 9200.
  • Изменения в GPU, произошедшие на данном этапе, носили эволюционный характер, значительных подвижек по сравнению с предыдущим поколением не наблюдалось.

Четвертое поколение GPU

  • Представители следующего поколения GPU стали уже полностью программируемыми.
  • В качестве основного интерфейса программирования выделился Direct3D, который первым обеспечил поддержку шейдеров (язык HLSL).
  • OpenGL, начиная с версии 2.0, также добавляет поддержку высокоуровневого языка программирования шейдеров GLSL.
  • Появление операций ветвления и циклов позволило создавать более сложные шейдеры.
  • Появились приложения, использующие графические процессоры для высокопроизводительных вычислений, таким образом, начало складываться направление общих вычислений GPGPU (англ. General Purpose GPU).

Четвертое поколение GPU

  • Для программирования GPU был предложен SIMD-подход (англ. Single Instruction Multiple Data).
  • Этот подход предполагает, что группа параллельно работающих процессоров осуществляют действия над разными данными, но при этом все они в произвольный момент времени должны выполнять одинаковую команду.
  • В качестве примеров GPU четвертого поколения можно назвать графические процессоры моделей nVidia GeForce 5 – 7 и ATI Radeon 9500 – X800.
  • На этом этапе наблюдается повсеместное вытеснение стандарта AGP более быстрым PCI Express.
  • В октябре 2006 года ATI официально стала графическим подразделением AMD. ATI была куплена американской компанией за 5,4 миллиардов долларов США.

Пятое поколение GPU

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

Пятое поколение GPU

  • Появляются специализированные средства, позволяющие взаимодействовать с GPU напрямую, минуя уровень интерфейса программирования трехмерной графики.
  • Поддержка 32-битных вычислений с плавающей запятой становится повсеместной, и это способствует активному росту направления GPGPU, для которого создаются средства программирования.
  • Появляются потоковые библиотеки программирования GPU (RapidMind, Accelerator), а также первые коммерческие применения GPGPU (nVidia CUDA, AMD FireStream).
  • Более того, отпадает необходимость в использовании специализированного физического ускорителя (англ. Physics Processing Unit, PPU) PhysX, поскольку GPU получили возможность аппаратно ускорять физические расчеты и освобождать, тем самым, CPU от излишних вычислений.

Архитектура

  • Современные графические процессоры имеют довольно схожую архитектуру, они содержат набор одинаковых вычислительных устройств - потоковых процессоров, (ПП, Thread Processor), работающих с общей памятью графического процессора (видеоОЗУ)
  • Число потоковых процессоров, а также размер видеоОЗУ может быть различным, в зависимости от модели GPU
  • Все ПП синхронно исполняют одну и ту же команду, что позволяет отнести GPU к классу SIMD (англ. single instruction, multiple data — одиночный поток команд, множественный поток данных, ОКМД — принцип компьютерных вычислений, позволяющий обеспечить параллелизм на уровне данных).

Архитектура

GPU vs CPU

  • CPU: одно устройство контроля исполнения, кэш и несколько арифметико-логических устройств
  • GPU: состоит из набора мультипроцессоров, каждый из которых имеет своё устройство контроля исполнения (Control), область разделяемой (Cache) памяти, области регистров и значительно расширенный по сравнению с обычным процессором набор арифметико-логических устройств (ALU).

G80

Семейство карт от NVIDIA

  • GeForce — бренд семейства графических процессоров и чипсетов материнских плат компании NVIDIA, ориентированного на потребительский рынок. Графические процессоры GeForce используются преимущественно в видеоадаптерах для персональных и переносных компьютеров.
  • Quadro — серия видеокарт, разработанных фирмой NVIDIA для пользователей профессиональных приложений
  • Tesla — название семейства вычислительных систем NVIDIA на основе графических процессоров с архитектурой CUDA, которые могут быть использованы для научных и технических вычислений общего назначения. Tesla строится на базе обычных графических процессоров, но, в отличие от видеоускорителей, не имеет средств вывода изображения на дисплей.
  • Tegra — семейство систем NVIDIA на кристалле (SoC — System-on-a-Chip), как платформа для производства мобильных интернет-устройств, таких как смартфоны, коммуникаторы, КПК и др. Кристалл Tegra объединяет в себе ARM-процессор, графический процессор, медиа- и DSP- процессоры, контроллеры памяти и периферийных устройств, имея при этом низкое энергопотребление.

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

  • SP – Streaming Processor
  • TF – Texture Filtering Unit
  • L1/L2 – кэш
  • ROP - Raster Operations
  • FB – фрейм буфер

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

  • В состав процессора G80 входят 128 вычислительных ядер (SP - зеленые) общей пиковой производительностью 518 ГФлопс на тактовой частоте 1.35 ГГц.
  • Нитевые ядра SP объединены в 8 блоков по 16 в каждом, управляемых менеджером потоков и называемых потоковыми мультипроцессорами
  • Каждая группа имеет кэш-память первого (L1) и второго уровней (L2) (причем кэш второго уровня доступен для обращения всем остальным группам)
  • Потоковый мультипроцессор содержит 8 ядер пиковой производительностью 32 ГФлопс с поддержкой операций с числами в формате с плавающей точкой стандарта IEEE 754, что делает ее пригодной для серьезных, неигровых вычислений — например, научных, статистических или экономических.
  • два блока специальных функций — чтение/запись в память, обработка текстур, выборки, переходы, вызовы процедур, операции синхронизации;
  • блок разделяемой памяти 16 Кбайт;
  • блок множественных инструкций.

Потоковый процессор

Потоковый процессор

  • Любой из 128 потоковых процессоров SP представляет собой обычное вычислительное устройство, способное работать с данными в формате с плавающей запятой.
  • Следовательно, он не только способен обрабатывать шейдеры любого типа – вершинные, пиксельные или геометрические, но и использоваться для просчета физической модели или других расчетов, в рамках концепции (CUDA), причем, независимо от других процессоров.
  • Регистровый файл – единый банк регистров, на каждом SP имеется 32Кб. Самый быстрый тип памяти на графическом адаптере.
  • Разделяемая память – специальный тип памяти, предназначенный для совместного использования данных из одного блока. На каждом SM – 16Кб разделяемой памяти.

Потоковый процессор

  • Основные операции, поддерживаемые вычислительными ядрами, следующие:
  • FADD, FMUL, FMAD, FMIN, FMAX, FSET, F2I, I2F — округление до ближайшего четного, округление через 0, поддержка специальных чисел, сброс денормализованных операндов и результатов до 0;
  • целочисленные инструкции: IADD, IMUL24, IMAD24, IMIN, IMAX, ISET, I2I SHR, SHL, AND, OR, XOR.
  • Выполнение инструкций конвейеризировано.
  • В состав ядер также входит блок специальных функций, который осуществляет поддержку выполнения трансцендентных функций: RCP, RSQRT, EXP2, LOG2, SIN, COS.
  • Блок специальных функций позволяет выполнять аппроксимацию функций при помощи квадратичной аппроксимации. Точность вычислений — порядка 22,5- 24,0 бит.

Потоковый процессор

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

Последовательность выполнений

  • При решении прикладных задач на графическом процессоре разработчик должен предварительно разбить задачу на разделы (grids), причем один раздел представляет собой один шаг из последовательности шагов решения задачи.
  • В разделе задачи выделяются блоки, результаты выполнения которых могут быть получены параллельно — раздел распараллеливается.
  • В блоках выделяются элементы/нити, которые выполняются параллельно в режиме взаимодействия, — эти элементы будут соответствовать нитям, выполняющимся на отдельных ядрах
  • На 8 блоков фильтрации приходилось только 4 блока адресации.
  • Каждый из блоков имеет четыре модуля адресации текстур (определения по координатам точного адреса для выборки - TA) и ровно такое же количество модулей билинейной фильтрации (TF).

GT200

Структура графического процессора GT200

  • В основе чипа GT200 лежит базовая архитектура G80.
  • Главное преимущество нового GPU заключается в значительном увеличении количества вычислительных блоков, что вылилось в почти двукратное увеличение числа транзисторов – 1,4 млрд.
  • Новый чип состоит уже из десяти Texture Processing Clusters (TPC), которых в прошлом поколении графических процессоров было всего восемь.
  • Кроме того, количество потоковых процессоров в TPC было увеличено с 16 до 24.
  • 8 блоков ROP

Структура графического процессора GT200

  • общее количество потоковых процессоров равно 240 (24x10), текстурных блоков – 80, блоков ROP – 32.
  • Помимо увеличения количества вычислительных блоков и их организации они были доработаны, а их производительность улучшена.
  • Также было увеличено количество одновременно обрабатываемых потоков, а изменения в регистровом файле повысили эффективность обработки сложных шейдерных программ
  • Точность вычислений с плавающей запятой теперь была увеличена до 64 бит.

Структура графического процессора GT200

  • Самый низкий уровень составляют потоковые процессоры (SP – Streaming Processor).
  • Каждый SP является самым настоящим микропроцессором с очередным типом исполнения команд, обладающим полноценным конвейером, парой ALU и FPU.

Структура графического процессора GT200

  • Первым уровнем объединения является потоковый мультипроцессор, или SM – Streaming Multiprocessor.
  • Потоковый мультипроцессор представляет собой массив из восьми SP, которые находятся в группе с двумя модулями специальных функций SFU – Special Function Units.
  • Каждый SFU содержит в своем составе четыре FPU, заточенные для трансцендентных операций (sin, cos и т.д.) и интерполяции, которые часто используются при расчетах, связанных, например, с анизотропной фильтрацией.
  • SFU является в отдельности таким же полноценным микропроцессором, как и SP.
  • В SM также входит диспетчер исполнения команд MT, который занимается распределением нагрузки по SP и SFU внутри группы.
  • Вдобавок к SP, SFU и MT в мультипроцессоре содержится и небольшой объем памяти (16 Кб - сделано это специально, так как каждый SP работает со своим пикселем и общие объемы информации невелики), общий для всех процессоров.

Структура графического процессора GT200

  • Следующим уровнем объединения является кластер SM, называемый Texture/Processor Cluster (TPC).
  • Внутри одного кластера шейдерные процессоры объединены в три блокаюнита со своей выделенной областью локальной памяти.
  • Также на каждый кластер приходится по 8 текстурных блоков

Структура графического процессора GT200

Уровнем выше располагается общая управляющая логика чипа, распределяющая и планирующая нагрузки на различные кластеры, контроллер PCI-Express 2.0 и шина Interconnect Network, соединяющая процессорную мощь SPA с уровнем L2 кэша текстур и блоками обработки растровой графики (Raster Operation Unit - ROP), которые в свою очередь уже имеют прямой доступ к фрейм буферу.

GF100

GF100

  • 512 CUDA-процессоров
  • 16 геометрических блоков SM - мультипроцессор
  • 4 блока растеризации GPC-Graphics Processing Cluster
  • 64 текстурных блока
  • 48 модулей ROP
  • 384-битный интерфейс памяти GDDR5
  • В GF100 внесено множество усовершенствований, направленных на обработку сложной графической информации.
  • Графический процессор GF100 построен на базе масштабируемой архитектуры, в основе которой лежит применение объединенных в кластеры GPC (Graphic Processing Cluster – кластеры обработки графики) потоковых мультипроцессоров (SM, Streaming Multiprocessor).

GPC (Graphic Processing Cluster – кластеры обработки графики)

GPC (Graphic Processing Cluster – кластеры обработки графики)

  • Каждый такой кластер содержит четыре мультипроцессора (SM), а также все необходимые блоки для обработки геометрических данных и текстурирования.
  • Фактически, каждый GPC представляет собой самостоятельный графический процессор, не имеющий лишь собственной подсистемы памяти.
  • GF100 состоит из четырех таких кластеров, совместно использующих шесть контроллеров памяти, шесть модулей ROP (по 8 блоков ROP в каждом) и L2-кеш.
  • В графическом процессоре GF100 реализованы средства аппаратной поддержки теселляции, причем инженеры NVIDIA уделили этому аспекту максимум внимания.

GF100

  • Использование теселляции фундаментальным образом изменило распределение нагрузки внутри графического процессора и вынудило инженеров NVIDIA несколько изменить компоновку вычислительных блоков и ввести новый тип блока – PolyMorph Engine.
  • Каждый графический кластер (GPC) оснащен четырьмя такими блоками – по одному на каждый мультипроцессор (SM).
  • Каждый PolyMorph Engine выполняет пять стадий: выбор вершин, тесселяция, преобразование координат, преобразование атрибутов, потоковый вывод.

PolyMorph Engine

  • На первом этапе вершины выбираются из глобального буфера, после этого вершина отправляется в мультипроцессор, где ее координаты преобразуются в координаты сцены и определяется уровень тесселяции (аналог уровня детализации, LOD).
  • После этого вершина передается на второй этап – тесселяцию.
  • На этом этапе полигон разбивается на несколько новых, более мелких, по карте смещения определяются их координаты.
  • Полученные новые вершины вновь обрабатываются в мультипроцессоре и передаются через потоковый вывод в память для дальнейшей обработки.
  • После того, как геометрические данные обработаны в PolyMorph Engine они передаются для растеризации в Raster Engine
  • В этом блоке отфильтровываются невидимые примитивы (невидимые поверхности), затем геометрические данные преобразуются в экранные точки, которые в свою очередь сортируются и фильтруются по Z-координате.
  • Каждый кластер (GPC) оснащен одним блоком растеризации, обрабатывающим до 8 точек за такт, то есть суммарная производительность GF100 составляет 32 точки за такт – это в 8 раз больше, чем обеспечивал GT200.

GF100 SM

  • Каждый мультипроцессор состоит из 32 вычислительных блоков CUDA. Каждый процессор CUDA оснащен одним логическим блоком ALU и одним FPU.
  • Кроме того, каждый мультипроцессор оснащен 16 Load/Store-блоками, позволяющими определить адреса данных в кеше или памяти для 16 потоков за каждый такт
  • Предусмотрены и четыре блока специальных функций (SFU - Special Function Unit), выполняющих такие операции как синус, косинус, квадратный корень. Каждый SFU выполняет одну операцию на поток за такт, так что ветвь (warp, 32 потока) выполняется за 8 тактов.
  • Мультипроцессор организует потоки в ветви по 32 потока, для управления этими ветвями используется два планировщика ветвей – две ветви могут выполняться на одном мультипроцессоре одновременно.
  • Планировщики GF100 передают по одной инструкции от каждой ветви группе из 16 ядер CUDA, 16 блоков LD/ST или четырех SFU.
  • Кроме того, каждый SM оснащен четырьмя текстурными блоками – каждый из них отбирает до четырех текстурных семплов за такт, результат может быть сразу же отфильтрован – предусмотрена билинейная, трилинейная и анизотропная фильтрация.

Общая память и кеш.

Общая память и кеш.

  • Общая память – это быстрая, программируемая, расположенная в микросхеме память, позволяющая максимально оптимизировать обмен данными внутри потока.
  • В GF100 помимо общей памяти используется также L1-кеш, собственный внутри каждого мультипроцессора (SM).
  • L1-кеш работает в паре с общей памятью, в то время как общая память предназначена для алгоритмов с упорядоченным доступом к памяти, L1-кеш ускоряет те алгоритмы, где адреса данных не известны заранее.
  • В GF100 каждый мультипроцессор оборудован 64 Кб памяти, которая может быть поделена на 48 Кб общей памяти и 16 Кб L1-кеша или наоборот. Кроме того, предусмотрен унифицированный L2-кеш объемом 768 Кб. Он обеспечивает максимально быстрый обмен данными между различными блоками