Analizowanie wykorzystania przepustowości pamięci tekstur
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Przepustowość pamięci danych tekstur może być potencjalnym wąskim gardłem wydajności procesora graficznego aplikacji. W profilu systemu AGI znajdują się liczniki, które mogą pomóc w diagnozowaniu problemów z przepustowością pamięci tekstur.
Liczniki Qualcomm Adreno
Na urządzeniach z procesorami graficznymi Qualcomm Adreno do ważnych liczników należą:
Kontroferta
Opis
Przepustowość odczytu pamięci tekstur (bajty/sekundę)
Przepustowość danych tekstur odczytywanych z pamięci zewnętrznej.
% Texture L1 Miss
Brak w pamięci podręcznej L1 podczas pobierania tekstur.
% tekstur na poziomie innym niż podstawowy
Odsetek pobrań tekstur, które są mapami mip.
% Filtrowanie anizotropowe
Odsetek teksteli, które są filtrowane anizotropowo.
Liczniki ARM Mali
Na urządzeniach z procesorami GPU ARM Mali do ważnych liczników należą:
Kontroferta
Opis
Odczytywanie tekstur z pamięci zewnętrznej
Odczyty danych z pamięci zewnętrznej przez jednostkę tekstur, uśrednione w rdzeniach cieniowania.
Odczyt tekstury z pamięci podręcznej L2
Odczyty danych z pamięci podręcznej L2 przez jednostkę tekstur, uśrednione w rdzeniach cieniowania.
[Więcej]
Aby obliczyć ogólną przepustowość na podstawie średniej liczby odczytów, wartość licznika jest mnożona przez szerokość magistrali (zwykle 16 bajtów) i łączną liczbę rdzeni cieniowania.
Analiza kontr
Aby zmierzyć zachowanie tych liczników, zmierz średnią i szczytową przepustowość w ciągu jednej klatki GPU, a następnie wyznacz ciągły blok wykorzystania GPU.
Rysunek 1. Przepustowość odczytu pamięci tekstur dla pojedynczej klatki, ze średnią wartością 565 MB/s i wartością szczytową 2,30 GB/s
Zalecamy średnią przepustowość odczytu pamięci tekstur nie większą niż 1 GB/s, a maksymalną przepustowość nie większą niż 3 GB/s. Odsetek nieudanych odczytów z pamięci podręcznej L1 tekstur nie powinien przekraczać 10%. Wyższe wartości przepustowości lub pamięci podręcznej poziomu 1 mogą wskazywać na poważniejsze problemy z teksturami, w tym:
Tekstury są za duże: duże tekstury zwiększają rozmiar pakietu, są droższe i mogą zmniejszać wydajność pamięci podręcznej.
Tekstury są nieskompresowane: wszystkie telefony z Androidem obsługują pewne typy kompresji tekstur, np. ETC1 lub ASTC. Tekstury powinny być skompresowane, aby zmniejszyć rozmiar pakietu i przepustowość tekstur.
Inne: należy wziąć pod uwagę różne inne kwestie związane z teksturami, w tym tekstury o rozmiarach będących potęgą liczby 2, mapowanie mip, filtrowanie anizotropowe i inne. Niektóre z nich można zaobserwować w profilu systemu (jak opisano poniżej), a inne mogą wymagać dokładniejszego zbadania.
W przypadku gier trójwymiarowych z dowolną kamerą komponenty tekstur powinny korzystać z mapowania mip, aby obiekty znajdujące się w dużej odległości od kamery miały mniejszą przepustowość pamięci, lepszą wydajność pamięci podręcznej tekstur i lepszą jakość obrazu. W przypadku urządzeń korzystających z procesorów graficznych Qualcomm Adreno liczniki % Non-Base Level Textures o średniej wartości poniżej 10% mogą wskazywać na nieodpowiednie mapowanie mip.
Rysunek 2. Tekstury na poziomie innym niż podstawowy dla pojedynczej klatki, ze średnią wartością 9,2%
Kolejnym aspektem jest filtrowanie anizotropowe, które jest opisywane przez licznik % filtrowania anizotropowego w przypadku procesorów graficznych Qualcomm Adreno. Określa on odsetek teksteli, które są filtrowane anizotropowo. Chociaż może to poprawić jakość obrazu w niektórych grach, może być też bardzo kosztowne, dlatego należy rozważyć, czy warto ponosić koszty związane z wydajnością procesora graficznego.
Rysunek 3. Odsetek filtrowania anizotropowego dla pojedynczej klatki, ze średnią wartością 10,8%
Najlepszym sposobem na zdiagnozowanie bardziej szczegółowych problemów jest wykonanie śledzenia profilu klatki w celu przeanalizowania zasobów tekstur.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-07-27 UTC."],[],[],null,["# Analyze texture memory bandwidth usage\n\nThe memory bandwidth of texture data can be a potential bottleneck for your\napp's GPU performance. There are some counters in an **AGI System Profile** that can help diagnose texture memory bandwidth issues.\n\nQualcomm Adreno counters\n------------------------\n\nOn devices with Qualcomm Adreno GPUs, some notable counters include:\n\n| Counter | Description |\n|---------------------------------------|------------------------------------------------------|\n| Texture Memory Read BW (Bytes/Second) | Bandwidth of texture data read from external memory. |\n| % Texture L1 Miss | L1 cache miss from fetching textures. |\n| % Non-Base Level Textures | Percentage of texture fetches that are mipmaps. |\n| % Anisotropic Filtered | Percentage of texels that are anisotropic filtered. |\n\nARM Mali counters\n-----------------\n\nOn devices with ARM Mali GPUs, some notable counters include:\n\n| Counter | Description |\n|-----------------------------------------|-------------------------------------------------------------------------------------------|\n| Texture read beats from external memory | Data beats read from external memory by the texture unit, averaged over the shader cores. |\n| Texture read beats from L2 cache | Data beats read from the L2 cache by the texture unit, averaged over the shader cores. |\n| \\[More\\] | |\n\nTo calculate the overall bandwidth from average read beats, the counter value is multiplied by the bus width (typically 16 bytes) and by the total number of shader cores.\n\nCounter analysis\n----------------\n\nTo measure the behavior of these counters, measure the average and peak\nbandwidth over the course of a single GPU frame, and then delineate with a contiguous block of GPU Utilization.\n**Figure 1.**Texture memory read bandwidth for a single frame, with average value of 565 MBps and peak value of 2.30 GBps\n\nWe recommend an average texture memory read bandwidth of no higher than 1 GBps, and a peak bandwidth no higher than 3 GBps. Texture L1 cache miss should also be no higher than 10%. Higher values for bandwidth or L1 cache may be indicators of deeper texture issues, including:\n\n- *Textures are too large*: Large textures bloat your package size, and are more expensive and may reduce cache efficiency.\n- *Textures are uncompressed*: All Android phones support some types of texture compression, whether it's ETC1 or ASTC. Textures should be compressed to reduce package size and reduce texture bandwidth.\n- *Other*: A variety of other texture concerns should be considered, including power-of-2 textures, mipmapping, anisotropic filtering, and more. Some of these may be observed from the System Profile as discussed below, whereas others may require deeper investigation.\n\nFor three-dimensional games with a free camera, texture assets should use [mipmapping](/agi/sys-trace/link), such that objects at a distance from the camera will have reduced memory bandwidth, better texture cache efficiency, and better image quality. For devices using Qualcomm Adreno GPUs, % **Non-Base Level Textures** counters lower than 10% on average may indicate inadequate mipmapping.\n**Figure 2.**Non-base level textures for a single frame, with an average value of 9.2%\n\nAnother consideration is the use of anisotropic filtering, which is described by the **% Anisotropic Filtered** counter for Qualcomm Adreno GPUs for the proportion of texels that are anisotropic filtered. While this may improve visual quality for some games, it can also be very expensive, and its use should be weighed against the GPU performance cost.\n**Figure 3.**Perecentage of anisotropic filtered for a single frame, with average value of 10.8%\n\nThe best way to diagnose more specific problems is through taking a frame\nprofile trace to analyze texture assets."]]