Freigeben über


GPU-Verwendung

Hinweis

Die Visual Studio-Grafikdiagnose wird in ARM64 Visual Studio nicht unterstützt.

Verwenden Sie das GPU-Verwendungstool im Performance Profiler, um die allgemeine Hardwarenutzung Ihrer Direct3D-App besser zu verstehen. Es hilft Ihnen zu sehen, ob die Leistung Ihrer App CPU-gebunden oder GPU-gebunden ist, und einblicke, wie Sie die Hardware der Plattform effektiver nutzen können. Gpu-Verwendung unterstützt Apps, die Direct3D 12, Direct3D 11 und Direct3D 10 verwenden. Es unterstützt keine anderen Grafik-APIs, z. B. Direct2D oder OpenGL.

So sieht das Fenster " GPU-Nutzungsbericht" aus:

Screenshot des GPU-Nutzungsberichts mit CPU- und GPU-Zeitachsen

Anforderungen

Zusätzlich zu den Anforderungen für die Grafikdiagnose ist Folgendes für die Verwendung des GPU-Verwendungstools erforderlich:

  • Eine GPU und ein Treiber, die die erforderliche Timinginstrumentation unterstützen.

    Hinweis

    Weitere Informationen zu unterstützten Hardware und Treibern finden Sie unter Hardware- und Treiberunterstützung am Ende dieses Dokuments.

Weitere Informationen zu den Anforderungen an die Grafikdiagnose finden Sie unter "Erste Schritte".

Verwenden des GPU-Verwendungstools

Wenn Sie Ihre App unter dem GPU-Verwendungstool ausführen, erstellt Visual Studio eine Diagnosesitzung. In dieser Sitzung werden allgemeine Informationen zur Renderingleistung und GPU-Nutzung Ihrer App in Echtzeit dargestellt.

So starten Sie das GPU-Verwendungstool:

  1. Wählen Sie im Hauptmenü Debug>Leistung und Diagnose aus (oder drücken Sie auf der Tastatur Alt+F2).

  2. Aktivieren Sie im Hub "Leistung und Diagnose " das Kontrollkästchen neben der GPU-Verwendung. Aktivieren Sie optional die Kontrollkästchen neben anderen Tools, an denen Sie interessiert sind. Sie können mehrere Leistungs- und Diagnosetools gleichzeitig ausführen, um ein vollständigeres Bild der Leistung Ihrer App zu erhalten.

    Screenshot des Performance Profiler mit ausgewählter GPU-Nutzung

    Hinweis

    Nicht alle Leistungs- und Diagnosetools können gleichzeitig verwendet werden.

  3. Wählen Sie unten im Hub "Leistung und Diagnose " die Option "Start " aus, um Ihre App unter den ausgewählten Tools auszuführen.

Die allgemeinen Informationen, die in Echtzeit angezeigt werden, umfassen die Frameanzeigedauer, die Bildfrequenz und die GPU-Verwendung. Jeder dieser Informationselemente wird unabhängig voneinander dargestellt, aber alle verwenden eine gemeinsame Zeitskala, sodass Sie die Beziehungen leicht verstehen können.

Die Framezeit (ms) und Frames pro Sekunde (FPS) weisen jeweils zwei rote, horizontale Linien auf, die Leistungsziele von 60 und 30 Frames pro Sekunde darstellen. Im Diagramm der Frame-Zeit erreicht Ihre App das Leistungsziel, wenn sich das Diagramm unter der Linie befindet, und verfehlt das Ziel, wenn sich das Diagramm über der Linie befindet. Für das Frames pro Sekunde-Diagramm ist es umgekehrt: Ihre App überschreitet das Leistungsziel, wenn sich das Diagramm über der Linie befindet, und verfehlt das Ziel, wenn sich das Diagramm unter der Linie befindet. Sie verwenden diese Diagramme in erster Linie, um eine allgemeine Vorstellung von der Leistung Ihrer App zu erhalten und Langsamkeit zu identifizieren, die Sie möglicherweise untersuchen möchten. Eine weitere Untersuchung kann z. B. gerechtfertigt sein, wenn ein plötzlicher Rückgang der Bildfrequenz oder eine Zunahme der GPU-Auslastung angezeigt wird.

