Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_CUDA.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆
    1. Краткая история развития графических адаптеров

Исторически первым широкодоступным графическим ускорителем для PC был 3DFX Voodoo. Этот ускоритель ограничивался обработкой двухмерных треугольников, а геометрический этап (geometry stage) графического конвейера, в процессе выполнения которого производятся математические вычисления над вещественными числами с плавающей точкой, должен был целиком выполняться на центральном процессоре.

В 1999–2000 гг. с появлением GPU NVIDIA GeForce 256, ATI Radeon 7500 и S3 Savage3D геометрический этап графического конвейера переносится с центрального процессора на GPU благодаря добавлению модуля преобразований и освещения TnL (Transform and Lighting). GPU теперь способен обрабатывать 3D-треугольники и выполнять расчет их освещения.

В 2001 г. произошли первые шаги в сторону программируемости GPU. Появились серии NVIDIA GeForce 3 и ATI Radeon 8500. Операции для обработки вершин загружаются в GPU в виде маленькой программы, называемой вершинным шейдером.

В 2002–2003 гг. с появлением серий NVIDIA GeForce FX и ATI Radeon 9000 этап обработки пикселей тоже стал программируемым. Динамическое управление потоком данных (ветвления и циклы) стало доступным в вершинных шейдерах, но осталось статическим в шейдерах пиксельных.

В то время существовало лишь два способа программирования графических процессоров средствами графических библиотек для трехмерной визуализации: Direct3D и OpenGL. Библиотека Direct3D (часть DirectX) предложена и поддерживается корпорацией Microsoft, а библиотека OpenGL на данный момент находится под контролем комитета Architectural Review Board (ARB), куда входят представители наиболее влиятельных в 3D-секторе корпораций – nVidia, ATI, SGI, Apple, Intel, id Software, Microsoft и др.

В конце 2006 г. были разработаны низкоуровневые платформы для вычислений общего назначения: NVIDIA CUDA (Compute Unified Device Architecture) и ATI Stream (ранее называлась Close-To-Metal).

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

В 2003 г. Марк Харрис в своей докторской диссертации на тему «Моделирование и рендеринг облаков в реальном времени» ввёл термин GPGPU. GPGPU (General Purpose computing on Graphics Processing Units) – технология использования графических адаптеров для любых вычислительных задач, решаемых на центральных процессорах. В 2006 г. Ян Бак защитил докторскую диссертацию в Стэнфордском университете на тему “Потоковые вычисления на графических процессорах”. Такое использование GPU стало возможным после появления аппаратной поддержки плавающей арифметики двойной точности, что позволило реализовать этапы графического конвейера на графических процессорах. Реализация арифметики двойной точности, необходимой при решении большого числа научных и технических задач, появилась в 2007–2008 гг. в сериях GPU NVIDIA GeForce 200 (чип GT200) и AMD Radeon HD3800 (чип R600).

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

В конце 2008 г. были выпущены специализированные GPGPU-платформы: DirectCompute (в рамках DirectX 11) от Microsoft и OpenCL (Open Compute Language) от группы компаний Khronos, которые независимы от производителя GPU и предоставляют возможности гибкого программирования.

Вычисления на GPU развивались очень быстро. И в дальнейшем два основных производителя видеочипов, NVIDIA и AMD разработали и анонсировали соответствующие платформы под названием CUDA (Compute Unified Device Architecture) и CTM (Close To Metal или AMD Stream Computing) соответственно. В отличие от предыдущих моделей программирования GPU эти были выполнены с учётом прямого доступа к аппаратным возможностям видеокарт. Платформы не совместимы между собой: CUDA — это расширение языка программирования C, а CTM — виртуальная машина, исполняющая ассемблерный код. Зато обе платформы ликвидировали некоторые из важных ограничений предыдущих моделей GPGPU, использующих традиционный графический конвейер и соответствующие интерфейсы Direct3D или OpenGL.