Behandeln von Fehlern und Entfernen von Geräten in DirectML

Entfernen von Geräten

Wenn ein nicht behebbarer Fehler auftritt, kann das DirectML-Gerät einen Zustand „Gerät entfernt“ eingeben. Nicht behebbare Fehler, die die Geräteentfernung verursachen, umfassen ungültige API-Verwendung (für Methoden, die kein HRESULT zurückgeben), Treiberfehler, Hardwarefehler oder OOM-Bedingungen (Out-of-Memory).

Wenn ein DirectML-Gerät entfernt wird, werden alle Methodenaufrufe auf dem Gerät und jedes von diesem Gerät erstellte Objekt zu No-ops. Bei Methoden, die ein HRESULT zurückgeben, wird ein DXGI_ERROR_DEVICE_REMOVED Fehlercode zurückgegeben. Mit der IDMLDevice::GetDeviceRemovedReason-Methode können Sie überprüfen, ob das DirectML-Gerät entfernt wurde, und einen detaillierteren Fehlercode abrufen.

Sie können die Geräteentfernung nicht wiederherstellen, außer indem Sie das betroffene Gerät und alle untergeordneten Elemente freigeben und dann das DirectML-Gerät von Grund auf neu erstellen.

Das Entfernen des zugrunde liegenden Direct3D 12-Geräts bewirkt auch, dass das DirectML-Gerät entfernt wird. Umgekehrt ist dies jedoch nicht möglich. Das Entfernen von DirectML-Geräten führt möglicherweise nicht unbedingt dazu, dass das zugrunde liegende Direct3D 12-Gerät entfernt wird.

Debuggen der DirectML-Geräteentfernung und anderer Fehler

Die häufigste Ursache für DirectML-Fehler ist die ungültige API-Verwendung. Ungültige API-Verwendung kann zu einem E_INVALIDARG HRESULT-Fehlercode führen, oder dies kann zu einer Geräteentfernung führen.

Es wird dringend empfohlen, die DirectML-Debugebene während der Entwicklung zu aktivieren, um solche Fehler abzufangen und zu debuggen. Die DirectML-Debugebene führt eine umfangreiche Validierung von Methodenparametern und API-Verwendung durch und gibt Debugausgabemeldungen aus, die Ihnen beim Debuggen helfen.

Weitere Informationen