Während Ihre App unter dem GPU-Verwendungstool ausgeführt wird, sammelt die Diagnosesitzung auch detaillierte Informationen zu Grafikereignissen, die auf der GPU ausgeführt wurden. Sie verwenden diese Informationen, um einen detaillierteren Bericht darüber zu generieren, wie Ihre App die Hardware nutzt. Da dieser Bericht einige Zeit in Anspruch nimmt, um aus den gesammelten Informationen zu generieren, ist er erst verfügbar, nachdem die Diagnosesitzung das Sammeln von Informationen abgeschlossen hat.

Wenn Sie ein Leistungs- oder Auslastungsproblem genauer betrachten möchten, beenden Sie das Sammeln von Leistungsinformationen, damit Sie den Bericht generieren können.

So generieren und anzeigen Sie den GPU-Nutzungsbericht:

  1. Wählen Sie im unteren Teil des Diagnosesitzungsfensters den Link " Sammlung beenden " aus, oder wählen Sie " Beenden" in der oberen linken Ecke aus.

    Screenshot eines Diagnosesitzungsfensters im GPU-Verwendungstool mit Frames pro Sekunde, GPU-Auslastung, Der Schaltfläche

  2. Wählen Sie im oberen Teil des Berichts einen Abschnitt aus einem der Diagramme aus, in dem das zu untersuchende Problem angezeigt wird. Ihre Auswahl kann bis zu 3 Sekunden lang sein. Längere Abschnitte werden am Anfang abgeschnitten.

    Screenshot eines Diagnosesitzungsfensters im GPU-Verwendungstool mit ausgewähltem Teil der Diagnosesitzungszeitachse.

  3. Um eine detaillierte Zeitachse Ihrer Auswahl anzuzeigen, gehen Sie zum unteren Teil des Berichts und klicken Sie in der Meldung ... klicken Sie hier, um Details zur GPU-Nutzung für diesen Bereich anzuzeigen auf "Details anzeigen".

    Screenshot des Diagnosesitzungsfensters mit ausgewähltem Bereich

Diese Auswahl öffnet ein neues Dokument mit Registerkarten, das den Bericht enthält. Der GPU-Nutzungsbericht hilft Ihnen zu sehen, wann ein Grafikereignis auf der CPU gestartet wird, wann es die GPU erreicht und wie lange die GPU zum Ausführen benötigt wird. Diese Informationen können Ihnen helfen, Engpässe und Möglichkeiten für erhöhte Parallelität in Ihrem Code zu erkennen.

In GPUView oder Windows Performance Analyzer exportieren

Ab Visual Studio 2017 können Sie diese Daten mit GPUView und Windows Performance Analyzer öffnen. Wählen Sie einfach die Links "In GpuView öffnen" oder "In WPA öffnen" in der unteren rechten Ecke der Diagnosesitzung aus.

Screenshot des Diagnosesitzungsfensters mit hervorgehobenen Links

Verwenden Sie den GPU-Nutzungsbericht

Der obere Teil des GPU-Nutzungsberichts zeigt Zeitachsen für die CPU-Verarbeitungsaktivität, die GPU-Renderingaktivität und die GPU-Kopieraktivität an. Diese Zeitachsen werden durch hellgraue vertikale Balken geteilt, die die vertikale Synchronisierung der Anzeige (vsync) angeben. Die Häufigkeit der Balken entspricht der Aktualisierungsrate einer der Displays (ausgewählt mithilfe der Dropdownliste "Anzeige "), aus der GPU-Nutzungsdaten gesammelt wurden.

Da die Anzeige möglicherweise eine höhere Aktualisierungsrate als das Leistungsziel Ihrer App aufweist, gibt es möglicherweise keine 1:1-Beziehung zwischen vsync und der Framerate, die Ihre App erreichen soll. Um das Leistungsziel zu erfüllen, muss eine App die gesamte Verarbeitung abschließen, das Rendern ausführen und einen Present() Aufruf an die zielorientierte Framerate tätigen. Der gerenderte Frame wird erst nach der nächsten vsync angezeigt Present().

