Я снимаю видеокадры. Каждый кадр передается в ядро как Image2D. У меня есть около пяти простых алгоритмов обработки изображений (размытие, резкость и т. Д.), Которые пользователь может выбрать (также возможно сочетание разных). Я вижу три возможности здесь:Как обрабатывать переменное число алгоритмов в ядре?
- Одно ядро: Во время выполнения построить строку ядра с выбранных алгоритмов и компиляции (и взять на себя нагрузку от одного времени компиляции задержки)
- Одно ядро: Обрабатывать выбранные алгоритмы с флагами (хотя я понимаю, что условные ветви нежелательны)
- Многие ядра (по одному на алгоритм): Кажется, вопрос, что
Image2D
может быть либоread_only
илиwrite_only
, и я должен был бы repetively скопировать изображения с и на GPU, поскольку один выходной образ ядра является i nput образ следующего ядра.
Есть ли предлагаемое эмпирическое правило, каким образом следовать?
Относительно условного исполнения: вид ветвления, о котором вы говорите, вероятно, не так уж плох. Каждый рабочий элемент по-прежнему идет по тому же пути для выполнения данного ядра. Это ситуации, когда разные рабочие элементы разветвляются в разных направлениях, что действительно убьет вашу производительность. – James
Спасибо Джеймсу, я его оценю. – rdoubleui