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

设备删除

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

删除 DirectML 设备时,设备上的所有方法调用以及该设备创建的每个对象都变为 no-op。 对于返回 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 用法的广泛验证,它将发出调试输出消息来帮助进行调试。

另请参阅