Auslastung der Vertex-Speicherbandbreite analysieren

Die Speicherbandbreite von Vertex-Daten kann ein potenzieller Engpass für die GPU-Leistung Ihres Spiels sein. In einem AGI-Systemprofil gibt es einige Zähler, mit denen sich Probleme mit der Speicherbandbreite von Vertex-Daten diagnostizieren lassen.

Qualcomm Adreno-Zähler

Auf Geräten mit Qualcomm Adreno-GPUs sind einige bemerkenswerte Zähler:

Zähler Beschreibung
Vertex Memory Read Bandbreite der Vertex-Daten, die aus dem externen Speicher gelesen werden.
Average Bytes/Vertex Durchschnittliche Größe der Vertex-Daten in Byte.
% Vertex Fetch Stall Prozentsatz der Taktzyklen, in denen die GPU durch Vertex-Daten blockiert wird.

ARM Mali-Zähler (in Arbeit)

Auf Geräten mit ARM Mali-GPUs sind einige bemerkenswerte Zähler:

Zähler Beschreibung
Load/store read beats from external memory Daten-Beats, die von der Load/Store-Einheit aus dem externen Speicher gelesen werden, gemittelt über die Shader-Cores.
Load/store read beats from L2 cache Daten-Beats, die von der Load/Store-Einheit aus dem L2-Cache gelesen werden, gemittelt über die Shader-Cores.
[Weitere Informationen]

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. [Weitere Informationen]

Zähleranalyse

Um das Verhalten dieser Zähler zu messen, können Sie die durchschnittliche und maximale Bandbreite im Verlauf eines einzelnen GPU-Frames messen. Dieser kann mit einem zusammenhängenden Block von GPU-Auslastung abgegrenzt werden.

Vertex-Speicherlesebandbreite für einen einzelnen Frame mit einem Durchschnittswert von 327 MB/s und einem Spitzenwert von 1, 16 GB/s
Abbildung 1: Bandbreite für das Lesen von Vertex-Daten 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-Daten von höchstens 1, 5 GB/s und eine durchschnittliche Bandbreite von höchstens 500 MB/s. Höhere Werte sind Anzeichen für eines der folgenden häufigen Probleme:

  • Vertex-Größe ist zu groß: Vertices können große Vertex-Attribute oder eine große Anzahl von Vertex-Attributen haben, was sich erheblich auf die Vertex-Shading-Zeit auswirkt.
  • Vertex-Attributstreams sind nicht aufgeteilt: Vertex-Attribute sind in einem einzigen Puffer verschachtelt, was die Cache-Effizienz verringert.
  • Zu viele Vertices pro Frame gesendet: Komplexe Modelle und/oder eine große Anzahl von Modellen können mehr Bandbreite beanspruchen und länger für das Shading benötigen.

Probleme mit der Vertex-Größe können auch über den Track Average Bytes / 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

Die beste Möglichkeit, um zu diagnostizieren, welches dieser Probleme bei Ihnen vorliegt, ist eine Frame-Profil-Trace zu erstellen, um Vertex-Formate zu analysieren.