Jak mogę osobno profilować prędkość moich shaderów wierzchołków i fragmentów?


11

Chciałbym wiedzieć, jak mogę sprawdzić, czy mój moduł cieniujący wierzchołek lub fragment jest wąskim gardłem w moim strumieniu renderowania.

Czytałem o używaniu glQueryCounterz GL_TIMESTAMPcelem, aby uzyskać punkty kontrolne zegara między poleceniami OpenGL, ale nie rozróżniają one różnych typów shaderów.

Na przykład, jeśli jedna ramka procesora graficznego wyrenderowała 8 ms, czy mogę powiedzieć, że moduł cieniujący wierzchołek zajął 7 ms, a moduł cieniujący fragmenty zajął 1 ms?

Odpowiedzi:


12

Programy cieniujące wierzchołki i fragmenty działają jednocześnie, a nie sekwencyjnie, a procesor graficzny automatycznie równoważy obciążenia między nimi, więc nie można w sposób znaczący przypisać określonych taktowań, takich jak 7 ms dla jednego i 1 ms dla drugiego.

Możesz jednak wykonać prosty eksperyment, aby zmierzyć, gdzie leży wąskie gardło: ustaw matrycę rzutowania na wszystkie zera dla wszystkich wywołań losowania. To powoduje, że wszystkie wierzchołki generują zero dla swoich pozycji i powoduje degenerację wszystkich trójkątów; dlatego zwiera całą rasteryzację i cieniowanie fragmentów, jednocześnie utrzymując całą pracę modułu cieniującego wierzchołków (kompilator modułu cieniującego nie może niczego zoptymalizować, ponieważ nie wie, że macierz zostanie ustawiona na zero w czasie wykonywania).

Kiedy mierzysz wydajność z zerowanymi macierzami, zobaczysz ilość czasu potrzebną do uruchomienia tylko shaderów wierzchołków, bez jakiejkolwiek równoczesnej rasteryzacji lub pracy zacieniania fragmentów w GPU. Następnie możesz porównać to z czasem potrzebnym do zwykłego renderowania dla każdego przejścia. Jeśli dwa razy są podobne, przejście jest prawdopodobnie ściśle związane z wierzchołkami; jeśli renderowanie z zerową matrycą jest znacznie szybsze, prawdopodobnie jest związane z pikselami. Możliwe jest również uzyskanie wyniku pośredniego, wskazującego, że praca jest podzielona mniej więcej równomiernie między nimi.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.