在 DirectML 中处理错误和设备删除

设备移除

如果发生不可恢复的错误,DirectML 设备可能会进入“设备删除”状态。 导致设备删除的不可恢复错误包括无效的 API 用法(对于不返回 HRESULT 的方法)、驱动程序错误、硬件故障或内存不足(OOM)条件。

删除 DirectML 设备后,设备上的所有方法调用,以及该设备创建的每个对象,都会变为无操作。 对于返回 HRESULT 的方法,将返回 DXGI_ERROR_DEVICE_REMOVED 错误代码。 可以使用 IDMLDevice::GetDeviceRemovedReason 方法检查 DirectML 设备是否已删除,并检索更详细的错误代码。

除非释放受影响的设备及其所有子设备,然后从头开始重新创建 DirectML 设备,否则无法从设备删除中恢复。

移除底层 Direct3D 12 设备会导致 DirectML 设备也被移除。 但是,反过来则不行。 DirectML 设备删除不一定会导致基础 Direct3D 12 设备被删除。

调试 DirectML 设备删除和其他错误

DirectML 错误的最常见原因是 API 用法无效。 无效的 API 用法可能会导致 E_INVALIDARG HRESULT 错误代码,否则可能会导致设备删除。

强烈建议在开发过程中启用 DirectML 调试层 ,以便捕获和调试此类错误。 DirectML 调试层对方法参数和 API 用法执行广泛的验证,它将发出调试输出消息来帮助你进行调试。

另请参阅