Bandbreitennutzung des Texturspeichers analysieren
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Die Speicherbandbreite von Texturdaten kann ein potenzieller Engpass für die GPU-Leistung Ihrer App sein. Einige Zähler in einem AGI-Systemprofil können bei der Diagnose von Problemen mit der Bandbreite des Texturspeichers helfen.
Qualcomm Adreno-Zähler
Auf Geräten mit Qualcomm Adreno-GPUs sind unter anderem folgende Zähler verfügbar:
Zähler
Beschreibung
Bandbreite für das Lesen von Texturspeicher (Byte/Sekunde)
Bandbreite der Texturdaten, die aus dem externen Speicher gelesen werden.
% Texture L1 Miss
L1-Cache-Fehler beim Abrufen von Texturen.
% Nicht-Basisebenen-Texturen
Prozentsatz der Texturabrufe, die Mipmaps sind.
% Anisotrop gefiltert
Prozentsatz der Texel, die anisotrop gefiltert werden.
ARM Mali-Zähler
Auf Geräten mit ARM Mali-GPUs sind unter anderem die folgenden Zähler verfügbar:
Zähler
Beschreibung
Texturlesevorgänge aus externem Speicher
Daten werden von der Textureinheit aus dem externen Speicher gelesen und über die Shader-Cores gemittelt.
Texturlesevorgänge aus dem L2-Cache
Datenbits, die von der Textureinheit aus dem L2-Cache gelesen werden, gemittelt über die Shader-Cores.
[Mehr]
Um die Gesamtbandbreite aus den durchschnittlichen Lesevorgängen zu berechnen, wird der Zählerwert mit der Busbreite (in der Regel 16 Byte) und der Gesamtzahl der Shader-Cores multipliziert.
Gegenanalyse
Um das Verhalten dieser Zähler zu messen, erfassen Sie die durchschnittliche und maximale Bandbreite im Laufe eines einzelnen GPU-Frames und grenzen Sie sie dann mit einem zusammenhängenden Block der GPU-Auslastung ab.
Abbildung 1. Bandbreite für das Lesen von Texturspeicher für einen einzelnen Frame mit einem Durchschnittswert von 565 MB/s und einem Spitzenwert von 2, 30 GB/s
Wir empfehlen eine durchschnittliche Bandbreite für das Lesen von Texturspeicher von maximal 1 GB/s und eine Spitzenbandbreite von maximal 3 GB/s. Die Anzahl der L1-Cache-Fehler bei Texturen sollte nicht höher als 10 % sein. Höhere Werte für Bandbreite oder L1-Cache können auf schwerwiegendere Texturprobleme hinweisen, z. B.:
Texturen sind zu groß: Große Texturen erhöhen die Paketgröße, sind teurer und können die Cache-Effizienz verringern.
Texturen sind nicht komprimiert: Alle Android-Smartphones unterstützen bestimmte Arten der Texturkomprimierung, z. B. ETC1 oder ASTC. Texturen sollten komprimiert werden, um die Paketgröße und die Texturbandbreite zu verringern.
Sonstiges: Es gibt eine Reihe weiterer Texturprobleme, die berücksichtigt werden sollten, darunter Texturen mit Potenz von 2, Mipmapping und anisotropes Filtern. Einige dieser Probleme lassen sich anhand des Systemprofils beobachten (siehe unten), während andere eine genauere Untersuchung erfordern.
Bei dreidimensionalen Spielen mit einer kostenlos beweglichen Kamera sollten Textur-Assets Mipmapping verwenden, damit Objekte, die sich in einiger Entfernung von der Kamera befinden, eine geringere Speicherbandbreite, einen effizienteren Textur-Cache und eine bessere Bildqualität aufweisen. Bei Geräten mit Qualcomm Adreno-GPUs können Zähler für Texturen ohne Basisebene, die im Durchschnitt unter 10 % liegen, auf unzureichendes Mipmapping hinweisen.
Abbildung 2. Nicht-Basisebenen-Texturen für einen einzelnen Frame mit einem Durchschnittswert von 9, 2%
Eine weitere Überlegung ist die Verwendung von anisotropem Filtern, das durch den Zähler % Anisotropic Filtered für Qualcomm Adreno-GPUs für den Anteil der Texel beschrieben wird, die anisotrop gefiltert werden. Dies kann zwar die visuelle Qualität einiger Spiele verbessern, ist aber auch sehr rechenintensiv. Die Verwendung sollte daher gegen die Kosten für die GPU-Leistung abgewogen werden.
Abbildung 3. Prozentsatz der anisotrop gefilterten Pixel für einen einzelnen Frame mit einem Durchschnittswert von 10, 8%
Am besten lassen sich spezifische Probleme diagnostizieren, indem Sie einen Frame-Profil-Trace erstellen, um Textur-Assets zu analysieren.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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."]]