Оптимизация шейдера: эквивалентен ли тернарный оператор ветвлению?

Когда они придумывают язык, который работает быстрее в меньшей памяти и более широко поддерживается.

27
задан sharoz 26 October 2017 в 13:09
поделиться

1 ответ

Тернарный оператор является просто синтаксическим сахаром для оператора if. Они одинаковы.

Если бы вы могли написать больше внутри своего оператора if, возможно, здесь можно было бы провести некоторую оптимизацию, но с таким небольшим количеством внутри любой ветви, оптимизировать нечего.

Часто ветвление не используется по умолчанию.

В вашем случае троичный оператор (или оператор if), вероятно, сначала оценивает обе стороны условия, а затем отбрасывает ветвь, которая не была удовлетворена условием.

Чтобы использовать ветвление, вам нужно установить флаг компилятора ветвления в своем коде шейдера, чтобы сгенерировать сборку, которая инструктирует GPU фактически пытаться ветвиться (если GPU поддерживает ветвление). В этом случае GPU будет пытаться выполнить ветвление, только если предиктор ветвлений скажет, что какое-то заранее определенное количество ядер займет одну из ветвей.

Ваш пробег может варьироваться от одного компилятора и графического процессора к другому.

8
ответ дан 28 November 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: