2016-09-08 7 views
3

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

ответ

2

Преимущество нескольких рабочих групп - большее пространство.

Рабочая группа имеет максимальный размер, а не ужасно большой. GL 4.5 требует только, чтобы GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS составляло не менее 1024 вызовов в рабочей группе. Несколько реализаций поддерживают 1536, но не выше 1792.

Причиной ограничения является хранение.

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

Вам необходимо разработать алгоритмы для работы в рамках этого ограничения; что одна вещь, которая заставляет вычислить GPU hard.

+0

Я буду писать только пару изображений, поэтому мне было интересно, будет ли влияние производительности, если бы я использовал только одну глобальную рабочую группу и покрывал пиксели с помощью циклов в этом единственном вызове. Увидеть, что изображения - это глобальная память, что не является очевидной проблемой. – Jens

+0

Возможно, я должен был сформулировать эту часть вопроса лучше. – Jens

+0

@Jens: Это совершенно другой вопрос. Он не требует синхронизации, чтобы иметь записи вызовов для * разных пикселей * изображения. –