Новичок в программировании на GPU: чему учиться?

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

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

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

15.12.2008 19:18:34
3 ОТВЕТА

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

-Адам

3
23.05.2017 12:13:33

В других вопросах есть несколько указаний для начала работы с программированием на 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. Если так, то это, вероятно, ваш лучший выбор.

1
30.12.2008 00:36:17

Я недавно нашел этот современный GPU

0
21.05.2013 19:54:32