В чем разница между OpenCL и вычислительным шейдером OpenGL?



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

601   2  

2 ответов:

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

Основные различия заключаются в следующем:

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

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

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

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

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

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

Comments

    Ничего не найдено.