Новичок в программировании на GPU: чему учиться? - PullRequest
2 голосов
/ 15 декабря 2008

Я рендерил определенную сцену в буфер закадрового кадра (FBO), а затем я читаю отрендеренное изображение, используя glReadPixels() для обработки на ЦП. Обработка включает в себя несколько очень простых процедур сканирования и извлечения данных.

После профилирования я понял, что большая часть того, что делает мое приложение, это тратить время на glReadPixels() - более чем на 50% времени. Поэтому естественный шаг - перенести обработку на графический процессор, чтобы данные не копировались.

Итак, мой вопрос - как лучше всего запрограммировать такую ​​вещь для GPU?
GLSL?
CUDA?
Что-нибудь еще, о чем я не знаю в настоящее время?
Основным требованием является то, что он будет иметь доступ к визуализированным закадровым буферам кадров (или данным текстуры, поскольку их можно рендерить в текстуру) и иметь возможность выводить некоторую информацию в ЦП, скажем, в порядке 1 -2Kb за кадр.

Ответы [ 3 ]

3 голосов
/ 15 декабря 2008

Вы можете найти ответы на вопросы " Введение в программирование на GPU " полезными.

-Adam

1 голос
/ 27 декабря 2008

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

В конце концов, вся ваша цель - избежать накладных расходов на чтение вашего FBO обратно из GPU в CPU с помощью glReadPixels (). Если, например, вам все равно нужно было прочитать его обратно, затем скопировать данные в буфер CUDA, а затем перенести их обратно в gpu с помощью API-интерфейсов CUDA, особого смысла не будет.

Таким образом, вам нужен пакет GPGPU, который будет напрямую принимать ваш объект OpenGL FBO без какого-либо дополнительного копирования.

Это, вероятно, исключает все, кроме GLSL.

Я не уверен на 100%, есть ли у CUDA какой-либо способ работать напрямую с буферным объектом OpenGL, но я не думаю, что у него есть эта функция.

Я уверен, что Stream SDK от ATI этого не делает. (Хотя он будет взаимодействовать с DirectX.)

Я сомневаюсь, что DirectX 11 «предварительный просмотр технологии» с вычислительными шейдерами также имеет эту функцию.

РЕДАКТИРОВАТЬ: Продолжение: похоже, что CUDA, по крайней мере, самая последняя версия, имеет некоторую поддержку взаимодействия OpenGL. Если так, то это, вероятно, ваш лучший выбор.

0 голосов
/ 21 мая 2013
...