В чем разница между OpenCL и OpenGL compute shader?

Я знаю, что OpenCL обеспечивает управление архитектурой памяти GPU и, таким образом, обеспечивает лучшую оптимизацию, но, оставив это в стороне, мы можем использовать Compute Shaders для векторных операций (сложение, умножение, инверсия и т.д.)?

49
08 апр. '13 в 1:16
источник поделиться
2 ответов

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

Основные отличия в основном:

  • Он использует GLSL вместо OpenCL C. Хотя нет такого огромного разницы между этими языками программирования, вы можете использовать все связанные с графикой функции GLSL, недоступные OpenCL, например, расширенные типы текстур (например, массивы карт куба), расширенная фильтрация (например, mipmapping, хорошо Хорошо, вам, вероятно, нужно будет самостоятельно вычислить уровень mip) и мало удобных вещей, таких как матрицы 4x4 или геометрические функции.
  • Это шейдерная программа OpenGL, как и любой другой шейдер GLSL. Это означает, что доступ к данным OpenGL (например, буферам, текстурам, изображениям) является просто тривиальным, тогда как взаимодействие между OpenGL и OpenCL/CUDA может стать утомительным, с возможными усилиями ручной синхронизации с вашей стороны. Точно так же интеграция его в существующий рабочий процесс OpenGL также тривиальна, в то время как настройка OpenCL - это самостоятельная книга, не говоря уже о ее интеграции в существующий графический конвейер.

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

Вычислить шейдеры должны быть в состоянии сделать почти что достижимое с помощью OpenCL с такой же гибкостью и контролем над аппаратными ресурсами и с тем же программным подходом. Поэтому, если у вас есть хороший алгоритм, соответствующий GPU (который будет хорошо работать с CUDA или OpenCL) для задачи, которую вы хотите сделать, тогда да, вы также можете сделать это с помощью вычислительных шейдеров. Но это не будет иметь смысла использовать OpenGL (который по-прежнему и, вероятно, всегда будет основой для компьютерной графики в реальном времени, в первую очередь) только из-за вычислительных шейдеров. Для этого вы можете просто использовать OpenCL или CUDA. Реальная сила вычислительных шейдеров вступает в игру при смешивании графики и вычислительных возможностей.

45
08 апр. '13 в 11:54
источник

Посмотрите здесь для другой перспективы. Подведение итогов:

Да, OpenCL уже существует, но он нацелен на тяжеловесные приложения (думаю, CFD, FEM и т.д.), и он гораздо более универсален, чем OpenGL (думаю, помимо графических процессоров... Архитектура Intel Xeon Phi поддерживает > 50 x 86 ядер).

Кроме того, совместное использование буферов между OpenGL/CUDA и OpenCL не является забавным.

2
08 апр. '13 в 1:24
источник

Посмотрите другие вопросы по меткам или Задайте вопрос