Какое влияние на производительность оказывает Atomic Operations в вычислительном шейдере?

У меня есть вычислительный шейдер, который изменяет тексели в текстуре 256×256.

Вычислительный шейдер имеет 256x256x256 вызовов, где компонент x и y вызова напрямую отображается на координаты u и v текселя. Таким образом, каждый тексель может быть записан до 256 раз.

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

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

Так ли это, и если да, то насколько это повлияет на производительность? Стоит отметить, что вызов z может измениться и может быть намного больше 256

4

Решение

Задача ещё не решена.

Другие решения