Я понимаю, что этот вопрос может показаться несколько необоснованным, но , если кто-то знает что-то теоретическое / имеет практический опыт по этой теме, было бы здорово, если бы вы поделились им.
Япытаясь оптимизировать один из моих старых шейдеров, который использует много текстурных поисков.
У меня есть диффузные, нормальные, зеркальные карты для каждой из трех возможных плоскостей отображения и для некоторых гранейкоторые находятся рядом с пользователем, я также должен применить методы отображения, которые также обеспечивают поиск текстур (например, parallax occlusion mapping
).
Профилирование показало, что поиск текстур является узким местом шейдера, и я готовудалить некоторые из них.Для некоторых случаев входных параметров Я уже знаю, что часть поиска текстур была бы ненужной, и очевидное решение состоит в том, чтобы сделать что-то вроде (псевдокод) :
if (part_actually_needed) {
perform lookups;
perform other steps specific for THIS PART;
}
// All other parts.
Теперь - здесь возникает вопрос.
Я точно не помню (поэтому я заявил, что вопрос может быть необоснованным ), но в какой-то статье я недавно прочитал (к сожалению, не могу вспомнить название) было сказано что-то похожее на следующее:
Производительность изпредставленный метод зависит от того, насколько эффективно реализовано аппаратное обеспечение на основе аппаратных средств *1037*.
Я запомнил этот вид заявления еще до того, как начал собиратьсярефакторинг большого количества шейдеров и реализация этой оптимизации на основе if
, о которой я говорил.
Итак - прямо перед тем, как я начну это делать - кто-то знаеткое-что об эффективностиЧто за ветвление в шейдерах?Почему ветвление может дать серьезное снижение производительности в шейдерах?
И возможно ли, что я мог только ухудшить реальную производительность с помощью if
разветвления?
Выможет сказать - попробуй и посмотри. Да, это то, что я собираюсь сделать, если мне никто не поможет:)
Но все же, что в случае if
может быть эффективнымдля новых графических процессоров может стать кошмаром для более старых. И такого рода проблемы очень трудно предсказать, если у вас не много разных графических процессоров (это не мой случай)
Так что, если кто-то что-то знает об этом или имеет бенчмаркингопыт работы с такими шейдерами, я был бы очень признателен за вашу помощь.
Несколько оставшихся мозговых клеток, которые на самом деле работают, постоянно говорят мне, что ветвление на GPU может быть не таким эффективным, как ветвлениедля процессора (который обычно имеет чрезвычайно эффективные способы прогнозирования ветвлений и устранения ошибок кэша) просто потому, что это графический процессор (или это может быть трудно / невозможно реализовать на графическом процессоре).
К сожалению, яне уверен, что это утверждение имеет что-то общее с реальной ситуацией ...