Есть ли преимущество в использовании нескольких глобальных рабочих групп, а не только одной рабочей группы для вычислений шейдеров в OpenGL? Мне нужно синхронизировать вызовы для большого изображения, поэтому глобальные рабочие группы не будут работать. Мне было интересно, почему нельзя просто использовать одну локальную рабочую группу для выполнения всей работы.OpenGL: есть ли преимущество в использовании нескольких глобальных рабочих групп для вычислительных шейдеров
ответ
Преимущество нескольких рабочих групп - большее пространство.
Рабочая группа имеет максимальный размер, а не ужасно большой. GL 4.5 требует только, чтобы GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS
составляло не менее 1024 вызовов в рабочей группе. Несколько реализаций поддерживают 1536, но не выше 1792.
Причиной ограничения является хранение.
Каждый вызов имеет свое собственное местное хранилище. Чтобы реализовать вызов barrier
, система должна иметь возможность сохранять эти данные из вычислительного блока и загружать некоторые новые данные. Если у вас было миллионы вызовов в одной рабочей группе, для этого потребовалось бы огромное количество данных. Если в текущем дизайне вам нужно всего лишь хранилище, чтобы иметь возможность запускать несколько тысяч вызовов.
Вам необходимо разработать алгоритмы для работы в рамках этого ограничения; что одна вещь, которая заставляет вычислить GPU hard.
Я буду писать только пару изображений, поэтому мне было интересно, будет ли влияние производительности, если бы я использовал только одну глобальную рабочую группу и покрывал пиксели с помощью циклов в этом единственном вызове. Увидеть, что изображения - это глобальная память, что не является очевидной проблемой. – Jens
Возможно, я должен был сформулировать эту часть вопроса лучше. – Jens
@Jens: Это совершенно другой вопрос. Он не требует синхронизации, чтобы иметь записи вызовов для * разных пикселей * изображения. –