szacowanie czasu przetwarzania ramek przez procesor i procesor graficzny;

Szacowanie czasu przetwarzania klatek przez procesor i procesor graficzny (czasu renderowania klatek) jest niezbędne do zrozumienia wydajności aplikacji i znalezienia wąskich gardeł. Gdy profilujesz aplikację za pomocą AGI, Profiler systemowy udostępnia dane śledzenia, których możesz użyć do oszacowania czasu trwania klatek.

Czasy pracy procesora

W AGI możesz wyświetlić całkowity i aktywny czas klatek procesora na ścieżce procesora w profilu systemu.

Łączny czas pracy procesora

Aby zmierzyć łączny czas pracy procesora, wybierz zakres czasu, który obejmuje czas między kolejnymi zdarzeniami przesyłania klatek. Zdarzenia przesyłania klatek to eglSwapBuffers (w przypadku OpenGL) i vkQueuePresentKHR (w przypadku Vulkan).

Zrzut ekranu ze zdarzeniami eglSwapBuffer.
Rysunek 1. Czas między dwoma zdarzeniami eglSwapBuffer.


Zrzut ekranu zdarzenia vkQueuePresentKHR.
Rysunek 2. Czas między dwoma zdarzeniami vkQueuePresentKHR.

Ten pomiar jest szacunkową wartością całkowitego czasu procesora,ale nie musi odzwierciedlać aktywnego czasu procesora. Na przykład w aplikacjach, w których działanie jest ograniczone przez GPU, procesor może czekać, aż GPU zakończy pracę, zanim prześle nową klatkę. Dzieje się tak często, gdy zdarzenie dequeueBuffer, eglSwapBuffer (w przypadku OpenGL) lub vkQueuePresent (w przypadku Vulkan) zajmuje dużą część czasu procesora. Czas oczekiwania jest uwzględniony w łącznym czasie pracy procesora, ale nie w aktywnym czasie pracy procesora.

Zrzut ekranu przedstawiający dużą ilość czasu bezczynności podczas zdarzeń dequeueBuffer i eglSwapBuffer.
Rysunek 3. Duża ilość czasu bezczynności procesora podczas zdarzeń dequeueBuffereglSwapBuffer.

Aktywny czas pracy procesora

Aktywny czas procesora określa, kiedy procesor wykonuje kod aplikacji, nie będąc w stanie bezczynności.

Aby zmierzyć aktywny czas procesora, wyświetl wycinki Uruchomione tuż nad zdarzeniami procesora. Policz wszystkie części śladu między dwoma zdarzeniami przesłania klatki, które są w stanie Uruchomiono. Pamiętaj, aby uwzględnić działające wątki.

Zrzut ekranu przedstawiający 2 okresy czasu procesora, które można wykorzystać do pomiaru aktywnego czasu procesora.
Rysunek 5. Dwa okresy czasu procesora, które można wykorzystać do pomiaru aktywnego czasu procesora.


Zrzut ekranu aplikacji wielowątkowej, która ma inne działające wątki, podczas gdy wątek główny jest bezczynny.
Rysunek 6. Aplikacja wielowątkowa, która ma inne wątki robocze, gdy wątek główny jest nieaktywny.

Innym sposobem pomiaru aktywnego czasu procesora jest wyświetlenie wycinków aplikacji na ścieżkach procesora. Te wycinki wskazują, kiedy procesor jest uruchomiony, i odpowiadają wycinkom Uruchomiony.

Zrzut ekranu przedstawiający stan działania przypiętego wątku, który pasuje do ścieżki procesora.
Rysunek 7. Stan wątku przypiętego jest zgodny ze ścieżką procesora.

Aby ułatwić identyfikację wycinków aplikacji, możesz dodać do niej znaczniki ATrace. Będą one wyświetlane na ścieżce procesora w profilerze systemu.

Zrzut ekranu przedstawiający wycinki ATrace na ścieżce procesora.
Rysunek 8. Wyświetlanie wycinków ATrace na ścieżce procesora.

