Analizowanie wydajności pamięci

Charakterystyka wykorzystania pamięci przez aplikację jest podstawowym aspektem jej wydajności. Aby przeanalizować te charakterystyki, możesz użyć profilera systemu , sprawdzając dostępne informacje z licznika GPU.

Urządzenia Adreno

Na urządzeniach Adreno zacznij od wyróżnienia okresu odpowiadającego pojedynczej klatce GPU, zgodnie z opisem w artykule Szacowanie czasu przetwarzania klatek przez procesor i GPU. Użyj techniki opisanej na tej stronie, która polega na użyciu ścieżki % wykorzystania GPU lub podobnej ścieżki licznika dla granic czasu renderowania klatki. Ścieżki licznika używają tej samej techniki pomiaru czasu i pozwalają na dokładniejsze oszacowanie wykorzystania pamięci (w porównaniu z użyciem granic czasu renderowania klatki pochodzących z fragmentów GPU, których dane są zbierane niezależnie od danych ścieżki licznika).

Pasek wykorzystania jest zgodny z odpowiednimi licznikami poniżej.
Rysunek 1. Ścieżka wykorzystania dopasowana do odpowiednich liczników poniżej

Łączna liczba odczytów i zapisów

Po wyróżnieniu pojedynczej klatki w programie profilującym zacznij od sprawdzenia liczników Łączna liczba odczytów (bajtów/s) i Łączna liczba zapisów (bajtów/s). Te liczniki zapewniają dobry ogólny wgląd w to, ile danych przechodzi przez magistralę pamięci w ciągu jednej klatki. Staraj się zminimalizować ilość danych przesyłanych przez magistralę, ponieważ przepustowość pamięci jest dużym źródłem szybkiego zużycia baterii na urządzeniach mobilnych.

Łączne liczniki odczytu i zapisu
Rysunek 2. Liczniki łącznej liczby odczytów i zapisów

Możesz też sprawdzić liczniki Odczyt pamięci wierzchołków (bajtów/s) i Odczyt pamięci tekstur (bajtów/s) , aby określić część przepustowości używanej do danych wierzchołków i tekstur.

Liczniki odczytu pamięci wierzchołków i tekstur
Rysunek 3. Liczniki odczytu pamięci wierzchołków i tekstur

To, co uznasz za „dobre” w przypadku tych wartości, zależy od typu obciążeń występujących w aplikacji. Na przykład aplikacje 2D mogą wykorzystywać stosunkowo dużą (~2+ GB/s) przepustowość odczytu pamięci tekstur, ale przepustowość pamięci wierzchołków może być bardzo mała (~50 MB/s). Więcej informacji znajdziesz w dokumentacji dotyczącej analizowania przepustowości pamięci wierzchołków i analizowania wykorzystania przepustowości pamięci tekstur.

Wstrzymania pobierania

Sprawdź liczniki % wstrzymania pobierania wierzchołków, % wstrzymania pobierania tekstur i % wstrzymania w pamięci systemowej, ponieważ dadzą Ci one wskazówki dotyczące ogólnej wydajności pamięci aplikacji. Jeśli wartości są wyższe niż około 5%, oznacza to, że aplikacja nie układa danych w pamięci w wydajny sposób lub nie uzyskuje dostępu do danych w wydajny sposób, aby wykorzystać pamięć podręczną. Szczegółowe informacje o poprawie wykorzystania pamięci w przypadku tych typów zasobów znajdziesz w artykułach Analizowanie przepustowości pamięci wierzchołków i Analizowanie wykorzystania przepustowości pamięci tekstur.

Liczniki przestojów pamięci
Rysunek 4. Liczniki wstrzymania pamięci

Urządzenia Mali

Na urządzeniach Mali zacznij od wyróżnienia okresu odpowiadającego pojedynczej klatce GPU, zgodnie z opisem w artykule Szacowanie czasu przetwarzania klatek przez procesor i GPU. Użyj techniki opisanej na tej stronie, która polega na użyciu ścieżki % wykorzystania GPU lub podobnej ścieżki licznika dla granic czasu renderowania klatki. Ścieżki licznika używają tej samej techniki pomiaru czasu i pozwalają na dokładniejsze oszacowanie wykorzystania pamięci (w porównaniu z użyciem granic czasu renderowania klatki pochodzących z fragmentów GPU, których dane są zbierane niezależnie od danych ścieżki licznika).

Linia śledzenia wykorzystania jest zgodna z licznikami, które Cię interesują.
Rysunek 5. Ścieżka wykorzystania dopasowana do interesujących Cię liczników poniżej

Łączna liczba danych wyjściowych

Po wyróżnieniu pojedynczej klatki w profilerze systemu zacznij od sprawdzenia liczników Bajty odczytane z pamięci zewnętrznej i Bajty zapisane w pamięci zewnętrznej. Te liczniki zapewniają dobry ogólny wgląd w to, ile danych przechodzi przez magistralę pamięci w ciągu jednej klatki. Staraj się zminimalizować ilość danych przesyłanych przez magistralę, ponieważ przepustowość pamięci jest dużym źródłem zużycia baterii na urządzeniach mobilnych.

Śledzenie zewnętrznego licznika danych wyjściowych
Rysunek 6. Ścieżki liczników danych wyjściowych z pamięci zewnętrznej

Łączna liczba danych wejściowych z pamięci wewnętrznej

Dostępne są też liczniki, które dostarczają informacji o samych pamięciach podręcznych. Interesujące Cię liczniki to „Cykle wstrzymania odczytu/zapisu z pamięci wewnętrznej”. Wyższe wartości oznaczają, że trafiasz do pamięci podręcznej, ale jest zbyt wiele żądań odczytu, w wyniku czego kod shadera jest wstrzymywany w oczekiwaniu na dostęp do pamięci.

Śledzenie licznika wewnętrznego danych wejściowych
Rysunek 7. Ścieżki liczników danych wejściowych z pamięci wewnętrznej

Wstrzymania pobierania

Kolejny zestaw liczników, które możesz sprawdzić, to Cykle wstrzymania pobierania wierzchołków i Wstrzymanie pobierania tekstur , ponieważ dadzą Ci one wskazówki dotyczące ogólnej wydajności pamięci aplikacji. Jeśli widzisz wartości wyższe niż około 5%, oznacza to, że aplikacja nie układa danych w pamięci w wydajny sposób lub nie uzyskuje dostępu do danych w wydajny sposób, aby wykorzystać pamięć podręczną. Szczegółowe informacje o tym, jak poprawić wykorzystanie pamięci w przypadku tych typów zasobów, znajdziesz w artykułach Analizowanie przepustowości pamięci [wierzchołków|tekstur].

Pobieranie ścieżek licznika wstrzymania
Rysunek 8. Ścieżki liczników wstrzymania pobierania