DirectML でのエラーとデバイス削除の処理
致命的なエラーが発生した場合、DirectML デバイスにより "デバイス削除済み" 状態が入力される場合があります。 デバイス削除の原因となる致命的なエラーには、無効な API の使用 (HRESULT を返さないメソッドの場合)、ドライバー エラー、ハードウェア障害、またはメモリ不足 (OOM) 状態が含まれます。
DirectML デバイスが削除されると、デバイス上ですべてのメソッドが呼び出され、そのデバイスによって作成されるすべてのオブジェクトが ops なしになります。 HRESULT を返すメソッドの場合、DXGI_ERROR_DEVICE_REMOVED エラー コードが返されます。 IDMLDevice::GetDeviceRemovedReason メソッドを使用して、DirectML デバイスが削除されたかどうかを確認し、より詳細なエラー コードを取得することができます。
デバイス削除から回復する唯一の方法は、該当のデバイスとそのすべての子をリリースしてから、一から DirectML デバイスを再作成します。
該当の Direct3D 12 デバイスのデバイス削除により、DirectML デバイスも削除されます。 ただし、逆はできません。 DirectML デバイス削除によって、該当の Direct3D 12 デバイスが必ずしも削除される訳ではありません。
DirectML エラーの最も一般的な原因は、無効な API の使用です。 無効な API の使用により、E_INVALIDARG HRESULT エラー コードやデバイス削除が発生する可能性があります。
こうしたエラーを検出しデバッグするには、デプロイ中に DirectML デバッグ レイヤーを有効にすることを強くお勧めします。 DirectML デバッグ レイヤーでは、メソッド パラメーターと API 使用の広範な検証が実行され、デバッグに役立つデバッグ出力メッセージが生成されます。