Какой смысл GLSL, когда есть OpenCL? - PullRequest
23 голосов
/ 11 сентября 2010

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

Ответы [ 4 ]

19 голосов
/ 11 сентября 2010

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

OpenCL - это Open Computing Language .Он не контролирует графику, а скорее вычисляет.

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

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

4 голосов
/ 12 сентября 2010

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

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

3 голосов
/ 24 февраля 2014

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

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

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

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

0 голосов
/ 14 ноября 2010

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

...