Der untere Teil des GPU-Nutzungsberichts listet die Grafikereignisse auf, die während des Zeitraums des Berichts aufgetreten sind. Wenn Sie ein Ereignis auswählen, wird eine Markierung in den entsprechenden Ereignissen in den relevanten Zeitachsen angezeigt. In der Regel zeigt ein Ereignis in einem CPU-Thread den API-Aufruf an, während ein anderes Ereignis auf einer der GPU-Zeitachsen angezeigt wird, wenn die GPU die Aufgabe abgeschlossen hat. Ebenso hebt der Bericht beim Auswählen eines Ereignisses in einer Zeitachse das entsprechende Grafikereignis im unteren Teil des Berichts hervor.

Wenn Sie die Zeitachsen im oberen Teil des Berichts verkleinern, sind nur die zeitaufwendigen Ereignisse sichtbar. Wenn Sie Ereignisse anzeigen möchten, die eine kürzere Dauer haben, zoomen Sie mithilfe von STRG+Rad auf Ihrem Zeigegerät oder mit dem Skalierungssteuerelement in der unteren linken Ecke des oberen Bereichs in die Zeitachse. Sie können auch den Inhalt des Zeitachsenbereichs ziehen, um durch die aufgezeichneten Ereignisse zu navigieren.

Damit Sie das Gesuchte finden, filtern Sie den GPU-Auslastungsbericht, indem Sie nach Prozessnamen, Thread-IDs und dem Ereignisnamen suchen. Darüber hinaus können Sie auswählen, welche Bildwiederholfrequenz des Displays die V-Sync-Linien bestimmt. Sie können Ereignisse hierarchisch sortieren, wenn Ihre App die ID3DUserDefinedAnnotation-Schnittstelle zum Gruppieren von Renderingbefehlen verwendet.

Hier sind weitere Details:

Filtersteuerelement BESCHREIBUNG
Prozess Der Name des Prozesses, an dem Sie interessiert sind. Alle Prozesse, die die GPU während der Diagnosesitzung verwendet haben, sind in dieser Dropdownliste enthalten. Die Farbe, die dem Prozess zugeordnet ist, entspricht der Farbe der Aktivität des Threads in den Zeitachsen.
Faden Die Thread-ID, an der Sie interessiert sind. In einer Multithread-App können Diese Informationen Ihnen dabei helfen, bestimmte Threads zu isolieren, die zu dem Prozess gehören, an dem Sie interessiert sind. Ereignisse, die dem ausgewählten Thread zugeordnet sind, werden in jeder Zeitachse hervorgehoben.
Anzeige Die Nummer der Anzeige, deren Aktualisierungsrate angezeigt wird. Einige Treiber können so konfiguriert werden, dass mehrere physische Displays als einzelne, große virtuelle Anzeige dargestellt werden. Möglicherweise wird nur ein Display aufgelistet, auch wenn das Gerät mehrere Displays angeschlossen hat.
Filter Schlüsselwörter, an denen Sie interessiert sind. Ereignisse im unteren Teil des Berichts enthalten nur diejenigen, die einem Schlüsselwort entsprechen, vollständig oder teilweise. Sie können mehrere Schlüsselwörter angeben, indem Sie sie durch ein Semikolon (;)) trennen.
Hierarchiesortierung Ein Kontrollkästchen, das angibt, ob Ereignishierarchien, definiert durch Benutzermarkierungen, beibehalten oder ignoriert werden.

Die Liste der Ereignisse im unteren Teil des GPU-Nutzungsberichts zeigt die Details der einzelnen Ereignisse an.

Kolumne BESCHREIBUNG
Name des Ereignisses Der Name des Grafikereignisses. Ein Ereignis entspricht in der Regel einem Ereignis in einer CPU-Threadzeitachse und einem GPU-Zeitachsenereignis. Ereignisnamen sind möglicherweise nicht attributiert , wenn die GPU-Verwendung den Namen eines Ereignisses nicht ermitteln kann. Weitere Informationen finden Sie in der folgenden Tabelle.
CPU-Start (ns) Die Zeit, zu der das Ereignis auf der CPU durch Aufrufen einer Direct3D-API initiiert wurde. Die Zeit wird in Nanosekunden gemessen, relativ zu dem Zeitpunkt, zu dem die App gestartet wurde.
GPU-Start (ns) Die Zeit, zu der das Ereignis auf der GPU initiiert wurde. Die Zeit wird in Nanosekunden gemessen, relativ zu dem Zeitpunkt, zu dem die App gestartet wurde.
GPU-Dauer (ns) Die Zeit in Nanosekunden, die das Ereignis auf der GPU dauerte.
Prozessname Der Name der App, aus der das Ereignis stammt.
Thread-ID Die Thread-ID, aus der das Ereignis stammt.