Szacowanie czasu renderowania klatek przez GPU

Aby oszacować czasy klatek GPU, możesz użyć wycinków GPU lub liczników GPU w Profilerze systemu. W przypadku korzystania z fragmentów GPU szacowanie jest dokładniejsze.

Partycje GPU

Jeśli Profiler systemowy ma dostępne informacje o wycinku GPU, możesz uzyskać bardzo dokładne informacje o czasie renderowania klatki przez GPU, mierząc łączny czas, jaki aplikacja poświęca na wykonywanie zadań związanych z jedną klatką.

Urządzenia Mali

Na urządzeniach Mali wycinki GPU mają ścieżki fragmentu, niefragmentu i czasami dodatkową ścieżkę niefragmentu. W przypadku mniej złożonych klatek praca związana z fragmentami i niezwiązanymi z fragmentami jest wykonywana sekwencyjnie, więc odróżnienie pracy jednej klatki od pracy innej klatki można przeprowadzić, szukając przerw między aktywną pracą procesora graficznego.

Jeśli znasz zadania przesyłane do procesora graficznego, możesz zidentyfikować wzorzec przesłanych przebiegów renderowania, aby uzyskać informacje o tym, kiedy zaczyna się i kończy klatka.

Zrzut ekranu przedstawiający kilka klatek wykonywanych po kolei.
Rysunek 9. Wiele klatek wykonywanych po kolei.
Zrzut ekranu, na którym AGI powiększa pracę w pojedynczej klatce.
Rysunek 10. Powiększenie pracy nad pojedynczą klatką.

W przypadku aplikacji, które mają bardziej równoległy przepływ pracy GPU, możesz uzyskać czasy renderowania klatek przez GPU, wyszukując wszystkie klatki, które mają ten sam submissionID w panelu Selection dla każdego wycinka.

W przypadku aplikacji opartych na Vulkanie do tworzenia klatki można używać wielu przesłań. Śledź identyfikatory zgłoszeń za pomocą ścieżki Zdarzenia Vulkan, która zawiera wycinek dla każdego zgłoszenia. Wybranie wycinka przesyłania spowoduje wyróżnienie wszystkich wycinków aktywności GPU, które odpowiadają temu przesyłaniu.

Zrzut ekranu z równoległym zadaniem GPU, w którym praca nad jedną klatką może nakładać się na pracę nad inną.
Rysunek 11. Równoległe zadanie GPU, w którym praca nad jedną klatką może nakładać się na pracę nad inną klatką.


Zrzut ekranu z kilkoma zdarzeniami Vulkan wybranymi dla klatki.
Rysunek 12. W przypadku klatki wybrano kilka zdarzeń Vulkan.

Urządzenia Adreno

Na urządzeniach z procesorem Adreno wycinki GPU pojawiają się na ścieżce Kolejka GPU 0 i są zawsze reprezentowane sekwencyjnie. Możesz więc sprawdzić wszystkie wycinki reprezentujące przebiegi renderowania klatki i użyć ich do pomiaru czasu klatki GPU.

Zrzut ekranu przedstawiający kilka klatek wykonywanych w sekwencji.
Rysunek 13. Wiele klatek wykonywanych po kolei.
Zrzut ekranu, na którym widać powiększony interfejs AGI z wieloma przebiegami renderowania.
Rysunek 14. Powiększona klatka z wieloma przebiegami renderowania.

Podobnie jak w przypadku urządzenia Mali opisanego wcześniej: jeśli aplikacja korzysta z Vulkana, ścieżka Zdarzenia Vulkan zawiera informacje o pracy przesyłanej w celu wykonania klatki. Aby wyróżnić przebiegi renderowania, kliknij wycinki Vulkan Events powiązane z klatką.

