Rozumiem, że to pytanie może wydawać się nieco nieuzasadnione, ale , jeśli ktoś wie coś teoretycznego/ma praktyczne doświadczenie na ten temat, byłoby wspaniale, gdybyś je udostępnił.Efektywność rozgałęzienia w shaderach
Próbuję zoptymalizować jeden z moich starych shaderów, który korzysta z wielu wyszukiwań tekstur.
Mam rozproszonych, normalny, lustrzane Maps dla każdego z trzech możliwych płaszczyznach mapowania i dla niektórych twarzach znajdujących się w pobliżu użytkownika Mam też zastosować techniki mapowania, które również przynieść dużo tekstur wyszukiwań (jak parallax occlusion mapping
).
Profilowanie pokazało, że szukanie tekstury jest wąskim gardłem shadera i jestem gotów je usunąć. Dla niektóre przypadki wejścia Parametry już wiem, że część wyszukiwań tekstur byłoby zbędne i oczywiste rozwiązaniem jest zrobić coś takiego (Pseudokod):
if (part_actually_needed) {
perform lookups;
perform other steps specific for THIS PART;
}
// All other parts.
Teraz - tu chodzi pytanie.
nie pamiętam dokładnie (dlatego stwierdziłem pytanie może być nieuziemiona), ale w jakiś papier Niedawno przeczytałem (niestety nie pamiętam nazwy) coś podobnego do poniższego stwierdzono :
występ prezentowanego techniki zależy od tego, jak wydajny sprzętowe WARUNKOWA rozgałęzienia jest zaimplementowany.
pamiętałem tego rodzaju oświadczenia tuż przed miałem rozpocząć refactoring dużą liczbę shaderów i wdrożyć if
opartych optymalizacji mi chodzi.
Tak - zanim zacznę to robić - czy ktoś wie coś o wydajności rozgałęzień w shaderów? Dlaczego rozgałęzienia mogą powodować surowe kary za wydajność w shaderów?
Czy jest możliwe, że mogłem tylko pogorszyć rzeczywistą wydajność dzięki rozgałęzieniu opartemu na if
?
Można powiedzieć - spróbować i zobaczyć. Tak, właśnie to mam zamiar zrobić, jeśli nikt mi tu nie pomoże.
Ale nadal, co w przypadku if
może być skuteczne dla nowych GPU, może być koszmarem dla nieco starszych.I tego rodzaju kwestii jest bardzo trudne do przewidzenia, chyba że masz wiele różnych GPU (to nie moja sprawa)
Tak więc, jeśli ktoś wie coś o tym czy ma doświadczenie benchmarkingu dla tego rodzaju cieniowania, ja byłbym wdzięczny za twoją pomoc.
nieliczne pozostałe komórki mózgowe, które są rzeczywiście działa powtarzają mi, że rozgałęzienia na GPU może być daleko nie tak skuteczne, jak rozgałęzienia dla procesora (co zwykle ma niezwykle skutecznych sposobów przewidywania branży oraz wyeliminowanie sytuacji niebezpiecznych cache) tylko dlatego, że jest to procesor graficzny (lub taki, który może być trudny do wdrożenia na GPU).
Niestety nie jestem pewien, czy to stwierdzenie nie ma nic wspólnego z rzeczywistą sytuacją ...
Wybacz; ale co C++ ma wspólnego z shaderów? – zneak
Mimo to możesz chcieć nadać swoim tematom nieco bardziej opisowy tytuł. Już widzę 4 tematy, które utworzyłeś już pod tym samym tytułem, ale inne pytanie. – Bart