Вычислить шейдер против CUDA / OpenCL

8

Так что я только недавно узнал о Compute Shader, и это похоже на то, что я понял ту же идею, что и параллельное программирование, которое вы бы делали с CUDA или OpenCL, но в конвейере шейдеров.

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

FrickeFresh
источник
2
Почему вы хотите использовать GPGPU для рисования миллионов кубов в первую очередь?
Дераг
3
Вычислительные шейдеры используются для вычисления рабочих нагрузок, а не для рендеринга. Практическое правило заключается в том, что если вам нужна растеризация (то есть обработка триангулированной геометрии в пиксели), вы должны использовать конвейер рендеринга; если вам просто нужно обработать большой кусок данных, вы должны использовать вычисления. Меня также интересуют аргументы за и против вычислительных шейдеров и CUDA / OpenCL (с взаимодействием графического API). Одна из них, о которой я слышал, - это создание очереди вычислительных рабочих нагрузок с помощью API, специфичного для вычислений, но мне хотелось бы узнать больше (например, как асинхронные вычисления входят в картину).
IneQuation
@Derag Просто пытаюсь накормить мой кубический фетиш как можно быстрее
FrickeFresh
Если вы хотите нарисовать миллион кубов, используйте лучевой марш :)
russ

Ответы:

7

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

Однако он позволяет потреблять и производить ресурсы памяти, которые также используются вызовами отрисовки относительно эффективным способом. OpenCL делает это довольно сложно (см., Например, https://software.intel.com/en-us/articles/opencl-and-opengl-interoperability-tutorial ). Это позволяет вам эффективно интегрировать вычислительные проходы в вашем рендерере, но это не интегрировано в конвейер рендеринга

GroverManheim
источник