Сколько современного графического конвейера использует выделенное оборудование? - PullRequest
6 голосов
/ 30 октября 2011

Другими словами, если попытаться переопределить OpenGL или DirectX (или аналог), используя GPGPU (CUDA, OpenCL), где и почему это будет медленнее, чем в стандартных реализациях на картах NVIDIA и AMD?

Я могу видеть, как вершинные / фрагментарные / геометрические / тесселяционные шейдеры могут быть сделаны хорошими и быстрыми с помощью GPGPU, но как насчет таких вещей, как создание списка фрагментов, которые будут отображаться, отсечение, выборка текстуры и так далее?

Прошу чисто академический интерес.

Ответы [ 3 ]

12 голосов
/ 30 октября 2011

Современные графические процессоры по-прежнему имеют много аппаратных средств с фиксированными функциями, которые скрыты от вычислительной APIS.Это включает в себя: этапы смешивания, растеризацию треугольника и множество очередей на кристалле.Конечно, все шейдеры хорошо отображаются в CUDA / OpenCL - ведь шейдеры и языки вычислений используют одну и ту же часть графического процессора - ядра шейдеров общего назначения.Воспринимайте эти блоки как набор очень широких процессоров SIMD (например, GTX 580 имеет 16 ядер с модулем SIMD шириной 32).

Вы получаете доступ к текстурным блокам через шейдеры, так что естьнет необходимости реализовывать это в «вычисления».В противном случае ваша производительность, скорее всего, будет плохой, поскольку вы не получите доступ к кэшам текстур, оптимизированным для пространственного размещения.

Не следует недооценивать объем работы, необходимый для растеризации.Это серьезная проблема, и если вы добавите всех графических процессоров , вы получите примерно 25% производительности растрового оборудования (см .: Высокопроизводительная растеризация программного обеспечения на графических процессорах .)Это включает в себя затраты на смешивание, которые также обычно выполняются модулями с фиксированной функцией.

Тесселяция также имеет часть с фиксированной функцией, которую трудно эффективно эмулировать, поскольку она усиливает входной сигнал до 1: 4096, иВы, конечно же, не хотите зарезервировать так много памяти заранее.

Далее вы получаете много штрафов за производительность, потому что у вас нет доступа к сжатию кадрового буфера, так как для этого снова есть выделенное оборудование, которое"скрыто" от вас, когда вы находитесь в режиме только для вычислений.Наконец, поскольку у вас нет никаких очередей на кристалле, будет трудно достичь того же коэффициента полезности, который получает «графический конвейер» (например, он может легко буферизовать вывод из вершинных шейдеров в зависимости от загрузки шейдеров, вы можетене переключайте шейдеры, которые гибко.)

1 голос
/ 07 января 2014

интересная ссылка на исходный код: http://code.google.com/p/cudaraster/

и соответствующая исследовательская работа: http://research.nvidia.com/sites/default/files/publications/laine2011hpg_paper.pdf

Некоторые исследователи в Nvidia пытались реализовать и сравнить в точности то, что было задано в этом посте:«Внедрение с открытым исходным кодом« Высокопроизводительной растеризации программного обеспечения на графических процессорах »» ...

И это открытый исходный код для «чисто академического интереса»: это ограниченный поднабор Opengl, в основном для бенчмаркингарастеризация треугольников.

0 голосов
/ 30 октября 2011

Другими словами, если попытаться переопределить OpenGL или DirectX (или аналог), используя GPGPU (CUDA, OpenCL)

Понимаете ли вы, что раньшеСуществовали CUDA и OpenCL, GPGPU создавался шейдерами, доступ к которым осуществлялся через DirectX или OpenGL?

Переопределение OpenGL поверх OpenCL или CUDA привело бы к ненужной сложности.В системе, которая поддерживает OpenCL или CUDA, драйверы OpenGL и DirectX будут совместно использовать большой объем кода с драйвером OpenCL и / или CUDA, поскольку они имеют доступ к одному и тому же оборудованию.

Обновление

На современном GPU весь конвейер работает на HW.Вот для чего весь GPU.То, что делается на процессоре, - это бухгалтерия и управление данными.Ведение бухгалтерии - это настройка всей матрицы преобразования (т.е. определение матриц преобразования и назначение их соответствующим регистрам графического процессора), загрузка геометрических данных (передача геометрии и данных изображения в память графического процессора), компиляция шейдеров и, наконец, что не менее важно ».нажатие на спусковой крючок », т. е. отправлять команды в графический процессор, которые заставляют его выполнять подготовленную программу для рисования приятных вещей.Затем графический процессор самостоятельно извлекает данные геометрии и изображения из памяти, обрабатывает их в соответствии с шейдерами и параметрами в регистрах (= униформами).

...