- •Оглавление
- •Глава 1 Устройство графических процессоров 4
- •Глава 2 gpgpu – «gpu общего назначения» 12
- •Глава 3 Примеры внедрения nvidia cuda 21
- •Введение
- •Глава 1 Устройство графических процессоров
- •1.1 Принцип работают графического процессора
- •1.2 Устройство графического конвейера
- •1.2.1 Преобразование вершин
- •1.2.2 Построение примитивов и растеризация
- •1.2.3 Текстурирование и окрашивание
- •1.3 Совершенствование графических конвейеров
- •Глава 2 gpgpu – «gpu общего назначения»
- •2.1 Общий обзор
- •2.2 Разница между cpu и gpu в параллельных расчётах
- •2.3 Первые попытки применения расчётов на gpu
- •2.4 Возможности nvidia cuda
- •2.5 Преимущества и ограничения cuda
- •Глава 3 Примеры внедрения nvidia cuda
- •3.1 Мини-суперкомпьютер для томографии
- •3.2 Distributed Password Recovery — высокоскоростное восстановление паролей
- •3.3 Nvidia PhysX — физические расчёты в играх и dcc приложениях
- •3.4 Ускоренная версия пакета утилит текстурного сжатия nvidia Texture Tools 2
- •Заключение
- •Библиографический список
1.2 Устройство графического конвейера
Создатели графических процессоров традиционно реализовывали синтез изображения с помощью аппаратного конвейера, состоящего из ряда специализированных ступеней.
Конвейер — это последовательность состояний, выполняющихся параллельно и в фиксированном порядке. Графический конвейер — это некоторое программно-аппаратное средство, которое преобразует описанные в виртуальном мире объекты в матрицу ячеек видеопамяти растрового дисплея. Каждое состояние конвейера получает данные из предыдущего состояния, обрабатывает их и передает следующему. Стандартный графический конвейер обрабатывает множество вершин, геометрических примитивов и фрагментов конвейерным способом. На рисунке 1 представлена упрощенная схема графического конвейера с его состояниями и данными, которые по ним перемещаются.
Рисунок 1 - Упрощенная схема графического конвейера
В большинстве графических систем, работающих в режиме реального времени, предполагается, что изображения состоят из треугольников. Поэтому в первую очередь необходимо разбить все возможные формы — многоугольники, сложные поверхности и прочие фигуры — на элементарные треугольники. С помощью базовой библиотеки компьютерной графики (чаще всего OpenGL или Direct3D) разработчик последовательно передает на вход конвейера по одной вершине треугольника. А графический процессор по мере необходимости собирает из этих вершин треугольники. [2]
1.2.1 Преобразование вершин
Каждая вершина имеет определенный набор атрибутов, таких как позиция, цвет, вторичный (бликовый) цвет, текстурные координаты, вектор нормали и, возможно, некоторые другие. Трансформация вершин — это первая стадия графического конвейера. На этом этапе входными данными являются атрибуты конкретной вершины, над которыми производятся математические преобразования. Эти данные обрабатываются в вершинном процессоре, который является частью общего конвейера обработки данных. На основании полученных данных вершинный процессор занимается расчетом геометрии сцены и рассчитывает положение вершин, которые при соединении образуют каркасную модель трехмерного объекта. Кроме того, в вершинном процессоре производятся дополнительные операции над вершинами — преобразование и освещение.
Обработка данных в вершинном процессоре происходит под управлением специализированной программы, называемой вершинным шейдером. Вершинные шейдеры производят математические операции с вершинами, то есть предоставляют возможность выполнять программируемые алгоритмы по изменению параметров вершин и их освещению. Каждая вершина в 3D-модели определяется тремя координатами — X, Y и Z. Вершины также могут быть описаны характеристиками цвета, текстурными координатами и т.п. Вершинные шейдеры, в зависимости от алгоритмов, изменяют эти данные в процессе своей работы, например вычисляя и записывая новые координаты и цвет. Входными данными вершинного процессора являются данные об одной вершине геометрической модели, которая в данный момент обрабатывается. Это могут быть координаты в пространстве, нормаль, компоненты цвета и текстурные координаты.
При помощи вершинных шейдеров вершинный процессор может выполнять такие операции, как, например, деформация и анимация объектов, имитация ткани и многое другое [1].
