LINUX.ORG.RU

Производительность GLSL на актуальном железе

 , , ,


0

1

В стародавние времена, когда видеокарты были VLIW любые мало-мальски сложные ветвления убивали производительность шейдеров наповал. В частности, если был цикл for(int i = 0; i < count; ++i), то гуру рекомендовали count сделать константой времени компиляции, если это возможно.

Однако сейчас миром правят CUDA, GCN и прочие GPGPU. Для них ветвления не так ужасны. Хотелось бы услышать рекомендации по оптимизации шейдеров под это новьё - чем профайлить (а то сейчас у меня всё на глаз - лагает - не лагает), какими конструкциями лучше пользоваться как можно реже, какие обходятся практически «бесплатно». В гугле не забанили, но он подсказывает, как оптимизировать для мамонтов.

И ещё один чисто практический вопрос - что лучше 3 for-а без if-ов внутри них, или 1 for с 3 ветвлениями внутри тела? Ветки достаточно крупные - обработка разных типов светильников (направленный, точечный и прожектор). count для всех случаев переменный.

★★★★

В 3d графике 0, но разве нет профилера?

RazrFalcon ★★★★★ ()

Современные GPU устроены так, что один блок управления там выдает команды сразу нескольким АЛУ (обычно 16), при этом у каждого АЛУ свой поток данных. Таким образом можно выполнять один шейдер сразу для 16 фрагментов. Проблема в том, что если для этих 16 фрагментов надо выполнить разные ветки кода, блоку управления придется выполнять обе, что на производительности скажется не лучшим образом. Поэтому бранчи лучше использовать в случаях, когда для примитива будет браться одна ветка кода.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.