История развития


Историю развития ГПУ для работы с трехмерной графикой можно условно разделить на 3 поколения.

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

Примеры ГПУ 1-ого поколения: S3 ViRGE, ATI Rage - ATI Radeon 7500, Matrox Mystique, 3dfx Voodoo, NVidia GeForce 256 - GeForce 3.

Основные интерфейсы программирования: специализированные интерфейсы взаимодействия, OpenGL (доминирующий), Direct3D.

ГПУ второго поколения добавили возможности программирования к ГПУ первого поколения. Изначально фиксированный алгоритм вычисления освещенности и преобразования координат вершин был заменен на алгоритм, задаваемый пользователем. Затем появилась возможность писать программы для вычисления цвета пиксела на экране. По этой причине программы для ГПУ стали называть шейдерами, от английского shade - закрашивать. Первые шейдеры писались на ассемблере ГПУ, их длина не превосходила 20 команд, не было поддержки команд переходов, а вычисления производились в формате с фиксированной точкой. По мере роста популярности использования шейдеров появлялись высокоуровневые шейдерные языки, например, Cg от NVidia и HLSL от Microsoft, увеличивалась максимальная длина шейдера. В 2003 году на ГПУ впервые появилась поддержка вычислений с 32-разрядной точностью. В качестве основного интерфейса программирования выделился Direct3D, первым обеспечивший поддержку шейдеров. Обозначились основные производители дискретных графических процессоров: компании ATI и NVidia. Появились первые приложения, использующие ГПУ для высокопроизводительных вычислений, начало складываться направление ОВГПУ. Для программирования ГПУ предложен подход потокового программирования. Этот подход предполагает разбиение программы на относительно небольшие этапы (ядра), которые обрабатывают элементы потоков данных. Ядра отображаются на шейдеры, а потоки данных - на текстуры в ГПУ.

Примеры ГПУ 2-ого поколения: NVidia GeForce 4 - 5, ATI Radeon 8500 - X800.

Основные интерфейсы программирования: Direct3D (становится доминирующим), OpenGL, шейдерные языки Cg и HLSL.

ГПУ третьего поколения характеризуются расширенными возможностями программирования. Появляются операции ветвления и циклов, что позволяет создавать более сложные шейдеры. Поддержка 32-битных вычислений с плавающей точкой становится повсеместной, что способствует активному росту направления ОВГПУ. OpenGL в версии 2.0 добавляет поддержку высокоуровневого шейдерного языка GLSL. Производительность ГПУ на реальных задачах достигает сотен гигафлопс. В более поздних представителях третьего поколения появляется поддержка целочисленных операций, а также операций с двойной точностью. Появляются специализированные средства, позволяющее взаимодействовать с ГПУ напрямую, минуя уровень интерфейса программирования трехмерной графики. Начинает развиваться направление создания средств программирования для ОВГПУ. Появляются потоковые библиотеки программирования ГПУ (RapidMind, Accelerator). Появляются первые коммерческие применения ОВГПУ. Этот этап продолжается по настоящее время.

Примеры ГПУ 3-ого поколения: NVidia GeForce 6 - 9, ATI Radeon X1K - HD4K.

Основные средства программирования графических приложений: OpenGL, DirectX, шейдерные языки GLSL, HLSL и CG.

Основные средства программирования ОВГПУ: шейдерные языки, система RapidMind, технология NVidia CUDA, средство AMD CTM-Brook.

Сравнительная таблица различных поколений ГПУ:

  1-ое поколение 2-ое поколение 3-е поколение
Время 1992 - 2001 2001 - 2005 2005 - по настоящее время
Поддерживаемые операции линейные преобразования, растеризация, текстуризация, отсечение невидимых граней + векторные операции + команды управления, целочисленные операции
Поддерживаемая точность 16-битные числа с фиксированной запятой 16, 24, 32-битные вещественные числа 32-битные вещественные и целые числа, 64-битные вещественные числа
Возможности программирования ОВГПУ - + операции над векторами в шейдерах те же самые
Средства программирования графические интерфейсы (OpenGL, DirectX) + шейдерные языки + низкоуровневые средства программирования (CTM, CUDA), потоковые библиотеки (RapidMind)
"Неграфические" приложения - газовая динамика, обработка изображений, преобразование Фурье + линейная алгебра, математическая физика, трассировка лучей, игровая физика
Ускорение - до 10 раз до 100 раз
Основные проблемы низкая точность вычислений, отсутствие возможностей программирования отсутствие сложных управляющих конструкций, небольшое количество инструкций отсутствие высокоуровневых средств программирования и прикладных библиотек
Представители NVIDIA GeForce серии 2 и 3, серия ATI Rage NVIDIA GeForce серии 4 и 5, серии ATI 9000, x700 NVIDIA GeForce серии 6 - 9, серии ATI X1K, HD2K - HD4K


© Лаборатория Параллельных информационных технологий НИВЦ МГУ
Rambler's Top100