Auslastung der Vertex-Speicherbandbreite analysieren

Die Arbeitsspeicherbandbreite von Vertex-Daten kann ein potenzieller Engpass für die GPU-Leistung Ihres Spiels sein. Es gibt einige Zähler in einem AGI-Systemprofil, die bei der Diagnose von Problemen mit der Vertex-Speicherbandbreite helfen können.

Qualcomm Adreno-Zähler

Auf Geräten mit Qualcomm Adreno-GPUs sind unter anderem folgende Zähler verfügbar:

Zähler Beschreibung
Vertex Memory Read Bandbreite der aus dem externen Speicher gelesenen Vertex-Daten.
Durchschnittliche Byte/Vertex Durchschnittliche Größe der Vertex-Daten in Byte.
% Vertex-Abruf-Stall Prozentsatz der Taktzyklen, in denen die GPU aufgrund von Vertex-Daten blockiert ist.

ARM Mali-Zähler (WIP)

Auf Geräten mit ARM Mali-GPUs sind unter anderem die folgenden Zähler verfügbar:

Zähler Beschreibung
Gelesene Beats aus dem externen Speicher laden/dort speichern Datenbits, die von der Load/Store-Einheit aus dem externen Speicher gelesen werden, gemittelt über die Shader-Cores.
Lesevorgänge aus dem L2-Cache laden/speichern Datenbits, die von der Load/Store-Einheit 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. [Mehr]

Gegenanalyse

Um das Verhalten dieser Zähler zu messen, können Sie die durchschnittliche und die Spitzenbandbreite im Laufe eines einzelnen GPU-Frames messen, der durch einen zusammenhängenden Block von GPU-Auslastung abgegrenzt werden kann.

Vertex-Speicherlesebandbreite für einen einzelnen Frame mit einem Durchschnittswert von 327 MB/s und einem Spitzenwert von 1, 16 GB/s
Abbildung 1: Vertex-Speicherlesebandbreite für einen einzelnen Frame mit einem Durchschnittswert von 327 MB/s und einem Spitzenwert von 1, 16 GB/s

Wir empfehlen eine maximale Bandbreite für das Lesen von Vertex-Speicher von höchstens 1, 5 GB/s und eine durchschnittliche Bandbreite von höchstens 500 MB/s. Höhere Werte deuten auf eines von mehreren häufigen Problemen hin:

  • Vertexgröße ist zu groß: Knoten können große Knotenattribute oder eine große Anzahl von Knotenattributen haben, was sich auf die Knoten-Shading-Zeit auswirkt.
  • Vertex-Attributstreams werden nicht aufgeteilt: Vertex-Attribute werden in einem einzigen Puffer verschachtelt, was die Cache-Effizienz verringert.
  • Zu viele Knotenpunkte pro Frame gesendet: Komplexe Modelle und/oder eine große Anzahl von Modellen können mehr Bandbreite beanspruchen und länger zum Rendern benötigen.

Probleme mit der Vertex-Größe können auch über den Track Durchschnittliche Byte pro Vertex diagnostiziert werden. Wir empfehlen, dass dieser Wert nicht höher als 32 Byte oder Vertices ist.

Durchschnittliche Vertex-Größe für einen einzelnen Frame mit einem Durchschnittswert von 31, 3 Byte
Abbildung 2 : Durchschnittliche Vertex-Größe für einen einzelnen Frame mit einem Durchschnittswert von 31, 3 Byte

Am besten lässt sich herausfinden, welches dieser Probleme bei Ihnen auftritt, indem Sie einen Frame-Profil-Trace erstellen, um Vertex-Formate zu analysieren.