Zrzut ekranu aplikacji opartej na platformie Vulkan, na którym wybrane są zdarzenia Vulkan dotyczące klatki.
Rysunek 15. Aplikacja oparta na platformie Vulkan, w której wybrano zdarzenia Vulkan dla klatki.

W niektórych przypadkach granice klatek GPU są trudniejsze do odróżnienia, ponieważ aplikacja jest w dużym stopniu zależna od GPU. W takich przypadkach, jeśli znasz zadania przesyłane do procesora graficznego, możesz zidentyfikować wzorzec wykonywania przebiegów renderowania i na podstawie tych informacji określić granice klatek.

Zrzut ekranu aplikacji, która w dużym stopniu wykorzystuje GPU, z wzorcem przekazywania renderowania, który pomaga określić granice klatek.
Rysunek 16. Aplikacja w dużym stopniu zależna od GPU z wzorcem przekazywania renderowania, który pomaga określać granice klatek.

Liczniki GPU

Jeśli w śladzie nie ma informacji o wycinku GPU, możesz oszacować czas renderowania klatki GPU za pomocą ścieżek licznika GPU.

Urządzenia Mali

Na urządzeniach z układem Mali możesz użyć ścieżki Wykorzystanie GPU, aby oszacować czas renderowania klatki GPU w przypadku aplikacji, która nie wykorzystuje w dużym stopniu układu GPU. Gdy aplikacje nie wymagają dużej mocy GPU, występują w nich regularne okresy wysokiej i niskiej aktywności GPU zamiast ciągłej wysokiej aktywności. Aby oszacować czasy klatek GPU za pomocą ścieżki wykorzystania GPU, zmierz czas trwania okresów dużej aktywności na tej ścieżce.

Zrzut ekranu przedstawiający wykorzystanie procesora graficznego i kolejkę procesora graficznego na urządzeniu Mali.
Rysunek 17. Ścieżki wykorzystania GPU i kolejki GPU na urządzeniu Mali.

Jeśli aplikacja intensywnie korzysta z GPU, jego wykorzystanie może być stale bardzo wysokie. W takim przypadku możesz użyć ścieżek wykorzystanie kolejki fragmentówwykorzystanie kolejki niefragmentowej, aby monitorować aktywność GPU i szacować czasy klatek GPU. Szukając wzorców w śladach fragmentówniefragmentów, możesz uzyskać przybliżone oszacowanie granic ramki i użyć go do pomiaru czasu renderowania klatki GPU.

Zrzut ekranu przedstawiający ścieżki fragmentów i niefragmentów.
Rysunek 18. Fragmentyutwory niebędące fragmentami.

Urządzenia Adreno

Na urządzeniach Adreno, jeśli aplikacja nie obciąża GPU, możesz oszacować czas renderowania klatki przez GPU w taki sam sposób jak w przypadku urządzeń Mali w poprzedniej sekcji.

Zrzut ekranu przedstawiający procent wykorzystania procesora graficznego i ścieżki kolejki procesora graficznego na urządzeniu Adreno.
Rysunek 19. Odsetek wykorzystania GPU i kolejka GPU na urządzeniu Adreno.

Jeśli aplikacja intensywnie korzysta z GPU, a odsetek wykorzystania GPU jest stale wysoki, możesz użyć ścieżek Instrukcje wierzchołków / sekundęInstrukcje fragmentów / sekundę, aby oszacować czasy klatek GPU. Szukając wzorców w poziomach aktywności tych ścieżek, możesz zgrubnie oszacować, gdzie znajdują się granice klatki, i użyć tych informacji do pomiaru czasu renderowania klatki GPU.

Zrzut ekranu z instrukcjami dotyczącymi Vertexa – druga ścieżka.
Rysunek 20. Ścieżka Vertex Instructions / Second.

Inne ścieżki mogą zawierać podobne informacje:

  • Wierzchołki cieniowane / sekunda
  • Fragmenty zacienione / sekunda
  • % wierzchołków cieniowania czasu
  • % fragmentów cieniowania czasu