Von Bedeutung

Wenn Ihre GPU oder Ihr Treiber die erforderlichen Instrumentierungsfeatures nicht unterstützt, werden alle Ereignisse als nicht attributiert angezeigt. Wenn dieses Problem auftritt, aktualisieren Sie Ihren GPU-Treiber, und versuchen Sie es erneut. Weitere Informationen finden Sie unter Hardware- und Treiberunterstützung am Ende dieses Dokuments.

GPU-Verwendungseinstellungen

Sie können das GPU-Verwendungstool so konfigurieren, dass die Sammlung von Profilerstellungsinformationen verschoben wird, anstatt zu beginnen, Informationen zu sammeln, sobald die App gestartet wird. Da die Größe der Profilerstellungsinformationen erheblich sein kann, ist diese Aktion nützlich, wenn Sie wissen, dass Leistungsverlangsamungen in Ihrer App erst später auftreten.

So verschieben Sie die Profilerstellung vom Anfang der App:

  1. Wählen Sie im Hauptmenü Debug>Leistung und Diagnose aus (oder drücken Sie auf der Tastatur Alt+F2).

  2. Wählen Sie im Hub "Leistung und Diagnose " neben der GPU-Verwendung den Link "Einstellungen" aus.

  3. Deaktivieren Sie auf der Seite "Allgemeine Eigenschaften" unter "GPU-Profilerstellungskonfiguration" das Kontrollkästchen "Profilerstellung bei App-Start starten", um die Profilerstellung zu verschieben.

    Screenshot der Objekteigenschaften-Seiten mit Auflistungsoptionen

Von Bedeutung

Derzeit können Sie die Profilerstellung für Direct3D 12-Apps nicht verschieben.

Nachdem Sie Ihre App unter dem GPU-Verwendungstool ausgeführt haben, wird im unteren Teil des Toolfensters "GPU-Verwendung" ein zusätzlicher Link verfügbar. Um mit der Erfassung von Profilerstellungsinformationen zu beginnen, wählen Sie den Startlink in der Meldung " Start" aus, um zusätzliche detaillierte GPU-Nutzungsdaten zu sammeln .

Hardware- und Treiberunterstützung

Die folgende GPU-Hardware und -Treiber werden unterstützt:

Hersteller GPU-Beschreibung Treiberversion erforderlich
Intel® Intel® Core-Prozessoren der 4. Generation ('Haswell')

- Intel® HD Graphics (GT1)
- Intel® HD Graphics 4200 (GT2)
- Intel® HD Graphics 4400 (GT2)
- Intel® HD Graphics 4600 (GT2)
- Intel® HD Graphics P4600 (GT2)
- Intel® HD Graphics P4700 (GT2)
- Intel® HD Graphics 5000 (GT3)
- Intel® Iris™ Graphics 5100 (GT3)
- Intel® Iris™ Pro Graphics 5200 (GT3e)
(neueste Treiber verwenden)
AMD® Die meisten seit der AMD Radeon™ HD 7000-Serie (schließt AMD Radeon™ HD 7350-7670) aus.

AMD Radeon™ GPU, AMD FirePro™ GPUs und AMD FirePro GPU Accelerators mit Graphics Core Next (GCN)-Architektur

AMD E-Series und AMD® A-Serie Accelerated Processing Units (APUs) mit Graphics Core Next (GCN)-Architektur ('Kaveri', 'Kabini', 'Temash' , 'Beema', 'Mullins')
14.7 RC3 oder höher
NVIDIA® Die meisten seit der NVIDIA® GeForce® 400-Serie

NVIDIA® GeForce® GPUs, NVIDIA Quadro® GPUs und NVIDIA® Tesla™ GPU-Beschleuniger mit Fermi™-, Kepler™- oder Maxwell™-Architektur
343.37 oder höher

Multi-GPU-Konfigurationen wie NVIDIA® SLI™ und AMD Crossfire™ werden derzeit nicht unterstützt. Hybridgrafiksetups wie NVIDIA® Optimus™ und AMD Enduro™ werden unterstützt.