Похоже, вы неправильно понимаете, как работают синхронизация и рабочие группы.
Внутри вычислительного шейдера атомика позволит вам синхронизироваться между рабочими группами.Тем не менее, нет гарантии для порядка выполнения рабочих групп, поэтому atomicExchange (counter, 0);не гарантируется, что произойдут другие рабочие группы.Ошибка № 1?
Размер рабочей группы 1 - это огромная трата ресурсов, особенно если вы тратите средства на синхронизацию между рабочими группами.Синхронизация внутри рабочей группы всегда будет самой быстрой, и это позволит вам фактически использовать ресурсы GPU (большинство графических процессоров организованы в модули, содержащие процессоры SIMD, которые могут обрабатывать выполнение только в одной рабочей группе за раз. Если вы используете только рабочие группы размера 131/32 или 63/64 из этих процессоров бездействуют. {Предостережение: большинство этих же процессоров могут одновременно хранить несколько рабочих групп в памяти, но выполнение происходит только на одной в любой момент}).Кроме того, внутри рабочей группы вы можете синхронизировать выполнение с барьерами, обеспечивая порядок операций.Ошибка №2?
atomicCounterIncrement, вероятно, является лучшей инструкцией, если вы добавляете только один из них.
В каком конкретном приложении ответ для экземпляров неверный?на самом деле мне кажется правильным, что каждый ввод заканчивался в выводе без гарантированного порядка (потому что вы не гарантированно выполняете рабочие группы в определенном порядке, то есть так работает параллельное выполнение).Если вы хотите, чтобы они были в порядке, рассчитайте их по идентификаторам вызовов?
Что касается того, почему renderDoc не показывает вам значение в счетчике, я не знаю, оно должно иметь значение, если оно сопоставлено правильно.