Freigeben über


Debuggen von GPU-Code

Sie können C++-Code debuggen, der auf der Grafikverarbeitungseinheit (GPU) ausgeführt wird. Die GPU-Debuggingunterstützung in Visual Studio umfasst die Erkennung von Rennen, das Starten von Prozessen und das Anfügen an sie sowie die Integration in die Debugfenster.

Unterstützte Plattformen

Das Debuggen wird unter Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 und Windows Server 2016 unterstützt. Für das Debuggen im Software-Emulator, Windows 8, Windows 10, Windows 11 oder Windows Server 2012 ist Windows Server 2016 erforderlich. Für das Debuggen auf der Hardware müssen Sie die Treiber für Ihre Grafikkarte installieren. Nicht alle Hardwareanbieter implementieren alle Debuggerfeatures. Einschränkungen finden Sie in der Herstellerdokumentation.

Hinweis

Unabhängige Hardwareanbieter, die gpu-Debugging in Visual Studio unterstützen möchten, müssen eine DLL erstellen, die die VSD3DDebug-Schnittstelle implementiert und auf ihre eigenen Treiber ausgerichtet ist.

Konfigurieren des GPU-Debuggings

Der Debugger kann nicht sowohl für CPU-Code als auch für GPU-Code in derselben Anwendungsausführung unterbrechen. Standardmäßig unterbricht der Debugger den CPU-Code. Verwenden Sie zum Debuggen von GPU-Code eine der folgenden beiden Schritte:

  • Wählen Sie in der Liste Debugtyp auf der Standardsymbolleistenur GPU aus.

  • Wählen Sie im Projektmappen-Explorer im Kontextmenü des Projekts "Eigenschaften" aus. Wählen Sie im Dialogfeld Eigenschaftenseiten"Debuggen" und dann in der Liste "Debuggertyp" die Option "GPU nur" aus.

Starten und Anfügen an Anwendungen

Sie können die Visual Studio-Debuggingbefehle verwenden, um das GPU-Debugging zu starten und zu beenden. Weitere Informationen finden Sie unter Navigieren durch Code mit dem Debugger. Sie können den GPU-Debugger auch an einen ausgeführten Prozess anfügen, aber nur, wenn dieser Prozess GPU-Code ausführt. Weitere Informationen finden Sie unter "Anfügen an ausgeführte Prozesse".

Aktuelle Kachel auf Cursor ausführen und zum Cursor ausführen

Beim Debuggen auf der GPU gibt es zwei Optionen zum Ausführen an der Cursorposition. Die Befehle für beide Optionen stehen im Kontextmenü des Code-Editors zur Verfügung.

  1. Der Befehl "An Cursor ausführen" führt Ihre App aus, bis sie den Cursor erreicht und dann stoppt. Dies bedeutet nicht, dass der aktuelle Thread bis zum Cursor ausgeführt wird; vielmehr bedeutet dies, dass der erste Thread, der den Cursorpunkt erreicht, die Unterbrechung auslöst. Navigieren durch den Code mit dem Debugger

  2. Der Befehl "Aktuelle Kachel an Cursor ausführen" führt Ihre App aus, bis alle Threads in der aktuellen Kachel den Cursor erreichen und dann gestoppt wird.

Debuggen von Windows

Mithilfe bestimmter Debugging-Fenster können Sie GPU-Threads untersuchen, kennzeichnen und einfrieren. Weitere Informationen finden Sie unter:

Ausnahmen für die Datensynchronisierung

Der Debugger kann während der Ausführung mehrere Datensynchronisierungsbedingungen identifizieren. Wenn eine Bedingung erkannt wird, wechselt der Debugger in den Unterbrechungszustand. Sie haben zwei Optionen: "Abbrechen " oder "Fortfahren". Mithilfe des Dialogfelds "Ausnahmen " können Sie konfigurieren, ob der Debugger diese Bedingungen erkennt und für welche Bedingungen es nicht mehr funktioniert. Weitere Informationen finden Sie unter Verwalten von Ausnahmen mit dem Debugger. Sie können auch das Dialogfeld "Optionen " verwenden, um anzugeben, dass der Debugger Ausnahmen ignorieren soll, wenn die geschriebenen Daten den Wert der Daten nicht ändern. Weitere Informationen finden Sie im Dialogfeld "Allgemein", "Debuggen", "Optionen".

Problembehandlung

Angeben eines Beschleunigers

Haltepunkte im GPU-Code werden nur aktiviert, wenn der Code auf dem Accelerator::direct3d_ref (REF)-Beschleuniger ausgeführt wird. Wenn Sie in Ihrem Code keinen Beschleuniger angeben, wird der REF-Beschleuniger automatisch als Debugging-Beschleuniger-Typ in den Projekteigenschaften ausgewählt. Wenn Ihr Code explizit einen Beschleuniger auswählt, wird der REF-Beschleuniger während des Debuggens nicht verwendet, und die Haltepunkte werden nicht ausgelöst, es sei denn, Ihre GPU-Hardware unterstützt Debugging. Sie können dies beheben, indem Sie Ihren Code so schreiben, dass er beim Debuggen den REF-Beschleuniger verwendet. Weitere Informationen finden Sie unter Projekteigenschaften und Verwenden von Accelerator- und accelerator_view-Objekten und Projekteinstellungen für eine C++-Debugkonfiguration.

Bedingte Haltepunkte

Bedingte Haltepunkte im GPU-Code werden unterstützt, aber nicht jeder Ausdruck kann auf dem Gerät ausgewertet werden. Wenn ein Ausdruck auf dem Gerät nicht ausgewertet werden kann, wird er im Debugger ausgewertet. Der Debugger wird wahrscheinlich langsamer ausgeführt als das Gerät.

Fehler: Es gibt ein Konfigurationsproblem mit dem ausgewählten Debugging Accelerator-Typ.

Dieser Fehler tritt auf, wenn zwischen den Projekteinstellungen und der Konfiguration des PCs, auf dem Sie debuggen, eine Inkonsistenz besteht. Weitere Informationen finden Sie unter Project-Einstellungen für eine C++-Debugkonfiguration.

Fehler: Der Debugtreiber für den ausgewählten Debugging Accelerator-Typ ist auf dem Zielcomputer nicht installiert.

Dieser Fehler tritt auf, wenn Sie auf einem Remote-PC debuggen. Der Debugger kann erst zur Laufzeit feststellen, ob die Treiber auf dem Remote-PC installiert sind. Die Treiber sind vom Hersteller der Grafikkarte erhältlich.

Fehler: Timeouterkennung und -wiederherstellung (Timeout Detection and Recovery, TDR) muss am Remotestandort deaktiviert werden.

Es ist möglich, dass C++-AMP-Berechnungen das Standardzeitintervall überschreiten, das vom Windows-Timeouterkennungs- und Wiederherstellungsprozess (Timeout Detection and Recovery Process, TDR) festgelegt wird. In diesem Fall wird die Berechnung abgebrochen, und die Daten gehen verloren. Weitere Informationen finden Sie unter Behandeln von TDRs in C++AMP.