Преимущество взаимодействия OpenCL с OpenGL - PullRequest
5 голосов
/ 29 марта 2012

Когда мы можем добиться хорошей скорости с OpenGL, так как он использует текстурную память и много встроенных графических функций (смешивание, mip-карта и т. Д.).

Зачем нам нужна совместимость OpenCL (медленный из-за буферов openCL) с OpenGLпросто потому, что мы можем совмещать рендеринг с вычислениями или есть какие-то хорошие преимущества, такие как производительность.

Я просто хотел узнать главное преимущество этого и есть ли опубликованные документы, которые показывают, что они получили увеличение производительности при использованииФункциональная совместимость OpenGL с OpenCL или любое доказательство, которое показало увеличение производительности с точки зрения скорости и качества.

1 Ответ

12 голосов
/ 29 марта 2012

OpenGL - это растеризованная графика в реальном времени. Поскольку он ограничен по объему, он может быть более оптимизирован для этой задачи, и большая часть оборудования также предназначена для этого.

OpenCL - это общие вычисления. Складные белки. Прогноз погоды. Высокочастотная торговля. Имитирующие нейроны . Машинное обучение, SETI, обработка сигналов, майнинг BitCoin и т. Д.

Но между ними много пересекающихся областей.

Во-первых, многие из этих вещей имеют визуальные компоненты. Ученые могут захотеть иметь возможность видеть / взаимодействовать со свернутым белком, например, без необходимости копировать все эти данные из ОЗУ графического процессора в память процессора, обрабатывать их в визуальном формате и затем отправлять обратно в графический процессор.

Также игры могут использовать OpenCL. Возьми что-нибудь вроде Майнкрафта. Если вы разрабатываете Minecraft с использованием современного OpenGL (а не OpenGL 1.3, который на самом деле использует Minecraft), вам нужно просто загрузить необработанные данные карты в графический процессор. Используйте один проход с шейдером геометрии / тесселяции, чтобы превратить эти данные в кубы и другие фигуры, а затем использовать обратную связь преобразования для захвата результата (вам нужно только запустить его один раз).

Но в Minecraft также есть множество правил обновления карты. Рассчитать освещение. Расти деревья. Сделать поток воды. Взрывать тротил и тд. Это то, что вы бы не смогли сделать с шейдерами (или, может быть, не за один проход). Вы можете сделать это на процессоре (что делает Minecraft), но если вы видели эти видео людей, запускающих тысячи тротилов, вы сразу же видите это отставание. И текущая вода может вызвать задержку для всех на большом сервере. Вы можете сделать это с помощью OpenCL, чем отправлять его в OpenGL, но если они соединяются вместе, это более эффективно.

Вы можете использовать OpenCL, чтобы подделать новые методы OpenGL. Например, если у вас был OpenCL, но у вас не было шейдеров Geometry / Tessellation, вы могли бы сделать это в OpenCL (конечно, в настоящее время в действительности это не так полезно, так как большинство систем с устаревшими реализациями OpenGL также не будут иметь поддержки OpenCL). Есть ли такие вещи, как тесселяционные шейдеры, которые были бы полезны, но просто не существуют?

Существует множество визуальных эффектов, которые вы не можете выполнить в конвейере OpenGL (по крайней мере, неэффективно). Одним из примеров является трассировка лучей в реальном времени . Другой - моделирование частиц . Процедурная / фрактальная генерация рельефа .

Есть и другие вещи, которые могут помочь с играми / графикой в ​​реальном времени. Например, Физические симуляции можно перенести с процессора. Также было бы здорово, если бы сам конвейер рендеринга / сценограф мог быть перемещен в графический процессор . Это значительно уменьшит количество вызовов между процессором и графическим процессором и сделает его намного более параллельным. Есть много других вещей, таких как лучевое вещание, искусственный интеллект, поиск путей и так далее. В основном все, что вы рассчитываете, будет видно только визуально.

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

...