В стародавние времена, когда видеокарты были VLIW любые мало-мальски сложные ветвления убивали производительность шейдеров наповал. В частности, если был цикл for(int i = 0; i < count; ++i)
, то гуру рекомендовали count
сделать константой времени компиляции, если это возможно.
Однако сейчас миром правят CUDA, GCN и прочие GPGPU. Для них ветвления не так ужасны. Хотелось бы услышать рекомендации по оптимизации шейдеров под это новьё - чем профайлить (а то сейчас у меня всё на глаз - лагает - не лагает), какими конструкциями лучше пользоваться как можно реже, какие обходятся практически «бесплатно». В гугле не забанили, но он подсказывает, как оптимизировать для мамонтов.
И ещё один чисто практический вопрос - что лучше 3 for
-а без if
-ов внутри них, или 1 for
с 3 ветвлениями внутри тела? Ветки достаточно крупные - обработка разных типов светильников (направленный, точечный и прожектор). count
для всех случаев переменный.