Подтвердить что ты не робот

В чем смысл GLSL, когда есть OpenCL?

Рассмотрите эту форму в следующем виде: Поскольку OpenCL может быть общим стандартом для серьезных графических процессоров в будущем (среди других программ программирования), почему бы и нет, когда программирование для OpenGL - в будущем - использовать все GPU-операции в OpenCL? Таким образом, вы получаете преимущества GLSL, без его программных ограничений.

4b9b3361

Ответ 1

GLSL OpenGL Шейдинг Язык. Первоначально он предназначен для управления графическим конвейером.

OpenCL, с другой стороны, это Открыть Вычислить Язык. Он не контролирует графику, а скорее вычисляет.

Две технологии нацелены на различные возможности и функциональные возможности.

При этом, двигаясь вперед, у них может быть очень мало оснований использовать GLSL для целей вычислений. Однако на сегодняшний день больше поставщиков полностью поддерживают GLSL, чем OpenCL, поэтому он по-прежнему полезен для целей вычислений, хотя он ограничен, поскольку это не его основная цель, по крайней мере прямо сейчас.

Ответ 2

В будущем OpenCL сможет заменить GLSL. Тем временем все еще есть проблемы с OpenGL-интерфейсом, по крайней мере, с самыми важными (NVidia/ATI) реализациями.

OpenCL не будет полностью заменять OpenGL. OpenGL делает намного больше, когда дело доходит до растровой графики. Единственными примитивами растровой графики в OpenCL являются текстуры/изображения, и он вообще не может отображать графику.

Ответ 3

GLSL - это "язык затенения" . Он используется для 3D-рендеринга и имеет специальные типы данных, особенно полезные для этой цели (например, длины-4 вектора и матрицы ранга-4x4). Вершинные и фрагментарные шейдеры располагаются в четко определенном месте внутри конвейера рендеринга, и они автоматически запускаются по данным, проходящим через этот конвейер. Шейдеры также имеют прямой доступ к трансформационным и проекционным матрицам 3D-конвейера.

OpenCL - это "язык вычисления" . Он специально не предназначен для задач вычисления, которые мы видим в 3D-рендеринге, но скорее является подмножеством C. OpenCL имеет типы данных, аналогичные векторам и матрицам в GLSL (float4, float16), но они менее удобны в использовании. Кроме того, у вас нет графического контекста (который может быть преимуществом или недостатком), а ядро ​​OpenCL не находится внутри конвейера 3D-рендеринга.

Если вы хотите, чтобы вычислительные модули были подключены к конвейеру 3D-рендеринга и запускались конвейером рендеринга, используйте GLSL. Если вы хотите, чтобы общие вычисления на GPU за пределами 3D-рендеринга, используйте OpenCL.

Это не означает, что OpenCL не может использоваться для рендеринга 3D-графики. Оно может. Фактически, вы можете реализовать свой собственный конвейер исключительно в OpenCL, а затем скопировать чертеж в фреймбуфер. Но если вы просто хотите нарисовать какую-то трехмерную графику, дублирование всей работы инженеров SGI, Nvidia, Intel и AMD, вероятно, не стоит хлопот. Тогда проще просто использовать GLSL и подключить шейдер к готовому к использованию и полностью работающему конвейеру OpenGL. Просто подумайте, что это было серьезное обязательство написать Mesa, реализацию OpenGL с открытым исходным кодом.

Ответ 4

@dietr: дай мне Эко тебя здесь! совместимость CL/GL может значительно повредить общую производительность, особенно при обработке большого количества буферов объектов (например, > 100). Смена контекстных издержек и отсутствие поддержки структур буфера или указателей на буферы просто убьют мои приложения таким образом, что я серьезно рассматриваю использование геометрического шейдера для замены моего кода opencl. И не обманывайте себя, полная замена всего opengl opencl потребует целого процесса перекодировки, который будет не только реальным долгом, но и не таким выгодным. Кроме того, как говорят люди, здесь opengl делает гораздо больше, чем просто расчет трубопровода. Я бы сказал, что если вы собираетесь использовать CL/GL iterop, попробуйте переписать свой код в шейдере/геометрии шейдера, если сможете.